diff --git a/software/Print3r/LICENSE b/software/Print3r/LICENSE
deleted file mode 100644
index f288702d..00000000
--- a/software/Print3r/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
- .
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/software/Print3r/Makefile b/software/Print3r/Makefile
deleted file mode 100644
index 977636a6..00000000
--- a/software/Print3r/Makefile
+++ /dev/null
@@ -1,75 +0,0 @@
-NAME=Print3r
-VERSION=0.3.20
-#DEST_BIN=~/bin/
-DEST_BIN=/usr/bin
-DEST_SHARE=/usr/share
-CMD=print3r
-NICK=print3r
-CPAN=cpan
-
-all::
- @echo "make requirements install deinstall"
- @echo "-- on low RAM systems use 'apt install cpanminus' and then 'make CPAN=cpanm requirements'"
-
-requirements::
- sudo apt install libexpat-dev libcurses-perl libncurses5-dev libreadline-dev
- sudo ${CPAN} File::Which IO::Zlib Time::HiRes Device::SerialPort XML::Simple JSON IO::Termios Term::ReadLine::Gnu Linux::Termios2 Algorithm::BinPack::2D
- sudo apt install libgd-perl ser2net socat slic3r
- sudo apt install yagv
-
-install::
- sudo cp ${CMD} ${DEST_BIN}/
- mkdir -p ${HOME}/.config/${NICK}; cd ${HOME}/.config/${NICK}; mkdir -p printer macro macro/filament slicer gconsole gconsole/commands
- sudo mkdir -p ${DEST_SHARE}/${NICK}
- cd settings; tar cf - printer/*.ini macro/*.ini macro/filament/*.ini slicer/*.json slicer/*/base.ini slicer/*/map.ini slicer/*/*.def.json slicer/*/strict.ini gconsole | (cd ${DEST_SHARE}/${NICK}/; sudo tar xf -)
-
-deinstall::
- sudo rm -f ${DEST_BIN}/${CMD}
-
-# ---------------------------------------------------------------------------------------------------------------
-# -- developer(s) only:
-
-edit::
- dee4 print3r Makefile CHANGELOG README.md LICENSE settings/slicer/*.json settings/*/*.ini settings/*/*/*.ini settings/gconsole/commands/*
-
-backup::
- cd ..; tar cfz ${NAME}-${VERSION}.tar.gz "--exclude=*/slicers/*" ${NAME}; mv ${NAME}-${VERSION}.tar.gz ~/Backup; scp ~/Backup/${NAME}-${VERSION}.tar.gz backup:Backup/
-
-backup-settings::
- cd ~/; tar cfz ${NAME}-Config-`date +%F`.tar.gz .config/print3r; mv ${NAME}-Config-`date +%F`.tar.gz ~/Backup/; scp ~/Backup/${NAME}-Config-`date +%F`.tar.gz backup:Backup/
-
-change::
- git commit -am "..."
-
-pull::
- git pull
-
-push::
- git push -u origin master
-
-examples::
- ./print3r --fill-density=0 --output=examples/cube.png render Parts/cube.scad
- ./print3r --fill-density=0 --scale=50mm --output=examples/cube-scaled1.png render Parts/cube.scad
- ./print3r --fill-density=0 --scale=10mm,20mm,100mm --output=examples/cube-scaled2.png render Parts/cube.scad
- ./print3r --fill-density=0 --output=examples/benchy.png render Parts/3DBenchy.stl
- ./print3r --fill-density=0 --scale=0,0,150mm --output=examples/benchy-scaled.png render Parts/3DBenchy.stl
-
-logdb:: logdb-setup
- sqltk --uri=pg://print3r --input=jsonl --filter=ascii --keys=@ -- "insert into parts (data) values (?)" < ~/.print3r/log.json
-
-logdb-setup::
- createdb print3r
- sqltk --uri=pg://print3r "create table parts ( data jsonb )"
-
-logdb-test::
- sqltk --uri=pg://print3r --output=json "select data from parts where data->'uid' = ?" '"...."'
- sqltk --uri=pg://print3r --output=json "select data from parts where data->'file_list' @> ?" '"cube.stl"'
-
-stuffdb:: stuffdb-setup
- sqltk --uri=pg://mystuff --input=jsonl --filter=ascii --keys=@ -- "insert into print3r (data) values (?)" < ~/.print3r/log.json
-
-stuffdb-setup::
- sqltk --uri=pg://mystuff "drop table print3r"
- sqltk --uri=pg://mystuff "create table print3r ( data jsonb )"
-
-
diff --git a/software/Print3r/README.md b/software/Print3r/README.md
deleted file mode 100644
index 12096b81..00000000
--- a/software/Print3r/README.md
+++ /dev/null
@@ -1,220 +0,0 @@
-# Print3r
-
-## Introduction
-
-**Print3r** is a command-line tool (without GUI) to print 3d parts (.gcode, .stl, .amf, .3mf, .obj, .off, .scad, .sscad, etc)
-to 3d printers, utilizing a slicer of your choice (Slic3r, Slic3r PE, PrusaSlicer, SuperSlicer, CuraEngine 3.x, CuraEngine 4.x, CuraEngine 5.x, Cura 15.04 and a few more).
-
-### Examples
-```
-print3r -p prusa-i3 print cube.scad
-print3r -p ender3 -d /dev/ttyUSB1 print cube.stl
-print3r preview cube.gcode
-```
-
-### Main Features
-- **print** `.scad`, `.stl`\* or `.gcode` to 3d printers
-- **slice** `.scad` or `.stl`\* saving `.gcode` without printing
-- **preprocess parts** with `--scale=,,`, `--rotate=,,`, `--translate=,,`, `--random-placement`, `--auto-center`, `--multiply-part=`
-- **use slicer-independent arguments** like `--temperature=`, `--layer-height=`, `--fill-density=`, `--perimeters=`, etc.
-- **send Gcode** from command line arguments with **gcode** or console interactively with **gconsole** command
-- **render Gcode** and sliced .stl, .scad into `.png` image with **render** command
-- **preview Gcode** using `yagv` Gcode viewer with **preview** command
-- **log** lists all past finished prints with all settings used
-
-\*) `.stl` (ascii & binary), and preliminary `.amf` and `.obj` supported as well.
-
-## Changelog
-2022:
-- 0.3.20: new `@revo-{yellow,red,blue,green,pink}` macros, `-o ` added
-- 0.3.19: `--device/-d --printer/-p --slicer/-s` short-cuts added
-- 0.3.18: support CuraEngine-5.x / cura5 better
-- 0.3.17: adding locks for avoiding to print simulatenously to the same printer, better support for cura-slicer & CuraEngine 5.x
-- 0.3.16: `--scad` with `--scad.`= to pass variables to OpenSCAD models, experimental support for `metatron-` and `enoch-slicer` (--slicer=`metatron` or `enoch`)
-- 0.3.15: experimental support for voxgl-slicer (`--slicer=voxgl`)
-
-2021:
-- 0.3.14: experimental support for `lab-slicer` and `vox3l-slicer` (`--slicer=lab` or `vox3l`)
-- 0.3.13: supporting webcams via `webcam=[ ...]` and `webcam_snap=[ ...]`
-- 0.3.12: more printer info in log-file, firmware and `M501` output
-- 0.3.11: experimental support for `zplus-slicer` (`--slicer=zplus`)
-- 0.3.10: each successful(ended) logged print contains new or `--uid=...` uid (to track printed parts)
-- 0.3.9: 'log' lists all finished prints, incl. search with term or reference (see help)
-- 0.3.6: support for `--post=[,...]` and `--post_=proc %i -o %o`
-- 0.3.5: experimental support for --slicer=cura-slicer & 5dmaker
-- 0.3.4: --cols= and --rows= in case --multiply-part is used
-- 0.3.3: experimental support for `--slicer=mandoline` added
-- 0.3.2: experimental support for `--slicer=slicer4rtn` added
-
-2019:
-- 0.3.0: better pipeline of processing div. formats, preliminary 3mf and 3mj (new format) support
-- 0.2.8: CuraEngine-4.2.0 support via `--slicer=cura4`, see wiki for install instructions
-- 0.2.6: cleaner script-layer within Gcode processing, slic3r-*: better multi-extruder support `--toolmap` & `--toolremap`
-- 0.2.5: preliminary `--slicer=prusa` support, additional inline functions support for gcode transformation: `&toolcolor(n,a,b,c,d,e)`, `&hsl2cmy(h,s,l)`, `&phases(n=2|3,p=3|4)`
-- 0.2.3: support for `--prepend_gcode=...` for start-gcode addition, and `--layer-gcode=...`
-- 0.2.2: support for `skirts`, `brims` and `rafts`, `support` and `seam` slicer-independent
-
-2018:
-- 0.2.0: `client` command added, and `--device=tcp:[:]` added for remote printing capabilities
-- 0.1.8: proper cleanup of temporary files (incl. CTRL-C abort)
-- 0.1.7: more slicer-independent speed settings (`print/travel/infill/perimeter/small_perimeter/bridge/retract_speed`)
-- 0.1.6: restructure the file layout of settings (e.g. at `/usr/share/print3r` & `~/.config/print3r/`)
-- 0.1.5: new option `--scad=` to additionally execute openscad code
-- 0.1.4: various improvements, remap() of general settings to slice-specific settings via `...//map.ini`
-- 0.1.1: better support for `--slicer=cura` and `cura-legacy`
-- 0.1.0: `--slicer=` with `--printer=` leads to `..//`, `@` leads to `settings/macro/`
-- 0.0.9: preliminary `.amf` and `.obj` native support for preprocessing (scale,rotate,translate,mirror)
-- 0.0.8: absolute scaling like `--scale=0,0,30mm` or `--scale=50mm`, and `--scale=50%` same as `--scale=0.5`, `--auto-center` to center print
-- 0.0.7: `PRINT3R` enviromental variable considered, `'baudrate=auto'` probes baudrate.
-- 0.0.6: publically released source on github
-
-### To Do / Planned
-- ~~slicer agnostic, e.g. support of CuraEngine (just the slicer)~~: done since 0.1.6 with `slic3r`, `slic3r-pe`, `cura-legacy` and `cura`
-- ~~network connectivity, distributed printing via tcp/ip~~: done since 0.2.0 with `client` command and `--device=tcp:[:]` (n=0 (default),1,2 etc)
-- ~~preview gcode in OpenGL/WebGL zoomable views~~: done with 0.1.6 via external [`yagv` viewer](https://github.com/Spiritdude/yagv)
-- multiple extruder support (preferably slicer-independent)
-
-## Platform
-Primary focus in on **Linux** (Debian, Ubuntu) and alike platforms like FreeBSD and such.
-
-## Requirements
-- install `openscad`, see [OpenSCAD.org](http://www.openscad.org/)
-- install `slic3r`, Debian/Ubuntu: `apt install slic3r`
-- optional:
- - recommended: [install Slic3r PE](https://github.com/Spiritdude/Print3r/wiki/Print3r:-Slic3r-&-Slic3r-PE)
- - recommended: [install CuraEngine](https://github.com/Spiritdude/Print3r/wiki/Print3r:-Cura)
- - [install CuraEngine Legacy](https://github.com/Spiritdude/Print3r/wiki/Print3r:-Cura-Legacy)
- - recommended: [install FreeCAD2Any](https://github.com/Spiritdude/FreeCAD2Any) which supports FCStd, IGES, STEP and Brep import as well
-
-## License
-The software is licensed under GPLv3
-
-## Download
-```
-git clone https://github.com/Spiritdude/Print3r
-cd Print3r
-```
-## Install
-```
-make requirements
-make install
-```
-
-### Printer Configurations
-See [Profiles](https://github.com/Spiritdude/Print3r/wiki/Print3r:-Profiles) how to setup a dedicated printer profile.
-
-## Usage
-```
-Print3r (print3r) 0.3.20 USAGE: [] [<...>]
-
- options:
- --verbose or -v or -vv increase verbosity
- --quiet or -q no output except fatal errors
- --baudrate= set baudrate, default: 115200
- -b
- --device= set device, default: /dev/ttyUSB0
- -d
- --slicer= set slicer, default: slic3r
- -s
- 5dmaker, cura, cura-legacy, cura-slicer, cura4, cura5, curax, enoch, goslice, kirimoto, lab, mandol
-ine, metatron, prusa, slic3r, slic3r-pe, slicer4rtn, super, vox3l, voxgl, zplus
- --printer= config of printer, default: default
- -p
- --version display version and exit
- --output= define output file for 'slice' and 'render' command
- -o
- --scad consider all arguments as actual OpenSCAD code (not files)
- --scadlib= define OpenSCAD files separated by "," or ":"
- by default 'use ', change with --scadimport=include
- --prepend-gcode=... add manually start-gcode
- --layer-gcode=... insert gcode at layer change
- --display_update=off turn built-in display updates off
- --post_=... define a post-processing stage (use '%i' input file, '%o' output file)
- --post=[,] apply post-processing stage(s)
- part preprocessing:
- --random-placement place print randomly on the bed
- --auto-center place print in the center
- --multiply-part= multiply part(s)
- --rows= define rows for multiplied parts
- --cols= define cols for multiplied parts
- --scale=,, scale part x,y,z (absolute if 'mm' is appended)
- --scale= scale part f,f,f
- --rotate=,, rotate x,y,z
- --translate=,, translate x,y,z
- --mirror=,, mirror x,y,z (0=keep, 1=mirror)
- --uid= define part unique id (default: auto generated uid)
- --= include any valid slicer option (e.g. slic3r --help)
-
- commands:
- print [...] print (convert & slice & print) part(s) (3mf, 3mj, 5mf, amf, brep, fcstd, iges, obj, off, step, stl)
- slice [...] slice file(s) to gcode (same formats as 'print')
- preview [...] slice & preview (same formats as 'print')
- render [...] render an image (use '--output=sample.png' or so)
- gcode [...] send gcode lines
- gconsole start gcode console
- client map USB connected printer to network (per device)
- log [|<#num>] list log of finished prints, use -v for details or --format=json to dump JSON
- use --output=[,] to list particular keys
- if num is negative, the last entries are shown, e.g. '#-5'
- help
-
- examples:
- export PRINT3R "printer=my_printer" --OR-- setenv PRINT3R "printer=my_printer"
- print3r slice cube.stl
- print3r --layer-height=0.2 -o test.gcode slice cube.stl
- print3r -p ender3 -d /dev/ttyUSB1 print test.gcode
- print3r -p corexy -d /dev/ttyUSB2 --layer-height=0.3 --fill-density=0 print cube.stl
- print3r -p ender3 -d tcp:192.168.0.2 --layer-height=0.25 print cube.stl
- print3r print cube.scad
- print3r print parametric.scad --scad.A=20 --scad.B=30
- print3r --scad print "cube(20)"
- print3r --scad print "cube(a)" --scad.a=20
- print3r log
- print3r --output=uid,layer_height log cube
- print3r log -v '#12'
- print3r gcode 'G28 X Y' 'G1 X60' 'G28 Z'
- print3r gconsole
- == Print3r: Gcode Console (gconsole) - use CTRL-C or 'exit' or 'quit' to exit
- for valid Gcode see https://reprap.org/wiki/G-code
- conf: device /dev/ttyUSB0, connected
- > M115
- ...
-
-```
-
-## More Examples
-```
-print3r --fill-density=0 --layer-height=0.2 print cube.scad
-print3r --print-center=100,100 print cube.scad
-print3r --printer=ender3.ini --device=/dev/ttyUSB1 --random-placement --rotate=45,0,0 print cube.scad
-print3r -p ender3.ini -d /dev/ttyUSB1 --random-placement --rotate=45,0,0 print cube.scad
-print3r --multiply-part=3 --scale=50% print cube.scad
-```
-
-### Scaling Parts
-```
-print3r --scale=2 print cube.scad
-print3r --scale=1,4,0.5 print cube.scad
-print3r --scale=30% print cube.scad
-print3r --scale=50mm print cube.scad
-print3r --scale=0,0,30mm print 3DBenchy.stl
-```
-
-### Environment Variable `PRINT3R`
-You can set any option into PRINT3R environment variable, "<key>=<value>", combined with ":", like:
-```
-export PRINT3R "printer=prusa-i3:temperature=190:..."
-print3r print cube.scad
-```
-
-## Render Example
-Instead to actually print parts, you can also let them render into .png image as well (e.g. for documentation purposes or preview):
-```
-print3r --output=benchy.png render 3DBenchy.stl
-```
-
-
-## See Also
-- **[Print3r Wiki](https://github.com/Spiritdude/Print3r/wiki)**, detailed documentation
-- [Spiritdude's Public Notebook: Print3r](https://spiritdude.wordpress.com/tag/print3r/)
-
diff --git a/software/Print3r/examples/benchy-scaled.png b/software/Print3r/examples/benchy-scaled.png
deleted file mode 100644
index aea1589b..00000000
Binary files a/software/Print3r/examples/benchy-scaled.png and /dev/null differ
diff --git a/software/Print3r/examples/benchy.png b/software/Print3r/examples/benchy.png
deleted file mode 100644
index 86de95c6..00000000
Binary files a/software/Print3r/examples/benchy.png and /dev/null differ
diff --git a/software/Print3r/examples/cube-scaled1.png b/software/Print3r/examples/cube-scaled1.png
deleted file mode 100644
index 01e6a46d..00000000
Binary files a/software/Print3r/examples/cube-scaled1.png and /dev/null differ
diff --git a/software/Print3r/examples/cube-scaled2.png b/software/Print3r/examples/cube-scaled2.png
deleted file mode 100644
index 6749321a..00000000
Binary files a/software/Print3r/examples/cube-scaled2.png and /dev/null differ
diff --git a/software/Print3r/examples/cube.png b/software/Print3r/examples/cube.png
deleted file mode 100644
index 0848d4f5..00000000
Binary files a/software/Print3r/examples/cube.png and /dev/null differ
diff --git a/software/Print3r/misc/webcam_test b/software/Print3r/misc/webcam_test
deleted file mode 100644
index d11abb13..00000000
--- a/software/Print3r/misc/webcam_test
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-ffmpeg -i "$1" -ss 5 -r 1 -vsync 1 -qscale 1 -frames:v 1 -f image2 snap-$$.jpg
-convert snap-$$.jpg -rotate ${2:-0} images_$(date +%F_%H-%M-%S).jpg
-rm -f snap-$$.jpg
diff --git a/software/Print3r/models/Amf_Cube.amf b/software/Print3r/models/Amf_Cube.amf
deleted file mode 100644
index a6ec8187..00000000
--- a/software/Print3r/models/Amf_Cube.amf
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-
- Default
-
-
-
-
- 1
- 1
- -1
-
-
-
-
- 1
- -1
- -1
-
-
-
-
- -1
- -1
- -1
-
-
-
-
- -1
- 1
- -1
-
-
-
-
- 1
- 0.999999
- 1
-
-
-
-
- 0.999999
- -1
- 1
-
-
-
-
- -1
- -1
- 1
-
-
-
-
- -1
- 1
- 1
-
-
-
-
- tmp
-
- 0.8
- 0.8
- 0.8
-
-
- 0
- 1
- 2
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 0
- 2
- 3
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 4
- 7
- 6
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 4
- 6
- 5
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 0
- 4
- 5
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 0
- 5
- 1
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 1
- 5
- 6
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 1
- 6
- 2
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 2
- 6
- 7
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 2
- 7
- 3
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 4
- 0
- 3
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 4
- 3
- 7
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
-
-
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/bx9PT08/T08/Ly8fDw8fLz7vTx8u/y7fTy8/T09fX19fX19fT08/Ly8vDv7Ovr6unl5OPi4eDf393d3Nva2tnZ2dnZ2tra2tvW1tjY2Nvb2+Dd3+Ti5Ofl4+Hm5ebo7Ozq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vHv7u3t7u7s6ujp7O3q5+jr5uvs8e3u8PDx8vLz8/Ly8vLy8fDw7/Hx7+3r6eno5+bl5OLh4N/f397d3Nva2tXV1NbX2Nnb19ja29zd3t/Y1tbb2tzg4ODf4+Tk5unn5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vPx7uvn5eTi5eTj4+Pk5eXl5eTn5eno6uzs7e7v7+/v7+/v7u7t7Ovu6ufk4uDf397e3NvZ19bW1tXV1NPS0dDR0M/O0NHS09TU1dXV19bW1NXW1dbZ2dvf4N/g3uDh4OLk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/v7u3s6+ro5uXl4+Pi4uPj4eHj5ePl6Ono6err6+zs7Ozs7Ovr6uno6uDV0dLQz9DLy8rJx8bFxcPDw8LCwcHBwsHAv8DAwMDCw8TFxsjJycvNz8/T1dTW2dfU2Nfa3Nne3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6enn6Ojo6Ofq5+Pj5OTg2efl5OTk4+Lf5eXm5+jp6enp6eno6Ofm5d3Gr6aloJuWkZGRkZCQj4+Ojo6Pj4+QkI6PkZOXmJiYnZ+ipquvs7TEwcTBwsTAwsvKwc/W2tfU2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4+Li4eDf2dra1dDO09jU2NzZ3Nnc4ODh4uPk5eXl5OTk5OPj4uHYup6Znp2YlY+Pj4+QkJCQkZKSk5SVlpaampmYmJWSkJOSkpCOjI2Mj4OFg4OLiYygnZi5zNbSztTV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efm497c2NLNyMLCvrKln6KovcTHxtXX2uLb29ze39/g4N/f39/e3d3c0rOYlpyempeXl5iYmZmampydnZ6foKGhn6ChoqKkpKSlpaSkoqGhoYhycW9pbGtsb2tnmLzPzc3Oz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl4t/XzMCvoJaMiYaIjY2IhIKAf5DA0tfZ19fY2tvc3Nzb3Nvb29rZ2NG0mpifn5mXnJycnZ2enp6goaGio6OkpKKkpKWlqKmpp6enp6ipqamEa3BybnZ1dm9nXJG3y8jIycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PL0+Pbx8OTWya+ilI2Njo+OkJOUjoN2Z1lWWVRSlMPP19DS09PT09LS2NjY2NfV1NPGqpuZnZSZnZiZmpqampucnZ2en6ChoqKhoqOjpaWlpaakqKOnpailenBtcG9vcHB2b2OCtru4v8nIycvIyc3Nzc3NysnLz9TW3uLm5eTl6Onr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx8u7q5dvFqZORj46PkJGQj5aOfGFLREZLUFddVXG/x9DJyszO0NDR0tHR0dHQzs3MwaeamZ2Ul5yYmZqampqbnJ2dnp+foKGioaKjo6WlpaWmpKijp6aoondvbXBvb3Bvc2tihbC4ubi5t7u+vbq0rKOfmpKPjpKUusja3dvg5e3n6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7+3q5dCpko+OkJGRkpGOjY6QcU9AQENITlBVXFpeu77Gx8jJyszMzMzLzMzLysnHxr2hmZyelJaamJmampqam5ycnZ6fn6ChoaGio6OlpaWlpqSnpKenqJxxbm5vb29vbW1pYYWosLSttrSwpZSIiIeOjIqHhYaJioSYydjZ4N/j5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7q5t7Dk4WMkJCQj46KiYuLhmRGQ0lCQUpPVVddXp+wvby+v8HExcbGxsbGxsXDwsG7n5mcnZSVmpiZmpqampucnJydnp+goaGhoqOjpaWlpaakp6Wnp6eTbG5vb25vbmxlZ1+Fp6uur7GwrqaYkJCSl5aSkY+RkZKEjsXS1d7b4OLk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t7undwY2Fh4GFgoKCgX99fHpmT0dIRUVNS1NZW1xyqLK2uLq7vr/Cwr6+vr69vLq5vJyanJ2UlZmYmZqampqbnJycnZ6foKGhoaKjo6WlpaWmpKalp6emimltb21tbmxpYmhcfZyemaSjp6yhkYqTm5COiomKjY+RmZjJ09Xa1+Df4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt6+ns6MmKf4ODgX99fHt6dnR+dFpHSlNSTk5RV1hbXa2rrK6ztLa3ubq4uLi4t7W0s72bmJyelpWZmJmampqam5ycnZ6fn6ChoaGio6OlpaWlpqSmpaanpIBpbm5tbW1qaGNoXHSRmoyYsaebkIqOk5KKi42QkZKTlZKXydPS0tLc3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onf5ebUmISAf4F/fXt6e3t7dXhmT0tUWFhWUVVYXV2hqJ+ip6qsrbCzsrKysrGvrq2+mJecnpeUlpiZmpqampucnZ2en5+goaKhoqOjpaWlpaakpqWlpqJ4bG9ubG1raGdlZl9vj6ycoJKOi4uIi42NkZOSkY+NjI2Yn8rIyMnR2tnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero2+Hi1ZmBe4J9fn58enh3dHt9bVdNTFFcVVRZW1lXhaitr7Cvqqinqqqrq6qpqKalvJaWm56XlJWYmZqampqbnJ2dnp+goaKioaKjo6WlpaWmpKWlpaWhdG5vbWxua2ZnaWRgaoq1opqfm5ucmZSPhYOAfXl6foeOmaXGvsHF0dXW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5eDg2tOnfHqEgYB+fHp5eHZ0eXFjZ2ZydX+AgoWIi42Oi4yPk5ieoqe0t7u6t7Owr52cmZWSkpWXl5eYmJmam5ubnJ2cnp+goKGjpqempaWlo6alp6WokGpvb29ubGpnZWJeYW2gpqGgoqOkpqWmiHJ3en18fISLkZWuuL7AxcnM0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Tf3tvTrn58hoKAfnt6eXh1d3Z4h6SoqqahoJ2bmZeWlY+Pjo2Mi4yMiYuOjo6OkJKRkI6Mi4uMj42NjY6Oj4+PkY+QkJGQkZGTlpqdoKOmqKSnpqimpYhqbGxsa2lnZGJeY19nmaOhoaKjpqWmpYNyd3p9fH2EjJOXtrW6vMLGys/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj39rb1LWCf4WCgX58e3p3dnhydIurqKioqamnpqeoqKikpaWjoaCdnJiYlZOQj4+OkY+Ojo2MjIuOjo2NjYyMjI2Mi4qKiIeHh4iJioyOkZOmp6emp6J/bmdnZ2dlY2FfWmJabKCjoKCioqekqKN7cnh7fXx/hY+TmMGxtba+wcfMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4t7V2NK9h4CEg4B+fXx5eHd4c3SJpqKmrqenpaanqqytq6yurq+vrayrqailo6GdmpuYlpOUkY+Mjo2Mi4qJiIiHh4aEgoF+fX18e3p4d3d3nqOmp6mgeXBubm1raWZkYl9dWHemoKCio6Kpo6medHN5fX1+gIeQlJnGq7Cxu73EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Dd09bQwY1/gYKAfnt6enl3enV0iKqnpaWpqKampaaoqKipqamnpqampaSjo6ShnpqempeUkpGPjIqJiIaFg4KCgoJ/fnx6eXh3dnZ2dXRzcpylqKipnXl1enx+gIGDg4OAeXONpZ2ioaSiqaSplnBzen19foCIkZWawqasrri6wcbKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf3NDR0cKUgICCgHx7e3p4d3Z1dYerrKmnqKenpaWmqKmqq6qpqainpqmop6SjoJ6bmZeSkJCPjIyMi4qIhoWEg4GBgH59fHl4dnZ2dnZ0cnGUoqKkq6manZ+fnp2amJaVlpaXnqCdpaCko6ilqIxvdHt+f36CiZOYnLahqKu0uL7EyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3trQztDCnIKBgX58e3p5eHd4eniFpKSlqamop6Wlpaanp6ipq6usq6uop6eloqGenZiVk5CRkI+NiYiHhoSDgoF/f357enl4dnd2dXV0cnBtmKyipKeoqaqnpqWjoZ+dnJabnZ6doKOipaSmp6aDcXV8f39/gouTmJ+onKSnrra6wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3Z0MvPwaGEg39+fHt5eXh3enl1hKenpqqqqqimpqWmpaqqrK+urq6upqalpqSgnpyYlpSSkpCPjYeHhoSDgoGAgIB9fHt4eHd0c3NzdHRycYqnoaeopqmlpKSkpaWlpaWspp+bnZ+dpaWkpamkfXN2fn9/f4KLlJmin5qho6q0t7/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c0s7KybuyhHl+fXp4d3d2d3l2d4OpqKuopqipqampqamoqaurq6urqqempqSioZ6bmZaUkpCOjIqKiYeGhoWDgoGAf357enl4dnZ2dXVzcW+IqaemqKmoqaWmqKemp6eoqaWhoKCioqGhp6Slmm93fXyBgX+FkJmdrJCVnqKotba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29TMysm/uYl7gH15d3Z1eXl2dXiDpqerqaaoqampqampqKmqq6urqqqnpaWjoqGdm5iYlJKQjoyKiomHhoaFg4KBgH9+e3p5eHd2dnV1c3Fvhqenpaapp6ilp6enp6mpqqmmo6ChoqCfoqWlppRtd35+gICAhZCanLSNkZqeprCzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vXzczHv76NfX58enh4eX19e3t9iKWmq6qmqKmpqampqKipqqurrKqqpqelpKKhnZyYmJWRkY6MjIqJiIeGhYOCgYB/fnt6eXl3d3Z1dXRycH2ho6OjpaanqKiop6inqKmlo6Cgn6GhoaKkpqeLa3d/f4CAgIeRmZrAio6Xm6SrsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b2czMxL29k4KCgoGCgoSHiIeIipKop6qpp6ipqampqaipqaurqqurqaimpKOjoJ2bmpeVk5GPjo2LiYiHhoWDgoGBgH97enl5eHd2dnV0cnB6nqSlpaeoqaiop6inp6mqpKKgn56foJ6io6mog2p3gIB/f4GJk5mayImMlZqkqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tjNzcG6vKCUk5KQj4+RlJSVl5OaqqmpqKepqampqamoqamqrKuqqqinpqWjo6CdmpmXlJORj46Ni4qIh4aFhIKBgYB/e3p5eXl4dnZ1dHNxeJykpqWmp6aoqKmop6iqq6WkoqGhoZ6eoqSrp3tteIGCgH+Bi5SbncOGipOYoqextb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trWzsrBvLyxq6SinZmXl5iZmpyYnqqpqaenqampqamoqKmqqqurqqmpp6akpKKgnJuZl5aTko+OjouKiIeGhYSDgYGAf3x7enl5eHd2dXVzcnSZo6elp6mnq6qpp6alpaWioqKjoqOkpKClqqNzcHeBgoCBhIyVnaCvgYiQlp+lrrS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493Z08/Fwb28v7iwraqloZybmpyemaCpqqqop6mpqampqKeqqqqrqqqqqaempKSjn52amZeWk5KRjo6LioiHh4aEg4KBgH98e3p5enh3dnZ1c3J1maSpqKurp6WlpKKfnZ2enJ2eoKKkpaafpqicbHJ3gYKAgYWMl56jl36HjpWcpayzu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2dPNwMC9ucS+t7e1saymn5ydoJuiqauqqKipqampqKinqaqqq6upqainpqSkop+dmpmXlZOSkY+Oi4qIh4eGhIOCgYB/fHt6eXp5d3Z2dXRzcpWepJ+fnpmZmpqbmpmbm5ydn56en56fnqemlmdzdoGDgoKFjZifpol9h46WnKers7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTzMe/ubDLuri4t7e3tbGupaOipaerq6mpqaiop6ipqqepqamqqqmopqamo6Gem5qbmZeUk5CPjYyLiYiHhoSDg4F+fX18eXh4eHh3dnV0c3l9hY6NiIiLjI6RlZiYlpSfoqOioqOioJaShnhwcXp9hYN/jo2dn61ze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1M3HwLqxybu4uLe3t7WxrqupqKmqq6qpqamoqKeoqaqnqKmpqaqoqKanpaOgnpuam5mXlJOQj42Mi4mIh4aFg4OCfn19fHp4eHh4d3Z1dHN2cW5rZl9dX2VobnV8gYKDjY6Oi4eCfXhtbm1pa3N8gYOCgY6Pm5uxcnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTNyMC6ssW8ubi3t7i1sq+uraysq6uqqKqpqKinqKmpp6ioqqmpqKinpqWjoZ6bmZuZl5STkI+NjIuJiIeGhYSDgn5+fXx6eXh4eHd2dXRzc2xmY15WT01PUVZcY2hqa2hoZ2RjZGRjZ2hpanB3f4GDgoKNkpqavnF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzcjAurK/vLm4t7e3tbKwq6ysraqqqamqqaiop6ioqaioqKmqqKenpqako6CdnJuamJaUkpCPjYyLiYiIh4WEg4J/fn59enl5eHh3dnV0c2poZ21ubGhlaWhnZmZkYmFiYV9eX2JkZmhpZ2lweoKDhIKEjJScnctxeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083IwLqyuLy7ubi3t7a0sqqrrKyqqqqqqqqoqKeoqKmnqKqpqqmopqWlpaOgnpyampiWlJKQj42MiomIiIeGhYSDf35+fXt6eXl4eHd1dHRxb2xsa2poaWZlZGVmZmVlYWFiY2NiYGBjY2NlbXqDh4aEh4yYnqHEcHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POyMC6s7O9u7m4tri2tbKtra6tq6qqqqqqqKinqKipp6ipqamop6empaSioZ6bmZmXlpOSkI+NjIqJiIiHhoWEg4B/fn57enl5eHh3dnR0bmxramlpamtoZ2ZlZWRjYmVkZWdnZ2doaGlnaXF7hIWEg4iPmJ2fq3B5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vUz8rBvLWwvru5uLi4trWzrq6traurqqqrqqmop6ioqKmoqampp6enpaWkpKGdm5qZl5WTkpCPjYyKiYmIiIaFhYOAf39+e3p5eXl4d3Z1dHJwbm1sa2lpaGdnZmdnZmVpZmNkZGRnamdpaWtyfIKFhIOHkZieopVweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b1dHLwr22r8C8ubi3uLa1s62sq6uqq6uqq6qpqKeoqKipqKmpqaempqWlo6OgnZuamZeVk5KQj42MiomJiIiHhoWEgH9/fnx6eXl5eHd2dXR0b2ppamxra2loZ2dmZmRjZGJjZWVkZWdqbGtrcHiAg4WEh5KYoKeKcHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dTRzcPAta3Iuru5t7e3trSwrqyqqamqq6urqqqqqqioqKmpp6iop6alpKSioJ2bmZmYl5WSkJCPjIuIiIiHhIODgYB/f358e3p6enl4d3Z1cW9tbGxramlpaGhnZmVlZGVlZWVlZmdnZmdqcHd+hYeJgoqPnaCqcHJ7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3W0s3Dwbaux7q7ube3t7a0sa+sqqmpqqyrq6qqqqqoqKipqKeoqKampaSjo6Cdm5uZmJeVkpCQj4yLiYiIh4SDg4KAf39+fXt6enp5eHd2dXFvbWxsa2ppaWhoZ2ZlZWVlZWVlZWZnZ2Zoa3B3f4WHh4OKkZyesWtye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He2NPOxcG3sMS5urm3t7m3tbGvraqpqaqsq6uqqqqqqKioqaipp6empqSkpKKgnZybmZiXlZKQkI+MjImIiIeEg4OCgIB/fn18enp6eXh3dXVxb25sbGxramlpaGdmZmVlZWVlZWZmZ2doaGtxeH+Fh4eDjZSbnb9qc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnUzsXBuLG/u7u6t7e5t7Wxr62rqamqrKurqqqqqqioqaioqKempaWkpKOin56cmpmYl5WSkJCPjYyJiYiHhYODgoGAgH99fHt6enl4d3V1cW9ubWxsa2ppaWhoZ2ZmZWZmZWZmZ2doaGhscXl/hYeJhY6Vm6DLcXR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1M3Gwriyuby8urm3uLe2sa+tq6mpqqyrq6qqqqqoqKipqainp6akpKSjo6Cem5qZmJeVkpCQj42MiYmIiIWDhIOBgIB/fn17e3p5eHZ1dHFvbm1tbGtramlpaGdnZmZmZmZmZmdoaGlrbXN6goaJiYiPlZyhx3J2foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg2tTNyMK5srO+vbq4trq5t7Gvrauqqaqsq6uqqqqqqKioqamopqalpaOjpKKgnZuamJeXlZKQkZCNjImJiYiFhISDgoGAgH59e3t6eXh2dXRxb25tbW1sa2pqaWloZ2ZmZ2ZmZmdnaGlrbG50eoKGiIeHkZeeoLBvd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4dvVzsrEu7SvwMC8t7W5ubexr62rqqqqrKurqqqqqqioqaioqKilpaWjpaSin56bmZiXl5WSkJGQjYyJiYmIhYSFg4KBgYB+fXt7enl4dnV0cW9ubW1tbGtqamppaGdnZmdnZ2dnaGhpa2xvdHuChoiHiJKXn6OZcniAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHc1s/Mxby1rsHAvLe1uLm3sq+tq6qqq62rq6qqqqqoqKmoqKenpaSkpaSjoqCdm5mYl5eVkpCRkI2MiomJiIWEhYSCgYGAf317e3p5eHZ1dHBvbm1tbWxsa2pqaWhnZ2ZnZ2dnZ2hpaWtsb3V9goeIiImTlqCmjXh4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6/Ivb+6tbq8urOyr66rqqurq6uqqqqqqKinp6inp6alpaOjo6GfnJqZmZiXlpORj46LiomJiIiHhYSDgYCAf318e3p4eHd3dXRxcG9ubW1sbGtqaWlpaGZlZWVnZ2hpbG1qa291f4WHiYqOkJuhqXZxeYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrewxr2/urW6vLuzsq+uq6qrq6urqqqqqqiop6eop6elpaWjo6Khn5yamZmYl5aTkY+OjIuJiYiIh4WEg4GAgH99fHt6eHh3d3V0cXBvbm1tbW1ramppaWhmZWZmZ2doaWxta2tveH+FiImIj5Odna5wcnqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5scO+vru2uby7s7Kvrqyqq6urq6qqqqqoqKeoqKempaSkpKOjoqCdm5qZmJeWk5GPjoyLiomJiIeFhIOBgIB/fXx7enh4d3d1dHFwb25ubW1tbGtqamloZ2VmZmdoaGlsbWtscnmAhYiJiZCTnZ28bXR8hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurK+vr67ubm8vrOyr66sq6urq6uqqqqqqKinqKempqSko6OjoqGfnZuZmZiXlpORj46Mi4qJiYiHhYSDgYCAf318e3p4eHd3dXRxcXBvbm1tbWxrampqaWdmZmZnaGlqbW1rbHJ5gYeIiIyQkZ6gym94fYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry0ur/Au7m5u720s6+urKusrKysq6urq6mpqKeoqKempKSioqKhn52bmZmYl5aTkY+OjYyKiYmIhoWDgoB/f358e3t6eHh3d3V0cnFwb25ubm5sbGtqamlnZmdnaGhpam1ubG9zeoKIiomMkZKeocZwen+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9trjCwb26uLq9tLOwrqyrrKysrKurq6upqaioqKimpaOjo6OioaCdm5qZmJeWk5GPjo2Mi4qJiIaFg4KAf39+fHt7enh4d3d1dHJycXBvbm5ubWxra2pqaGZnZ2hpamtubmxvdXyDiIqIi5KWn56xcHuBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7e1w8G9vLe6vbSzsK+sq6ysrKyrq6urqamoqKinpqWlo6KioqGfnZuamZiXlpORj46OjIuKiYiGhYOCgH9/fnx7e3p4eHd3dXRycnFwb25ubm1sa2tramhnZ2doaWprbm5sb3Z9hIqKiIySmJ+gnXR8g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4tMPBvby2ub20s7CvrKusrKysq6urq6mpqKiop6alpKKioqKhn52bmpmYl5aTkY+Ojo2LiomIhoWDgoB/f358e3t6eHh3d3V0c3JxcG9vbm5tbGxra2poZ2dnaWlqa25vbHB2fYaKioqOkpaepJZ6foWOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7TJw8G9ura9uLazsK2tra2srKysqampqaiop6elpaSkpKSioZ+dmpmamJeVlJORj42MiomIh4aEgoGAgH9+fHt5eHd2dnZ1dHFwcG9vbm5tbW1sa2tqaWlpaWpqbW5vcG9xd36Gi4uMlJObnah/dn6JkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw724x8DAvLu3u7i3s7Ctra2trKysrKmpqamoqKenpaWkpKSkoqGfnZqZmpiXlpWTkY+Mi4qJiIeFhIKBgIB/fnx7eXh3d3d2dXRxcHBvb25ubm1tbGxramlpampqam1ub3Bvcnh/h4uLio6WmZ6wen2Ai5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/u8K+wr27t7q5uLSwra2sraysrKyqqampqKinp6WlpKSkpKGgn52amZmYl5aVk5GPjIuKiYiHhYOCgYB/f358e3l4d3d3dnV0cXFwcG9vbm5ubW1sa2pqampqamtub3Bwb3J5goiMjImQmJqfvHJ8iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbu9vsW+vbm6u7i1sbCtrKysrKysqqqpqaiop6elpaSko6OhoJ6cmpiZmJeWlZORj4uKiomJh4SCgoGAf39+fHp6eXd3d3Z1dHFxcXBvb25ubm5tbWxrampra2trbm9wcW9zeYOKjI2KlJicnLh/fIqQmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO6ur/Gv726vby5t7Kwrqyrra2srKqqqqqpqaenpaWjo6KioJ+enJmYmJiXlpWTkI6JiYiIh4WDgYKBgH9/fnx6enl4d3d3dXRycnFxcG9vb29vbm1sbGtra2trbG9wcXFydHqCiY6OjJaUmqKyd42Ik5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFu7q8wb2+ur29u7ezsa2sq62trayqqqqqqamop6Wko6OioqCfnpyZmJiXlpaUko+NiYmIh4aFg4GBgX9/fn18enp5eHd3d3Z1cnJxcXBwb29vb29ubWxsa2xsbGxvcHFyc3V7hImOj4yPmqC0foSEkZefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx7+8t7m4wLm+vry5tbGtrKmtra2tqqqqqqmpqKelpKOjoaGfn56cmZiXlpaVlJKOjIqIh4aGhIOBgYB/f359e3p6eXh3d3d2dXJycnFxcHBvcHBvbm1tbGxsbGxtcHFycnR4fIWMjo2Kl468fXqDi5Kaoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnFvrKwtsC3vL68ubWxraypra2traqqqqqpqainpaSjo6Ghn5+dnJmYlpaVlZSRjoyKiIeGhYSDgYGAf39+fXt6enl4eHh3dnVzcnJxcXBwb3Bwb25ubWxsbG1tbXBxcnN1eX6HjY6MiKKgc3mBio2ZnKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxL64sqikr8Cytbazsq2krKuura6xr7awqKeop6elo6Genp6dm5mYlZeXlpSUko+MjYqIhoaFg4CEg4GAf358enx6eHh4eHd2cXFwcnJyc3Nrbm9tbG5tamx0b3NxdHF4bnV7goyNoJ9tc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzsrCu7evpJ+gl7C/tK+wqKikqKupq6qpqKalp6empKOioqKgn52YlpSSkZGOjoyJh4mHhIOEgX99fHt6eXl4dnV4d3V1dXV1dHBxcXNycnFwdHV0cnBxcG5wb21yaW5wbXR7fp+6i2ZlcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHMxL26ta2inJaPiZKtvrOsqKinn6OlnJ+lpKSjoaCgn5+fn56cmpmYkpGPjo2MiIeHhYSDgoKAfn5+fX19fHt5dnV0c3Nzc3JxcXFxc3JxcHFxcW9xcnJxbmlmcG9tbnyftYlUXGRpbnZ8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djUz8rDvbawqaWgmJGHfHJ4kbS5u62lpqCppqekoqCenp6cnJqamZeWlpaVkpGQjYuJi4qHhoeFg4KCgYCAgIB+fXt6eXh3d3Z2cnJyc3NycnFra2tra2tsa2pndYCQtJ1cS1BXY2hnc3x7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1s7Mx8C5squmpZuTi4mEe3pvZGZ3nLW6q6mop6Sgn56fmpqYl5aSkZCTkpGPjYuIhIeHhYWFgoGAgYB/f39+fHt8e3p5eHd3d3V1dHNzc3JybW5wdHZ2d3mboX5HQEtLVFJTXWhncXtzgIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnSzcfCvrqzraKfnZaRkIR9e3ZvYmNtqq2npqWhnpycnZmZmJaWlZSTkI6NjIuHhIJ/gIB+fn17eXx7enp6eXd2dnZ1dHNycnN0dXV2dnd4eH6CiI2Oj5OXkUg7SklMWVtYYmNqb3R3goWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b3NXMx8O+uLStpaCZlI6Ghnp7eG9nZb6xqaemoZuZmJmcnJybm5ubmpiXl5WVk5CPiYmKiYiGhYOEg4ODg4OBgIOEhISDg4SGj4+QkY+OjYyMkJabmpygp3JHSE1NUFdaXGlqcXmAfIKLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dfU0M7IwLq4tKmlnpmTioeCe3NycGrOrbCvrKefm5qao6OhoKCenp2lpaWmpKSioZ6fnp6dmpmYnZycnZ6enZyjpKWlpaaoqpmZl5WRioWCfYSMk5Wbo6xXQUlMU1VaYWdrc3x3hYmNkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQiYN+enNxsbCsqaeopJmWlJWVlJORkZGRk5SVlZeYl5ebnJycnJybm52dnJubmpqaj42NjIqKiYmDhYWDgX5+fnmGk5mWnJy9RUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlY+Ig394c5+tq6mmp6OYlJKUlJOSkZCRkpCQkJGRkpGRkJCQkJCPj46MjIuKiYmJiYmIiYeHhoaHhIaFg4F/fn99iZSZlJunykhMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuYjoqFgHiHr62rpaeimJSPkpOTkpCQkZKLi4uLjIyMjImJiYmIiIeGhIOCgYCAf3+FhISDg4SGhYWGhoSCf39/f4mVm5WYprhNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKainpSRiod/erysq6WmpJiTkJGSk5ORkJKTjIyLioqKioqNjY2NjIuKiYqKiIeGhYWFhISDg4SEhoaGiIeEgoCAgICLlZqYnKKPUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqKKal4+MhnvIq62npaWclpKRkpOTkpKSk5GRkI2MjI2NkJCPj46OjYyOjYyLiomIiIWGhIWFhYaGh4mIhYOAgIGFj5iYmKCrdFNXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6noJ6UkYyEx6ytp6ennpaSkZKSkpKSkpGSkZCQjo6OjYqKioqJiIiHiYiHhoWFhISGhoSEhYWGhomKiIaDgYGBhZSdmpifsWJXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezraakmpeQjLessKimqJ6Xk5GQkJGRkpCPkI+PjIyKiYmIiIiIiIeHhoeGhYSEg4ODhoeHhoeHiYiKi4mGg4GBgoWUn5uYnrVYW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t7KrqZ6bko+nrLGopqidlZGRj46QkZGPjY2MjImJh4WEjY6Ojo6NjY2NjYyLioqKiomJiYmJiouMiouJhoSBgoKLlJuZmaK+W15iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u3sqqloJeUmbCsrKSonpOQkJCQkI+PkJCNjYyLiYmJiYmKi4uKiomKiYiIh4eGhoWGhoeHiIqKi42Mi4iGhIOCjpiZm6OlxVxgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/uLStp6KZk5W0qqiipJySjY6OjIyMi4yMjIyKiYmHh4eKi4yMjIuLjIiIiIeHhoaGh4aHh4mKiouNjYuIhoSDgo6XmZqhorRaY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7q4saqlnJSQuaikoKKakIuLi4uLiYmJiYiHh4aFhYWFh4iJiYmJiYqHh4aGhoaFhYeHiIeJioqLjo6MiYeFg4KPmJyZoaKdXGdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS9u7SspqCWj7umopyemJGJiIiIh4aGhoaDg4KCgYGBgYOEhYaGhoeIh4eHh4iIiIiHh4eHiYqMi4+OjYmHhYSDkpecmqOoiWNqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGv7y1rKahmZC4o5+ampWOhoSEg4OBgYGAgYGAgH5+fn5/gIGCgoOEhYWGhoaHh4eHh4aHiImKjI2Pjo2KiIaEg5KXm5ylrXZmbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx7+6tKykoJmQrJ6clZaRiYGBgYCAf35+fn19fXx7fHx8e3x9fn+AgoOCg4OEhIWGhoWGhYeIiouMjo2MiYiGhYSTmZqbpLFoZW52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa+t7GqopyWj52Ymo+RioJ9fHt7enl5eHd4d3d1dXV0dXR1dnd4eXt9fX1+f3+AgYGDhIOFh4mMjI2MjImIhoWElJuXnKS4ZGhxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDvLWwqqCZk42TlJeLjYZ8enJycnFwb29vcHBwb21ubm9vcHJyc3V3eXl6e3x9fn5/gYKChIaIi4yMjIuJh4aFhZSclp2nv2dsdHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jp4dvUzsvFurmyqqagmZORi5SRiYqFdm1wbm1sbnBvbWdoam1ucHBxam9ycW9vdHdwd35+fX9+e319gIGGiYqMjo6MiIaGiImYmp2fn8NlbXV+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn4N7c08rFxMC2raWfmZCGgXmEhH5/fHJuZmVjY2ZmZWNpZ2ZjY2FiYGBcXWVrbm5wbmxtc3Vyc3d7fH6ChYiMjI2Ni4eFhYeJmJmboKbEam13gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497Y0szGxMC6q6KZk42FfXlxf4OAfnl1dWVkY2NlZGNhYmBgXVtaWFhfXFxiYV5eY2hoa2xucXN1eXl7f4OGiYuMjIqIhISGiJmZm6CmumxweoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7W08zHwbu2sKSfmZSOhn9+kKG0wtDc4en6+fj7+/r6+Pj06t3Mva+oeG5kYF5fYWNnamtnaW52enN1eHt+gYWIjIqJh4SEhoqam5ygoadrc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY1s3AuLOvp6GemZabqL7Z7e/1+vv9/Pr69PTz9fX19PP29/n7+vr49/713ruWdWBTXVxgaGtnZmtvcXR4e3+DhomKiYaFhYiKmZyboKSZbHV9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cXDvLOspJ6fsMDZ8Pv9+/v4+Pf4+vz8//z8/Pv8+/r6/f36+Pf19PT5+PXy8u7dzIFyY11dXmJoam1xdXd7gISGhoaFg4SHipmbmaKrk3J3foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe/vrWsqbHG2/n5+Pj5+fv//fn29vf3+fv6+vr5+fn4+PX09fb2+Pn89/n5+fz////216JyWFdjbGRoa3Bydnx+goKCgoGChoqZm5ikrIpzeH+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/uK+pt9bu+f//+/v9/fj19f75+Pj49vf5+Pj49/b4+Pn6+/r6+fb19Pj39vb18/Lz+Pr88MWKWURdYWVpbHB2eX9/gH9/gISJmpyao6d/cHmBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTe2tPNysS4sbLE3vD5+vj4//38+/v6+vn8+vn4+fr5+Pr5+fj6+fj4+vr5+fn5+fn39/j5+Pj39/n29ff467+MU15eZWprcXd5fX19foCEipmdmKGtcnN6g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd1s/Nxrq1ub/h6/b9/Pr49fz7+vr5+fj3+vj39vj39/b4+Pf39/f29vb29vb29vb29/f29/b39fbz9Pf6+fXo1btiU2JfZWt1dnp7e3yAgomYnJihrnJ0eoOMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1M7Lv7Wzt83q9vn7/Pz7+/z6+Pf49/j39vj29vT29vX19fX09PX19PT19fX19fX19fT09Pb19fX09vLz+Pr59vPo24FbZVxrc3B0dnd6fYCHlpqYoa9xdHqEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083GvriyvN34+/r8/Pz7+/v7+fj4+Pf39vX39fX29fb09vT09PX09PT09PT09PT19fX09fX19fX09Pjz8fb6+/j09/Pwm1pfW21tcnJ0d3uAhpSXmKKwcHR7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGt7W2y+36+fj+/Pv7+fj29fn4+Pf49/f2+Pf19fb29vX29fX19fX19fX19fX29vb29vb39/b29fX09vTy8PL3++v68POwXl9dam1vcXV3fYOSlZigsm90fIWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3EvrS11fn/+vb3+vj19fX19vb5+Pf2+Pj39vj39fX29vb18/X19fb19fX09fX19vb29vX29vf39vb28/j27+vs7/Tu8vzv9sxqWGRpa21wdHl/j5KWnrFtdXyFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurPB4Pj7/Pv7/P369/X29/n59vX19PX29fX29fTz9PX08/Pz8vL09PT08vPz8/T09PX09Pb19vX29PH49/Pz8/H08/Xw9vP30WdcYmVnbHB2fo+PlZyxa3V9hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKs7PX59/b9/ff7+ff29vf6+vTz8vLz9PT09PPy8fHy8vHw8PLy8vPz8/Dx8fHy8vPz8fLz8/T08/Pu9vj39fDx9/r08fT999jJWFxgY2hudHyOjpacsGp1foSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+Hc2sy+uLG26f78+/r6+/z7+vj39/j49/f5+fj39vX19PTz8/Lx8fDw8vLy8vLy8vLx8vLz9PT19fLz8vPy8vHx8/T19fX18/L09PP08e/s6LxiV1tjW3CAiYuVlblocHqGkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u3s6eXi4N/e2NbV09LR0M/OzczLycnJycbIy8vLztDS1dbY2tvb29zn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc2M3Htq644vP8+vn4+vr6+ff39fX19vX09fXz8/Lx8vHz8/Py8fHx8PHx8fHx8fHx8PDx8fLy8/Py8vHx8fDx8fLz9PX08/Py8/Ty8/Du6ObMkFRaX2pkf4WIkZO3Z295ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7r6OTj49/Z1NfV0s/OycfFxcTCwMDAwMC9wMHDw8bKy8jLz9XY29rb4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1s7BurWx3vn7+fn49vj3+Pb49/Xz9PTz8vHw8fDw7+/v8/Pz8/Ly8vLx8fHx8fHx8e/v7/Dw8PDw8PHx8fDx8fHx8vP08/Pz8/T08vLv7Obk3sRtWWJrYXWAhI2StGdueoWPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn5+Tg3NbT0M/HxcG/vbu5uLe2tbSzs7S0uLe4tre2trbHxcLEydDW2dnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDFurOy1vn6+/r5+Pf39/b1+Pf18/Tz8vLy8fHx7/Hx8fLy8vLy8vLy8fHx8fHx8fHv7+/v7+/v7/Hx8fLx8fHx8PHy8/Pz9PT08vPx7urk4OPXpWFfVWZpfIGKkLBmb3mFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi397b19LNx8PBure1srCwsLCnp6enpqalpaqrra6vsbKzr7a7vby9xcvQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLwLisxPP++/z6+vj4+fn39/n49PP09PPy8fHy8fHx8/Py8vLy8vLy8vLy8vLy8vLy8fHx8fHx8fHx8vLx8vLz8/Ly8vP09fPz8/Hx8O3o4t7d2NOJUkVjZHp+h46sZm53g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnSysPCw7+7uLCwsrfAzNfe9fX4+Pj39fXw6+Xbz8W8uKmoqauvtbvAxMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbqywOj3//r9+/r59/n3+Pf49vXy8vP09PHx8PDx8fLy8vLy8vLz8/Pz8/Pz8/Pz8/Ly8vHx8fHx8fHx8vPz8/Tx8fLz8/P09PPy8e/s5+Hd1NbfulhLWGl2fIGMpmNrdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSxcHAvrm0tLjP2Obz+/78/PX3+Pn6+Pf2/Pv6+fn39fTZzb6zr66sqrq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72yteP3/Pr49/v5+Pf29vb19vPz8PHz8/Tw8O/x8fHx8fLy8vLx8fHx8/Pz8/Pz8/Px8fHx8fHx8fLy8vLy8vPz8fHx8vHy8vLx8fLw7Ofg3dHY2NaMWExrb3V6hp9fanN9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxr64s7W7yNzt+Pn7/Pv+///5+fv7+vr6+f////79+/n2+Pn15s+6rKaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3rc/u/vv59fP5+Pf09PX08/Pw8O/w8vPz8PDy8fHx8vLw8PDv7+/v7/Ly8vLy8vLy8PDx8fHx8fHw8PDy8vLy8/Dw8fDw8e/v8fDx8Ovn4NzU1dTayF1JaWtwdoGbXWhxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb22s7nP6PX5+Pn6+vf08/Ly+vn5+fn5+Pry8fL09fX18/f5+vz569bGoaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHr5eHayL25r8Pt9vj//f339/b29/f38/H08/Lx8PLy8vLy8vLx8fHx7u7u7+/v7+/w8PHx8vHx8fLy8fHx8fHx8vLy8vLy8vLy8vLy8vLy8vT08ezn4+Dc1tzX0NSkSFVqbHB9k19oc3V9iZGYnqivub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PPu7evq6uno5+jn5+bl5eXl5OTm5+jr7e3o6Onl4OHg2tXWzcbDv7evv9jx+fr8//76+vr5+fz8+/v6+fn6+fr6+Pr5+fj49/n29/j49/f3+OvKqJ+pt7/Aw83X2tre5uzu8PP2+Pr7/P/+/Pv69/Pv6OPf0sW5sq/b8/b3/fr69vf19fb19fPv8/Px8fDy8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vLy8vHx8fHx8fHx8fLy8vLy8vLy8vLy8vLy8vL08vHs5+Pg39fd3dLbvmJPWGBibYFSXGVvd4OOlp2kqLO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro6Obk4uDg397e3d3d3dzc3d3d3N3d4d7f4N3c2NPPycS/uq+y0O/2+ff3/P79+fn4+Pn5+vr4+Pf49/f3+fj3+Pf39vf39fb39/b29vfq49S+qJ6svcHEy9HZ3+Lh6+3x9Pb5+/z+/Pv6+PXw7OTg2crAuK+88Pj0+Pv29/P29fT19PTx7/Lx8fHw8fLz8vLy8vLy8vLz8/Pz8/Pz8/Pz8/Pz8/Py8PDx8fHy8vLy8vLy8vLy8vLy8vLy8vLy8/Lw7Ofk4uDe3uHX4eGLSFdiZm19Uldeb3WAipOdpaqss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6eno5eLh3t3b3Nvb2tra2trY19fW1dTU0tjV1tfUz8zJxryzsrHC5fL5+Pf1+Pv8+fn39vb5+Pj59/b29fb29vb29vX19vX19fX09vb19fX07vj56MKkn6m1usDJ0tzd3Obp7fH09/n7/vz6+ffz7eni3NXFvbe31vf49fr59vbv9/b09fT08e/x8fHw8fHx8/Hx8vLy8vLy8vLy8vLy8vLx8fHx8fHw8PHx8fHy8vLy8vLy8vLy8vLy8vLy8vLy8vLx7uzp5uTi5OHj4OX4u0pTXGFqeE9SWmRqcnyGjpifpa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHk4NvW0tHPzsnIyMfHx8fHz9DR0dLT09LOz8/MxsPCwL+ysbPK7vv/9/r7/Pz5+Pb5+Pj39/j5+Pf29fX29fb29fX19vb29fX19vX19vX08/X4/Pvt0bShpa23wMfP19zh5Oru8fT3+f78+vj28evm39fPw7m0xO/4+fn5+Pj47/n39vT19fLy8PDw8fHx8fLx8fHx8fHx8fDw8PDx8fHx7u7u7u7u7u7v7+/v7+/w8PLy8vLy8vLy8vLy8vLy8vLy8e7s6uno5erl5urp/eFkUVdbZHBLTllfaHR+hIyVm52krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dLPzMjGxMHExMPDwsLCwsLCwsLDxcXFwsbFwL29ubSrrLng9/j8+P////36+Pb3+vr4+Pj5+fj19/b29fb4+Pf39/f39/X19vb19vX29fT68/L6//PZw6OkqbC8xs/V2+Dm6+7x9Pf9/Pr39O/o49zTybyytNX8+fz7+Pf4+PT49vX09fTz8vLx8fHx8fHx8fHx8fDw8PDu7u7t7e3t7Orq6urq6+vs7u7u7u7u7+/y8vLy8vLy8vLy8vLy8vLy8vHu7ezr6uru7Ofw7fbzlEhOUVhiQ0dQXGRtc3h/h46VmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0cjHxMPAvLm2uLe2trW1tLWysrO1trm6urq8uLS1tKykorfl/vz8+vn9+vj4+/r59/r5+Pf4+Pj29vX09fb19vb29vb29fb29fX19vb29vX18vT2+fn18u/AsqOntcPIx9Ta4ebq7fL1/Pv49vLs5eDX0cK3rLro//n69/X3+Pb39vTy8fLz8fHy8vLx8fHx8fHx8fDw7+/u6ejn5uXk4+Lh4eHh4uLj5Onq6uvs7e7u8vLy8vLy8vLy8vLy8vLy8vLx7u3t7Ozs8fTu8fPt8846RUxRXEhISlpgaG5zeX6BkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jCwLy6uLm5uayrqqmop6ensrKwrq2rqamuramoqKOeoMLr/Pn5+/v4+vn4+fr7+fX5+Pb19fb19PL08/Py9PX19fX09fP08/Pz9PX29vb29e/1+Pfy8fX8682wpa+6vr7N09vi5urv8/v69/Xx6+Pe09C/tKnB9v339fLy9/j0+PPx7+/v8fDw8vLz8/Lx8fHx8fHw7+7u7uTj4uDe3Nra2tra2tvc3d7m5ujp6+zt7vLy8vLy8vLy8vLy8vLy8vLw7+7u7e3t7fP58/H35+74hqC4zu3w+fr19/b06trJvJCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9ubi3ucHN1977+vn49vb19e7n3M6/sKegoJ+en5yVmqn49/j2+fz5+fX29vPz9fTz9fX08/P08vHy8vHx8vLz8/Pz8/Py8vLy8/P09fX29vb69e/v8PP08v/kvqmlrLS5x87X3+Tp7vP8+vfy7ung2dHLt6mq8/3y+vf29fb39vP29PHx8fHw7/Lx8fHx8vLy7vDw8e/q5uPh3tfSzMnHxsbExMTIyc7T1tjc4eTn6uvt7u/v8fDx8vLy8vLy8vLy8fHw8PHx8vLz8/Tz8/X29/T29/j49vj3+fr6+Pn5+fj4586xnpmdo7K6vMPT1tHQ2d/g3+Lh3dnY08m/urm4uMrX6PT5+vz8/Pv6+/r5+vn4+Pj29/br37qlkIqHjbry+vn6/Pz6+fj5+fj4+fn5+Pn39fb19vX19fT09PPz8vLz8/Pz8/T19vb09fX08vLy9fX19vb18+/o6uHCpZymv7/I09jj6Ozv+vn18Ozn3tfOx7enuPT98vj29PT29fTz9PTy8PHw8O/x8fHx8fHy8u7v7+7r5eHe2NTNxsC8ubi5trW3u73Dyc/S2Nzi5enr7e7v7/Hx8fLy8vLy8vLy8vHx8fDx8fLy8fLy8/Pz9vfz9Pf39vb39/j5+Pf4+Pj48PLx6djBp5icq7i/xMTJ19jZ19bX1tDOy8G8uLW4zeby9Pf5+Pj6+fr5+Pn49/j39vf39vf59vDv272UhLDr//j5+Pn5+ff2+Pf19vb39vX18/Lx8vPy8fLy8vHx8fDw8fHx8fHy8/Tx8fHy8fHx8fXz8/Lw7Ojk1tTSvaWkqK62xM7V4eDi8fn49O7q5NvTyL+0ps30/fP39vTz9PTy8fPy8vHx8vLv8fHx8fHx8fHu7Ovp5uDZ087JwLiyq6impqWlqaywt73HytHX3uLm6uzt7+/x8fHy8vLy8vLy8vLx8fHx8fHy8vHw8vHz8/X28/T19/b29vX29/f39vb39/b5/f356tbHnKOtsrG0w9TKys3PzMrHwre2s7TH5fb3+vj29vj5+fb3+Pf39vb29vb3+fj49/n6+ff14NDr//L49vj3+Pf18/b18/Pz8/Ly8PHw8PDx7/Dx8fHx8PDw8PHx8fDx8fDx8PHy8/T09PT18u/r6OHb1sO8vbWqqKeotsPHz9zi5e759/Pt6OLZ0Ma5sarj8/v09/X09PX08vHy8vHw8vLy7/Hx8fLx8fHw7ezo5uDY0MvDu7GnoJmWk5OSk5ecoauyu8LL0tng5Ons7e/v8fHx8vLy8vLy8vLy8fHx8fHx8vLv8PHy8fL09fP09vf29fb29/f29fX29vb7+ff5+vn18Mu3op2msru7wsPGxL69u7avq7fb9/78/vv5+fv7+vf09/f49/f19fX49/r7+Pb19/36+/v6+fv69/f39/f29PP39fPy8vLy8fLx7/Dx8vHy8vHx8fHx8PDx8fLy8PDx8fHx8vT19fT18O3n4NjPxcCyqKKipJyZqbK6xNPV3ubq+ffy7Obf1s3Fs6y18fT59fn39fT09fTy8vHx8PHx8e/x8fLy8fHw8Ozp5OHa0ce/tKufk4qEgH17e3+EipGcpLO6xM3V3OPo6+3v8PLx8fLy8vLy8vLy8vLx8fHx8vLz8PDy8vHy8/Tz9fb29/b29vb29vX19vf49/bz8/X19/f72rWdnKerprm5uLOxtLOtrcLi+//6+f3///77+fn39/j39/j39/b4+Pb3+vv49/b3/fv7//v09/n49/f39/b09vX08/Hy8vHz8vHx8fPz8/Pz8vLy8vLy8/Pz8vLy8PDw7+/v7+3r6ePe1MzAtaqjnpCHhouDgpi3vr/N0dri6fj28erk3dPKw6+oyPf29fX6+PX19fT08fLx8fHy8fHv8fHy8vHx8O/q5+Hc08m7tKScjYB3cm1oaWluc3qFj5qqsb3H0dvi5+vs7/Dy8fHy8vLy8vLy8vLy8vHx8fLy8/Lx8vHy8vPz8/T29vf29/f29vX09fb3+PLw7+/v8vX5//rkv6CSmKWsraqprKyoqMrs//r1/v70+vr7+vn5+vr49/j49/f3+Pr39vn7+ff29/z8+fn6+fX4+Pf4+Pf29Pb28/Lz8/Pz8vDx8fLy8/Lz8/Pz8/Pz8/Pz8/Ly8u/v7+7r6Obi3trPyr6zppqPiIR3b2trb3B3i73CyM7f5O339e/o4trQx7+qotv6+fP2+vf29vT19PHy8vHy8vLx7/Hx8vLx8O/u6ePd1cy+sKaWi31wZmFbV1daXmRsd4aRoKm2ws7X4efq7O/w8vLy8vLy8vLy8vLy8vLx8fLy8/Pz8/Py8vHz8/H09Pb29fb39vX09PT19ffz8/T09PLz8vL8++fFoZGaoqGgoKKdprz69vf8/vv4+fj3+vr6+vn59vb39vb39/b39/b4+fb19fXz9fXz9fj29fX29/f39PT08/Hx8PLy8/Px8PDx8fHx8fHx8fHx8vLx8fHy7+/u7u3r5OHb1M7IuLGmmIx+dG1kYF1YV11fZGKxxsrO3ODt9vTu5+DYzsW8pqDo+/vz9/n49fT19PLx9PLz8vLy8e/x8fLy8fDv7uXh2tHGuKidioBvYllTTEpLTFBZYWx7h5ulssDL1uHn6uzv8PLy8vLy8vLy8vLy8vLy8vHy8vPz9fT18/Hy8vPw8vT09PT29PXz8/Lz9fb4+/n29fb29vXz8fD59MqXfpKUj5GUlrbs+/j4+fr6+Pf29PPz9fb29vX19PX19fX18PP19vb09PP08/T19vf29/Pz8/X29fTy8vHv7u/x8/Pz8vHx8vLy8e7u7+/v7+/v8PDu7+7s7Ovo5N7X0Mi+uKOcj4J1aF5ZSE5NSlBNTWOcv7nEzNfd6/fy7efe2M7Ctqex9/H79/X49/f39/Xz8fX08/Lx8fLy7/Dy8vLx7erh2M/EtaWVh3hrWUtGRkVESkdGS1NhdYKKo6q3xdzk4+7w8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLy8/Lz9PX08/T09PX09fX4+Pj39/f39ff49/Xz9PT19fHy9vjsun2Ih46CiLnx//z6+vv7+/r69/b19ff3+Pf49/b19vX19fX19vX29vX19/j4+fj39vX39fX19fT08vPx8PHx8fLy7e3u7u3t7Ozp6ejo6Ojp6u3s7e3r6OTg3NnSy8O3p5qPhHNmW1FKSEFBQUU+Ol+ZqLK9yNLa4en28evl3dbMwLWmt/jx+vf2+Pf29vb08vD19PPy8fHy8u/w8vLy8e3o3dXLwbCejX9nX1JJQjw6Ozg4OTxFVGl6jJ6quMHa4uPu8PLz8/Ly8vLy8vLy8vLy8vLy8vLy8vLx8vLx8/Pz9PPy8/P08/P09vb29fb29PT29vb18/L09Pjz8vb8+dmtc4B6eqHu//b5+fn5+vn49/f29fT19fb29fb19PT09PTz8/Tz8/T09Pb29/f29fTz9vTz9PP08vPy8fHw8PLx8e3t7evq6ejn4uHh4OHh4uPl5efn5OLd2tTRyb6zpZWIeXBgUEhEQ0E8Oz47Q26Xnqq1v8nT2uHp9e/q49rTyLyypML58/j29vb19PX08/Hw9PPy8vHx8vLv8vLy8vDr5drQxrimk4FxWE9IQjs2NDk1Njg7P0tdbI2crrnA1uHj7/Dy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vHx8vLy8vHx8vHy8fLz8/Lz8/Pz8fL08/Py8/T39PP2+//24YVwa47d+/3/+fj4+Pn29fP39vPz8/Lz8vX08/Pz8/P08PDx8vLz8/Tz8/T09PPy8fXz8vHz8/Lx8vLw7/Hx8PDq6ejk4+De3NjY19bX2NnZ3d3e393a1NHLxLqtoJB/c15RRkJBPjo5PT40SXuPkaauuMLL1dvi6fTv6eHY0Ma6sKLP+vX49Pb19fTz9PTy8PPz8vLx8fLy7/Lz8vHu5+LVzL+wnYl1Zk5IQjw5ODs+OTk7OzxBSVCEoba+xNPi5e7v8fLx8PDw8vLy8vLy8vLy8vLy8vLy8vDx8fDx7/Dw8PDx8PHw8fHx8fLy8fLy8vDx8fHw8fL09/Py9Pj+/vfMdHPL+vz3//j5+Pj49/Px9vbz8vLz8vHz8vPz8vPz8+/w8PHw8fLy8vLz8/Py8fHz8fHy8vLy8vPy8fDw7+7t5ePg3NjUz87KycjIyMnLzM/Q09PRzsjFvLSnmYp7a2BJRD88Ozk7QDk5WXyDjJyisbvFztfd4+v07ujh18/EuK2g3Pv29/P19PTz9fXz8e/z8vLy8fLy8vHy8/Lx7ebe0sa6qZWAbV5HQzw4OT9APzw8PD09PDw9aqG6w8zT5urv8fLz8vHw8PLy8vLy8vLy8vLy8vLy8vLw8PDw8PHw8PHx8fLx8fHx8fHy8PHy8fHx8vHx8fL08/b08vLz9Pb19bCy7fz8+vP6+vn5+Pb08fj28/Px8vLy8vHz8vLz8/Pw8PHx8vLy8vPz8/Pz8/Ly8/Hx8fPz9PP08/Hw7ezo59/d1tHMx8O+tra1tLW2uLm+v8LCwry3s6iekIFzY1ZOQEA/PT4+Ozg/Z3x/ipOdrrS+yNHa4Obt8+3n39bNwrasnef6+PXz9vX09PX08/Lw8vLy8vLy8vLx8vLx7+zj3MzBs6ONeWZXRD45NjtCQj9IR0VDQ0I/Ok6PvMrU2Ovu8fL09PPx8fDy8vLy8vLy8vLy8vLy8vLy8PDw8PDy8vLy8vLy8vLy8vLy8fHy8fLy8PHx8vLx8/T38/Hx7+/z8/ns8PH++fX1+vr4+vj29PL39fPy8/Lz8fLy8fHy8vPz8fHy8vLy8/Px8fHx8fHx8fHy8fLy9PPz8/Lw7erm4t/X08zFvreyrKWko6OjpaeorrCxsrGrpaCTiXpsXlJJRUA8PEI/ODxGbXeBh42aqbC6xM3V3uPo7/Ls5t7UzMG1q5zx+/r18/X19PT09PLx7/Hx8vLy8vLy8fLy8O/q4djJvK6ch3JfUEU8OD1CRERGT1FQTk1MSUU9dcHX3OLt9PHz9PTz8fDw8vLy8vLy8vLy8vLy8vLy8vDw8vLy8vLz8fHx8fLy8vLz8/Ly8/Hx8fLy8vHw8fL08vL08/Lx9fb7+fb8+P/29Pj39/f29vT09fXy8fPz8vPx8PDv8fHy8vPz8vLz8fHx8PDw8PDw8PHx8PDw8/Py8vLw7erl4drXzsi+tq2knZeUk5GRkZOVl52dn6CemJCLfHJkWU9HQ0JDPz89NDZQcXV/iJCao7C+wcrT2uLm6/Hx6+Xd08vAtK2b9vn69PP19PPz8/Pz8fDx8fHy8vLy8fHy8vDv6uHXx7mqmYNuW01IPTlBR0ZJU1NXWllYWVdWOWPF4eHq7/Xy8/X18/Lx8PLy8vLy8vLy8vLy8vLy8vLw8vLy8vPz8/Hx8fLy8vLz8/Pz8vLy8PDy8/Lx8PDx8u3x9vj39vn78PX+9vX6+/f29fT19fTz8vTz8PDx8fPz7+/v7+/x8fHy8vLy8fHx8fDw8PDw8PDw8PDv7/Ly8fDx7+zn4tzX0cW+tKugmI+JgoGAgICChIaLjY6QjYaAemlfU0pEQD9BOz87NkFbb3J3g46apbC5wsbP197k6Ozy8evk3NLJvbGfu/D68/P28/b09PP08/Hw8vLy8vLy8vLy8vHu7Obc1MO1pZB8aVhMSDU9Q0tSVFpZW1xcW1pVUVBLreXs8+vz8/Pz8vLy8vHy8vLy8vLy8vLy8vLy8vLy8fHy8vLy8vHz8/Ly8/Py8u3u7u7v7+7u8fLz8fDx8fLz8/T19fX29/T29fb39vf29fTz8/X09PT29fTy7+/v7/Hx8fHx8fHx7+/v7/Hx8fHy8vLy8vLy8vHx8fLx8fDw7u7r5+Da0cnCs6GWjoV4b25ta2hpbXBydXd5d3VyamVUS0RAOzxAP0U2MURgb3V9iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wn7zw+vTz9/P29fT09PLw8PLy8vLy8vLy8vLx7uzm3NTBtKSPe2hYTEY4Q0dQWFpeYWNkZGNiXVhWTqXm7vXt8vT08/Py8vLx8vLy8vLy8vLy8vLy8vLy8vHx8vLy8vHx8/Lx8PHx8O/t7e3u7e3t7e/w8e/w8PHz8fP08/T09vbz9fT19fX19PHw8PDy8vLw9fTz8e7u7u3t7e3t7vDw8O/v7+/x8fHx8vLy8vLy8vLx8fHy8fHw8O7t6uPe1cvCt6mXin9zaF9fWldXWFleYmJjZWNhXVVNS0RCQDs4PEE1QlNlcnmCi5Wcp7C3vsfO1dng5uru8vTw6uPa0Me7r5+88Pnz9fb09fT09PPy8PDy8vLy8vLy8vLy8e7s5tvTvrGfjXloWUxFPEpOVl5iY2ZoaWloZmJdW1Ka5/H57vL19PLy8vHy8vLy8vLy8vLy8vLy8vLy8vLx8fLy8vHx8fHw7+/t7ezr6urp6ejo6Ojq6+zt7e7w8vDx8/Ly8/X18/Py8vLy8vLz9PLz9PLz8e/u7Ovp6Ojp6Ojp6uvs7O3u7u7v8fHx8fLy8vLy8vLy8fHx8vHx8PDu6+jf183BuKibh3dsYldOT0lGSUpHS1JSU1NTUU1FQD9BPz5APjk1Q1tyeX2DjZihp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6evvD59fX28/Tz8/P08/Dv8vLy8vLy8vLy8vHu7OXa0ryvnox4Z1lMQz9QUFtkaGpsbnBvbm1oY2BXjerz9/Dz8/Pz8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vLx8fDx7uzq6ufm5ePi4eDf39/f4+bn6evs7/Lv8fLz8/Hz9PT08/Py8vLy9vT08/Py8e/o5ePh4N/f4ODh4+Xl6Ors7e3u7/Hx8vHy8vLy8vLy8vHx8fLx8fDw7Orj29DGua2bjHdmXVVNQ0I+PUBAPj9DSElKSUZCPjs+PT5DQjc4SmVyen2Ejpihq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtn8Dy+fT19fP19fPy8/Lx8PLy8vLy8vLy8fLx7uvl2dG5rJyLeGdaTkNDUlJcaG1vcnV2dnVzbmhiWn7t8vTw9PT08vPy8vPy8vLy8vLy8vLy8vLy8vLy8vHx8fLx8fDw7u3q5uTj4N7a2djW1dXW1tzd4OPn6e3x8PHy8/P08/T19vP08/Lz8vTy8PDu7Ono393Z19bV1tbX2d7f4uTp6uzt7u/x8vLy8vLy8vLy8vLx8fHy8fHw8Ovm4NbLvq+jjn1nWFBKQTg9PTs3Nzs+PkBCRUZCPzs7PEBAPTk6UXJ2e4CIlJ+mrLa8xMvR197i5unu8vT2+fvu6OHYzcS4rJ/B8/j19vbz9PT08/Py8fDy8vLy8vLy8vHy8e7r5NjPuKybi3hqXFBFRlZVYGtxcnd5e3t6d3JtZV9y8fHx8PT09PLy8vPz8vLy8vLy8vLy8vLy8vLy8vLx8fHx8fDw7+zq5uLf29fW0c/NzMvLzM3Q09fb4OTq7e/x8vTz8/P09fX08/Lz8/P08u/t6OXh3dPRz83Ly8zNztDW2d3g5efr7O3v8vLy8vLy8vLy8vLy8fHx8vHx8PDo5d3QxLakmIJwW05GQDczOEJMTU5ORjw9PD5AQUE/Pjo7NDRFYHN6eYGMlqGnr7m/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKufwvP49vb28/Pz8/Ly8/Hv8vLy8vLy8vLx8vHu6+TYz7iqnIt5bF9URUhYWWZxdHh6fX9+fXt1b2lhZ/Pz8vH19PT08vLy8fLy8vLy8vLy8vLy8vLy8vLy8fHx8fHw7+/q5uLe2dXQzcPCwL69vr/AxsnO09ng5erw8vLz8vLz8/Py8fLx8PDy8vDs5+Pd19THxcPBvr6/wMXJztTX3OHl6uvt7/Ly8vLy8vLy8vLy8vHx8fLx8fDw6OPZzL+unI56aFRIQDs7QVBRUlFTWFpaTUE3Njo8PDtANDhRbHt/fYSQm6GqsLjDyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirnsL19/X39vTz8/Py9PLy7/Ly8vLy8vLy8fLx7uvj1864q5yMem1hVUZJWlxrdHd7gIOFhYSBe3VrY2Dy9fLz8/T08/Lz8vHy8vLy8vLy8vLy8vLy8vLy8vHx8fHx8O/v5+Tg29XPy8m5t7Wzs7S2t8DCyc/W3eLm7/Dz9PLy8vHy8e/v7u/w8O3q5eHc1M/Kvru4trW0tbXBxcrP1Nrg4+rr7e/y8vLy8vLy8vLy8vLx8fHy8fHw8Ojj2Mu7qpaHdGNQRDw8SFdQUVJXWlteX2xUPTQ4PDw6OkJfeXx5g5GSnaWrtb/EyNLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qp3A8/b09vX08vPz8vPy8vPy8vLy8vLy8vHy8u7o4dbMtqqdjnxuY1hOS1hibnB2gYKEhoaEgXt1cmdf7vXv9fH19PPy8fPy8vLy8vLy8vLy8vLy8vLy8vLv8fPy8fDt6+Te2tPLxL23rqymoqClrLK1u8bL0dbe8uvt7/Hx8fHx8vLx8fPz8fDp5t/X0MfAurOvqKalpamvsrrBydPW1djq7O/w8O/x8fLy8vLy8vLy8vLx8vLy7u3n4NTFsqGPfmZeUEQ3QFFRWF1jZmlsbm1uc2M3PkM9NzdmgX+FjZKaoKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mdwPP29Pb19PLz8/Lz8vLz8vLy8vLy8vLx8vLu6OHWy7erno5+cGRaUU1bY3ByeIODhoiIhoN9d3RpYO/18PXy9vXz8/L08vHy8vLy8vLy8vLy8vLy8vLy7/Hz8vHw7eri3NXOxL21r6OemZWVm6Gmr7bFyM/V2+br7e/x8fHw8fHw8PDy8fDu5uLa0svCubOoopuYlZaanqqyusPN1dzj6evv8PDv8fHy8vLy8vLy8vLy8fLy8e7s5t3Tw7CfjHxmW09CPk1aW2JobnF0eHp6fHp7WTk2O1+AiYiIk5qfqKuyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epncDy9vT29fTy8/Py8/Ly8/Ly8vLy8vLy8vPy7ujh1su3q56Rf3RnXlVPXGVyc3qFhomLiomGf3l1a2Lx9/H28/X09PPz8vLy8vLy8vLy8vLy8vLy8vLy8u/z8/Lx8Ovm3tbPxbuxqaKbk4yKi46VnKexv8XL1d7m6+3v8fHw8PDw7+/v8fDu7OLd1MvCuK+pmpSNi4qLkJWhrLW9yNHe6Onr7vDw8PLy8vLy8vLy8vLz8vHy8vHu7OPbzr+snIl3YlJKPEJXX2Fscnl9gISGh4iMjn43Q3KSkZCSmqSmqrG3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZ3A8vb09vXz8vPz8vPy8vPy8vLy8vLy8vLz8+7o4dbLt62gkoR2a2FaUlxlc3R8h4iLjYyLiIJ8d2xh8fXy9/T29fPz8/Py8vLy8vLy8vLy8vLy8vLy8vLv8vPy8O3n49nQyL2xpp2TiYF7fX+EjZWhrL3Fx8/c5uzu8PHx8PDw8fHx8e/t6+nf2M7Dua6hm46IgX19f4WLmqixucLO2+fp6+/w8fDy8vLy8vLy8vLy8/Lx8fLx7ezi2M29qpeEdWBPSDhFXWJldHuCh4qOkpOYkJmUa42emZecoqWnrra6wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmdv/L18/b18/Lz8/Lz8vLz8vLy8vLy8vLx8/Lu6OHWy7iuopSGeXFmYFRbY3J1fYiJjI6NjImCfHZrYfH18PXy9vX09PLz8vDy8vLy8vLy8vLy8vLy8vLy8fLz8vDs5t/WzcG0p5mPhX11cXJ0eYONlaG0w8jO2+Xt7/Hx8fDw8PPz8fHv7enn3NXIvLCjl459eHJwcnZ/h5OirLS9ydjl6uzw8fHx8vLy8vLy8vLy8vPy8fHx8e3r4djLuqeVg3NgUUo4TmNobnyEjJGVmp6gpKKfpKWyo5qqrbCvsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apnL/y9fP19PPy8/Py8/Ly8/Ly8vLy8vLy8fLy7uji1sy5sKSZioB2bmVXW2NxcnuKiIuNjYuIgnx1a2Hx9vH18/b09PLz8vLw8vLy8vLy8vLy8vLy8vLy8vHy8/Du6+Pd0sa5q5yPg3drZWFgYmhzfo2dq7zJ0d7o7vDy8vHw8PDz8/Py7+zp5tnQwrOlmYuCcWtkYmNmbXSCmau0usbV4uvt8fPy8fLy8vLy8vLy8vLz8vHx8fDs69/WybillIJyX1NHN1Rnb3eCi5SZnqOoq660rKywrK+vsLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZy/8vXz9fTz8vPz8vPy8vPy8vLy8vLy8vDx8u7o4tfNu7KonZCGfHRtXF1ibnB6iIeKjIuKhoB6dGth8/fy9vP29fPy8vLx8PLy8vLy8vLy8vLy8vLy8vLx8vPw7unh2s3BsqKThXdsaF9URjw4PEF7nK68ytTh6+/x8vPy8fDw9PPz8u/r6OPUy7usno6AdmtjWlFKRkZJY4amuL/J2Ofs7/L08/Ly8vLy8vLy8vLy8/Lx8fHw7Ore1ci3pJJ/cWBTQzlebHd+ipOdoqetsra9tbq4t8HAvL/BxMfJydDb297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqicv/L18/X08/Lz8/Lz8vLz8vLy8vLy8vLw8fHu6eLXzby0qp+TiYF4cmBeYm5veIeGiYqKiYV/eXRrYvT48/fy9vXz8vLy8O/y8vLy8vLy8vLy8vLy8vLy8fLy8O7p4djIu62djX1xZF1WRjMiHB0hU4utwM/a5/Hw8fPz8/Hw8PPz8vHu6uXi0se3ppmJenBmXlNJPjY0NEFvobvGz+Dw7e/z9fTy8vLy8vLy8vLy8vPy8fHx8Ozq3NLHtqORf29mWUM9Z3J/hJKcpqywt73AycS+ysnLzMrHzMzO1djY2+Pm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHx7+vh19HDu7CmnZSKhYBlV2JrcXqFg4eJiIaDfnl0aV309fL49ff18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vP08/Lu5tzTxbeoloN1amJeRysXIiUmIzJrvsvc2ebz8/Hx8PDx8fLy8vLw7+zj282+sJ+NfnVrYFJMQjw9PkFAR5vM1Nrm7/Lx8fHx8vHy8vLy8vLy8vLy8vLy8O/s6tvPwrOhkoN5ZlZLSWR2f4qWoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8e/r4tjRxb2yq6KZkIuIaFZgaW13goKGiIeFgn14c2hc9Pbz+fX39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLz8/Pw7ebb08O1pZOBc2lgXEctGSMnKSUuYMTT4uHp9fTy8fHw8fHy8vLy8e7s49vLva6di31zaV1RS0M9QEFEQkiXz9vf6/Dz8fHx8PLx8vLy8vLy8vLy8vLy8vDv7Orb0cO0opSHe2lbT05neIKNm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fHx6+Pa1cfCubCqo5yXlG5WXGZqdH9+goSDgn96dnBnW/X39Pr19/Xz8vLz8vLy8vLy8vLy8vLy8vLy8vLy8vPz8Ozl2tDAsaKQfnBnX1xIMBwjKy4pKU/L3evs7PTz8vHx8PDx8vLy8vHu6+Layrusm4h6cWdeUEpEQUZGSUZJktTj5fLx8vLx8fHw8vLy8vLy8vLy8vLy8vLw7+zq3dHFtqaXi4FxZFlYanuGkp+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy7/Hx8ezl3djMyL+4sqynoqF0VFllaHB7e36BgH99eHRwZFr2+PP48/f18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vLz8vDs5djOvK+ejHxvZl5bSDEiJC0xLCk/0+bw9e/08/Py8vDw8fLx8vLw7uvh2ce6qpmGeXBnXlBJRUVKTE1ITpHb6uj39PLy8/Lx8fLz8vLy8vLy8vLy8vLy8O/s6t3Rx7monJGGfHFmY2x7h5Ohrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vDx8fDs5uDc0MzHwLu4s6+weVJWY2hud3d6fHx7eXVxbWNa+Pnz9fL39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLx8vHu6+PXzbqtm4t5b2ZfW0YyJyYvMy8tNdzr8/fw8vPz8fHx8fLy8fLy8O7q4NjGuKeWhnhvZ2FTSkdKUFBQSlOU4+7r9/Xy8vLy8vLz8/Ly8vLy8vLy8vLy8vDv7Orc08i7raGWjoR7c29te4eVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLw7/Hw7eni39PRzMnFw8C/wIBPUGBmaG9ydXh4d3VybmpgWPj58vXx9/Xz8vLz8vLy8vLy8vLy8vLy8vLy8vLy8fHx7uni1su4q5uJeW9nYFtHNC8pMTQxNDXk7vL28PLz8/Dx8PHy8/Hy8vDu6d/WxbemlYN5cGlnVk5KT1ZWVVFZm+vx7vT08/Px8vHz8/Py8vLy8vLy8vLy8vLw7+zq39TKv7GnnpWMhYF7bXqHl6GtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8PDx8O/q5ODY19LRz87NzM+HTEpaYWNoa29xcXFwbGlmXlb4+vL28ff18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vDx8e3o4dXKtqiYiHlvaGNeSDc3LTI1Njk56+/y9PLx8/Ly8PHx8fPx8vLw7ene1sO2pZSDeXFqbVpRT1VdXFxYX6Lw9PLy8fPz8vHy8vL08vLy8vLy8vLy8vLy8O/s6uDWzMK1raWdlZCNhW51hJefq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8u/w8fDv6+bi29nY19XV1dXZi0pGV1xeYWlsbm9ubWpnZVtW+Pvz9vL39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLw8fHt6OHTybWnmIh4b2tjYUg6PDAzNTc+PO7x8/T08/Ly8fDx8fHz8fLy8O3p3tXCtaOTgnhxanBdU1FYYWFfYGKn8fb28O/y8vLy8vLz9PLy8vLy8vLy8vLy8vDv7Orh187FurKooZyal4ptc4GUnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLv7+/v7evp6OLi4eLl5+jp0pFTQE1aX2NdXWJue09mZWNaT/r49Pby9vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZiJe3JsaWVNOjo5MzU/OTrv6/jz9fTz8/Ly8/Ly8fHy8/Dt593SwrSklYd6c29ucE9UXGRiZGJjpu7w8PPx8vLy8vPz8vHy8vLy8vLy8vLx8fHx8e/t4tzSysG7tLCtpaSlZXKChp6nsbnDzdTd4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8e/v7+7r6ejm5eXm6evt7v/56uzz8/Du//bw6sxpX1xfVkz59/T48vb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtamYiX50bW1pSTY+QTUzPj0+8+738vb28/Ty8/Py8vDx8vPw7efd0sK0pJWIe3RxcXNRV19mZGZkZajw8vL08/Py8vPz8/Pw8vLy8vLy8vLy8fHx8vHv7ePd1MzFv7q2rKynqmFvfIaQm6Stt7/J0tzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx7+/u7Orp6Ojp6u3v8fLu7Ozx9/jy7f739vnTZFxfWlNI+fb0+PP29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLx8fDs5+DUybWpmYp/dXBwck45Qkc7NDk9QPfy+fD09fT08/P08/Hw8fLz8O3n3dLAtKSWiX93dXV4VVxiamhpZ2ep8vXy9vT08/Pz9PTx8fLy8vLy8vLy8vHx8vLx7+7k39jRzcjEwL/Ew8FkbHmIkJumr7nBytPW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fHv7u3s6uvr7O3t7/Hy+PTu7vX49e7x7evsyF5YWlZPRvj29ff19vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZmMgXh1cnNVPkBJRDs6PD/48vry8vH08/T09PPy8PHy8/Dt593SwLWllouAe3l5e1heZWpobGhqq/T19Pb18/P09PX08vHy8vLy8vLy8vLx8fLy8fDu5OLd2NPQzs3NzcrLX2dxeoSPnKavtbzG0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vHx8fDu7e3t7e3v7/Hy8/by7u3t7u/v9PPx78hXT0lVTEX49/X39Pb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtKmajYN7d3dzVT4+R0RBQEBB9/H78vHt9fTz8/Pz8vHx8vPw7efd0sG1pZmMg358fX1bYWdsam5paazz9fT29PP08/P08/Lx8vLy8vLy8vLy8fHy8vLw7+bk4N3a2tjY19jd2FpdbXh+i5eirLK5wczS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8fHx8O7u7/Dx8vHy9PX28/Hz8/Hx9O3w8fLGUEhJUUpC+Pf09vT29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLx8fDs5+DUybSpmo2Efnl4e1Y9QEY+OT9FQ/bw+vLy8PX09PPz8vDv8fLz8O3n3dLBtaWZjYWAf3+AW2FnbWtuamqs9Pby9vP09PP09PPx7/Ly8vLy8vLy8vHx8vPy8O/n5eTi4eHi4u7p59thXWFkeYSRnKeusrrEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLx8fHx7/Lw8vLy8/T07fDz9/r48+/w9vb3ylFOUE1GP/b29PX09vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZqOhn56en5ZP0FFPDc7QUH18Pry9PP18/Tz8/Lw7/Hy8/Dt593SwLSlmY2FgYCAg15iaG1sb2lrrfT18/X09PLz9PTz8O/y8vLy8vLy8vHx8fLz8vHv6Ofo5+fo6uvx6+//2PP59uzy9vf28Ovru8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vHx8fHx8fHx8fLy8u/09e7p5+jp5O7t7MFMSEJKQz319fP19Pb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtambjoZ+fHx5W0JAR0Q8ODY69PH68fPz8/Pz8/Py7+/x8vPw7efd0sG0pZmNhYGAg4NfZGlubXBqbK719fT19PPy8/P08/Du8vLy8vLy8vLx8fHy8/Lx8Ovr6urq7O3v9PPx/+b59vXt8vPz8erj4bS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fHx8PHx8vHw8fHu6OHd2t7d39+6UEVER0E+9/fz9fH19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flJARkZHRDYzLvjz8vP09fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLw8O3s7e/w8fT29fHw7/Hw8/Lx7uzj0curtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vDx8fDx8vLy8fHw6uLb1dLV09XVsklBP0Q/PPX28vTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5SQEZGR0U3My748/Lz9PX09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8PDt7e7w8fLz9fTx8PDx8fPu7Ofj18W/prG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLw8fHy8fHx8vPx7OPaz8nFx8XIxqhBOzxCPDv09vHz8vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+U0JHRUdGOjQu+PPy8/T19PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vDw7u7v8fLz8fTz8vDy8vH17ejg2cq3sp+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8PDx8fLw8fH07uXbzcO8t7q5uruePTo9Pzw58/bx8/L19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flNDSEVHRzw0L/jz8fP09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLw8O7v8PLz9PDx8vHz8/Ty8+rh1sy8qaWYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8u/w8fHy8vHw8Ojd0MO4sa2vrq+wljg5PEA7OfP28/b09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5UQ0hFR0g9NS/48/Hy9Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHv8PHz8/Tw8fLy8/Tz8u3g1cm+rZuYkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLv7/Dx8fPy8uri1ca7saqnpaSmpo41ODxAOjr09vP29PX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+VERJRkdHPDYw+fPx8vT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8PDy8/P08vLz8fLy8O3k1ci7saCOjo2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy7u/y8vLy8fHm3s/AtKulo6CgoaGLNTo9Pzs58/Xy9fP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+f1RESUdHRzs2MPnz8fL09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLy8vDx8vPz8/P08/Hv7erl2Mq7rqSUhIWJlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8u7x8vLy8vHw5NrLu7Goo6Cgn5+gizY7Pj46OPP18fTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn9URElHR0Y5NzD58/Hy9Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8vLw8fLz8vP09fPw7erk4M6+r6Oaint8hZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLw8PDx8vHw7+TbzL6ypZ6dnJmdnYo3Nz09Ojf09vH38vX08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6CUD9LRj8+Ojw28/P19/Xw9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fLz9PT07vHz8e3k2M3AsqOUjH5xc4GPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fHx8fLy8O/l3M2/s6egnpyZnZ2JNjY8PTo39Pbx9/L19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gVA9SEU/QDw+N/Pz9ff18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHy8vPz9PDy8u/p39HFuKmajYR2aWyAjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vHx8fLy8vDv5dvOwLKnoJ6cmZ2ciTU2Oz06N/P28ffy9fTz8vLy8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foBPOkZDQEI/Qjr08vT39fH09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHx8fLy8vLx9PLr49bGu66fkIN7bmJkfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLy8fHy8vLw7+Tazb+xpp6dnJmdnYk1Njs8OTbz9vH38vX08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6ATThEQ0FFREc99fL09vXx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fHx8fHx8/Pw6N7Rv7OomYp9dWldX3uJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8vHx8vLx8O7k2sy+saSenJyZnZ2JNjY8PDk28/bx9/L19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gU85RERDSklLQPby8/b18vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHx8fHx8fLy7+fdzr2xpZWHenNmWl56iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vHx8fHx8e/t49nMvrCln5ybmJyciTY3PDs5NvP28ffy9fTz8vLy8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foNRO0dIR05MTUH38vP29fL09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHx8fHx8fHw8O7n3c6+saSUhXlxZFldeoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLx8fDx8fDu7eHXyryuopuamZebm4g1Njw7ODXy9fH38/X08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6FUz9MS0xSUU5C9/Lz9/Xx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fHx8fHx7u/s5t3Pv7KklIV4cWZbXXqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fDw8PHw7uze1MW5qp+Yl5iVmZqHNDU7Ozg18vXx9/P19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+hlVBTk9OVFNOQvfy8/f18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHx8vLy8uzu6+bdzr+zp5iIe3NnXF97iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8vLy8PDv7+3u8O7r6uTg1cu7rJ+TjY2MioySfzM0ODs4N/P59vT09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foBZR09NU1dNT0P18/T09fD09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8/Pz8vLy8vLv7ejh1se6sKOTgndvYlVee4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8vDv7+/r7ezq5+Tf2c7Ds6WVioWDgoKGjH00Njo6ODbz+fb09PX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6BV0dNTVFVTE9D9fP09PXx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vLx8fDw8PDw7uzl3tLEtaycjX1zbV9TW3uImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8vLw7+7u6uro5eHd1c7AtaaXiH54dnZ4fYV3MTU6Ojg28vj19PP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gVhHTU1RVUxPQ/Xz9PT18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHW2NqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8PDv7ezs6+nn4NfMvK2jkYN2a2VaUFh6iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fLy7+7t7ebm5N/Z08zDs6aXiHxxa2prbXN8czI1Ojs5N/L29PTz9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5WRkxNUFRLTkP18/T09fH09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fDt7Ovq5uXh3tbNwLCflYZ4amFdU0lTeoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8u/u7Ovl4+DZ0srAt6WZiHlsY15cXV5oc243O0A+PTry9fT08/X08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH58VUVNTVFUS05C9fP09Pbx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHu7Orn5eLf2dTMwbKhkYd3a15XVEtETnuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8vLv7evq4uHc08vBtKuai3lrX1RPTlNUYGxsO0BFREM+8/Xz8/P19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+fFVFTU9SVUxOQvXz9fT28vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHW2NqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLv7erm5ODb2M/JwbSjk4J3aV1TTEtEP0t9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fLy7+3r6d/d1szCt6idi31rXVJJRUJKS1llaT1ESkpIQfT08/Pz9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn1VR05OUVJITkL18/X19vL09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy7uvo4+Db1dHDvbKllYNzaFxSSURGQD1Lf42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8u/s6une29LIvK+glX5xX1NKRD8/Q0JSYWlBSlFOTET19PLz8/X08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+VkhQT1FRR05C9fP19fby9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8u3q5OHe19LMurWomop4Zl5VS0I/Qj88SoGOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vDy8fHx7ejh2tLJv6+fj4BvXEtDQT06Nj06RlxfUUpPTUxO7vb09PH19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+g1ZFT0tGSENMRPDx8fL68vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIKHWmJpbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vHx8vLy8fDp5+Xg1s/GvbSpmox4ZVdMREM9PTs9PVCEk6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLv8vHx8O3n4NfNxbinloZ4YlFBPT8/PDxBPEZYXlRNUVJPT+/19PTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foVWQEpHRkpITkXz8vPy+vD09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1piaW10cXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLx8fLy8vHw6OXj3NPLwLekmIl7aFhLQ0A/PD05OjpOh5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmm7/y9vP19PP19fTz8/Hx8PLy8vLy8vLy7/Lx8e/s5N7Qx7uvnYt5a15OPz0/QD89SUJIWF9WUFJXU1Hv9fP08vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6FUTtCREVPT09H9fT08vfv9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdaYmltdHFwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8fHy8vLx8Ofk39fLwresmYx7a1lKQjw7Ozg7OTc4Toyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vHy8/Dv6uLbyr+zpZF/bF5PQDUzNjg4Njk3Pk9XVFNYWVRS7/Xz9PL19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+g043QURIU1RQSPj19PL37/T09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHWmJpbXNxcG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLx8fLx8O/m4dzTxrquoYx/bV9RR0FAPz48Pjs7PFSQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLx8vPw7eff18W7rZ2JdWNTQzoyNDtCRUZLS1JaW1VTV1dUUvD29PTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foNNOEVJS1JRTkj49fTy9/D09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhllhaG1zcXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8fHy8fDv5d/Yzb+xo5SCc2FSSEA7PD48Oz48PD9WlaOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmm7/y9vP19PP19fTz8/Hx8PLy8vLy8vLy8PLz8O3m3NTDt6iZhXBeTzs2MTM7RElLTE9XW1hTVVpWU1Lw9vT08vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6DTjxMTUlNS0tF9fT08vjw9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYZZYWhsc3Fwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vHx8fHv7uTe1cm5qpmKfW5YSEA7ODk4Ojg5Njg5S5yptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vDz8/Ds5dvRwrWml4FuXE09OjY3PENJTEpQV1pZVlpgV1RT8fb19fP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+glA/Tk5JSUZIQvLy8/H68vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWWFobHNxcG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLx8fHx7+7j3NDEs6ORgW9gSj9AQkVJUVleZWt2eYujsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLx8/Pw6+TZ0MC1pZWAbVtNPz08PUFLUlVYXGFhXl1fZFlVU/H29fb09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn9OP05OSElGRUHw8fHx+vX09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAhllhaGxzcXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8fHx8O/u4NjOwbGgjn1mV0I5QEdNVF5ob3iAjI+dqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Ovj186+saKQe2lZTEI0Nz5KTFFbX2BkZWVkYV1fVlHw+PPz7vb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6CVD5DRUtORkI8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgoZZYGdsc3Jvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6uLXyryqmYp8ZFJJPUVLVl1mcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDr49fOvrGhkHppWUxGODtBTU9VX19jZmdnaWdjYlxW8/n09fL29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gFQ+RERKTUNCPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWWBnbHNxb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Orh1sq7qZiIe2RSSj5JUFxkb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeav/D28/P18vX19PPz8fHw8vLy8vLy8vLy8/Lw6+PXzbyvno96a1tOQTQ5QlFTWWJiZmlqaWlnZGBbVfD19Pb09vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5UQEVER0o/Qjz49PH09Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhlhgZ2xzcW9urvL08vb18/Tz8/Tz8O/y8vLy8vLy8vLy8vLw7+zq4NTIuKeWh3ljUks/T1dlbXiBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Orj1s25rp2MfGtbUUY2ODxJTVdkXmNoaWtrZ2NcWFPu9PP18/b18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH59UkBDQURIPkI8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYZYYGdrc3Fvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6t/Ux7aklIN3Y1FKP1RdbHR/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDq4tbNuKydjHxsX1NMQENJU1BSWltfZGZlZWNgW1ZU7/bz9fP29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flI9QD5DRz5CPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWF9ma3Nxb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Ord08S1o5GCdWNQSj5ZYXJ6h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeav/D28/P18vX19PPz8fHw8vLy8vLy8vLy8/Lw6uLWzLeqnI19bmJWS0RPWGRfXWJbXmBhYGFhX1dRT+739PTz9vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5TPD4+Qkc+Qjz49PH09Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhlhfZmtycW9urvL08vb18/Tz8/Tz8O/y8vLy8vLy8vLy8vLw7+zq3NDEtKKRg3VlUUs+XmZ4f42Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Ori1cy4q52OfnBkWFFHT1lnanF8dndzbmljXllZT03v+fT08/b18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5/UjxAQERJP0I8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYVYX2ZrcnFvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6tzQxLShkoJ2Z1JNP2Rsf4aTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDq4tXLt6udjn9xZVtQSVVhbm5ye36ChIOAfHVwZFhT9Pvz8fL29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gFM8QUJITEFCPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICFWF9ma3Jwb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Orc0MO0opKDdmhUTkFncIOLm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6Wav/D28/X08vTz8vHw8PDu8vLy8vLy8vLw8fHt5+HVy7eqnZGAdWheW1FWXWpudX6DhIWEhYN+eHVqYfH28ff09PX09fX08vHx8fDw8PDw8PLy8vLy8vLy7vHv7Obf0smzqZuPhH57e4JMN0REQEZGQz368/Hz9PT09PTz8vLv7/Ly8u/t59zTv7Sjl42Efn19hFdgZ2txbm1trvLy8fX09fX19PX08/Lw8PDw8PDw8PPy8/Px8O3r28/Cs6GShHduXlJMbHuFkJ2qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmb7y9fP19PP19PPx8fHx7/Hx8fHx8fHx8PPy8Ori1sy5rZ+Sg3drYltSWF9tcHiChIaGhoaFf3l4bGLy9vH28/X09fb29vLw8vHx8PDw8PHx8fHx8fHx8fDy8e3n39TJtaudkYd/e3yBSzdEREFHR0M9+fLx8/Pz9vT08/Py8O/y8vLx7ujc1MC1ppiNhICAfoVYYGdrcW5sbK3y8vL19Pb19fX19fLx8fHx8fHx8fHy8vHx8e7r6tvQw7SklYh7bl9TTm19h5SgrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZm98fXy9fTz9fPz8fPx8fDz8/Pz8/Pz8/Hy8u/p4dbMuK6hlIZ5bmRcU1phcHR8hoaIiYmJh4F7em5k8/bx9vP09PT19PTx7/Tz8/Ly8vLy8/Pz8/Pz8/Px8vLu6ODTyrasnpKHf3x9gUs3Q0NBR0hCPPj08PPz9vb19PPz8u/v8vPy8e3n3tTBtqeajoaBgH+FWGBna3FvbGut8vPy9PT09PP09PPw7/Pz8/Pz8/Pz8/Pz8/Lx7uzb0cO1ppeJfm9hVlFwgIuYpbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WZv/H38/X08/Xz8/Pz8vHw8/Pz8/Pz8/Px8vLv6uHWzbquoZWFem9jXVRbY3J2foeIioyMi4iDfXxvZfP38ff08fLz8vPy8O708/Py8vLz8/Pz8/Pz8/Pz8fLx7ujg08m2rJ2Rhn59fIJMN0NDQEdIQzz49PHz9fb19PPy8vHw7/Ly8vHt593Uw7emmo+GgH9/hlhgZ2txb25srfL08vX18vLy8vPw7+7z8/Pz8/Pz8/Tz8/Py8e/t3dHFtqWXin5wY1lUcoKOnKm2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOlmsDz9/X29vX29vT09PLy8PHx8fHx8fHx8fPy8Ori1s27rqKThXhtY15VXGRzdn6HiYyOjo2KhH98b2Xz9/H39fPy8/Tz8vDu8/Ly8fHx8fLx8fHx8fHx8fHy8e3n4NTJtqydkod/fX2CTDdEQ0BGRkQ++/Tx9fX29vX19fXz8fDy8vLx7ujc08G1p5qOhoGAfoVYYGdrcW5ubq709PP39fTz8/T08/Du8vLy8vLy8vLy8vHx8e7r6d3SxrWml4t/cmVaVXSEkJ6ruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZzA8/f19fX09/f19PXy8vLv7+/v7+/v7+/w8O3o39TKuK6gk4N3a2JdVVxkc3d+h4uOkI+NioWAfG9k8/bx9vT09fT19fXx7/Ly8fHw8fHx7+/v7+/v7+/v8O/s5t3RyLWqnZGHf3x9gkw4RERARkZFPvr08fT09/f39fX18/Lw7/Dv7url29G/tKWYjYSAgH2EV2Bna3Fub26u9PTz9vT39vb19fTx8PHx8fHx8fHx7+/v8O7t6+nc0MK0pJaKfnFkWlV1hpKfrbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6Wcv/L38/Tz8vb08vLx8e7u6+vr6+vr6+vp6ujm4dnNxLOonI6Ac2hdXFRbZHR4gImMj5CPjYqGgX1wZPL17/Xy9PT09PTz8u/s6+vq6urr6+vr6+vr6+vr5+jo5N7Wy8GuppiLgnt4eX9KN0VFQkdHRD768/Hz9PX09PLy8vDw7efo6ufl39TKua+gk4mAe3p7gldgZ2twbW5urvPz8fT09fb09PTy8e7r6+vr6+vr6+vr6enp6OXj1cq8r56QhHlvYVdUdoeToK67x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOlm8Dx9vLy8vDy8O7t7ezp6eDg4ODg4ODg4OPh39rSxr2to5aJem9lWltTW2V0eYGKjI+Rj4yKhoJ+cWTy9O7z8PLy8vLz8fDt4uLh4eHh4eHg4ODg4ODg4ODh4d7Xz8S5qp+Shn12dHV9STZFRkNISEU9+fLw8fPz8PDu7u7s7Ovh4eHg3tjMw7OomoyCenZ1eYFWYGhrcG1vba3y8u/z8vPz8fHx8O/s4eHh4eHh4eHh4eDh4d7c2s7CtaeZi391bV9VU3aIlaGvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzppfA8vj08PPx+PPu6OLb19PPz8/Pz8/Pz9DQzs3IwLSumpGGeXBmXFZOTVpldHeBiYqNj4+Oi4V/d3Bj+fP48/P29fXz8Ojf19LQz8/Q0NDPzs7Ozs7Ozs7Qz87LxbyvqJiOg3lxbGpsalM8P0VESUtGQPnz9fT08/f28u7p4NjR0tDPzsrDuLCil4uAdnBtbG5zXV1maG90bnCy9fny+PD39fTx6+LY09PT0tLS0tLSz8/Oz87LyMa3rqKWjH50bFxUTkp6h5aesLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaeZwPL38e7w7uzo4dnQysTBvb29vb29vb2+vby6tq6jm42FeG9kW1NNSklaZnN4foiKjY+PjouFf3lzZPjy9/Hw8e7q5uDWzMS/vr29vb69vbu7u7u7u7u7vb26ubSrn5iKg3dtZmFiZGZSPD9FRElLRD/38fLx7+zu6+Xg2c7Evb++vby5saeflYp+dGtlY2Robl1fampwdW5vsPP28Pfv7+3o4trRxr+/vr69vb29vr29u7y8ube1qaGUiH5zaWFWUEpHe4aXoLC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapmsDw9u/r6+ff2dDHvbKsqKampqampqamp6ampaCYjod6c2hfV1BKRUZHWmd0eH6Hi42Pj46MhoB6dGb28PXu6+nl3tbMwbatqKelpaampqWmpqampqampqalpaSeloyFd3FmX1hUVVhfTjw/RkRHSUVB9vP18uvn497VzMK4raaop6elpJ2Ti4B2bWNdWFZYX2RfYWxscnRxc6/t8uzy6eXh2tHHvLGppaSko6Ojo6SnpqampqWinpSMgnVsY1tUTUhGQnuHmKCwvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qpzC7/Tr5OHdzMa9saaelZCPj4+Pj4+Pj4+Pko+Mg3p1Z2JaUkxHQz9DR1pmdXl/iIuOkJCPjIeBfHVq8/Dx6OTd1s3CuKufmpGQj4+PkI+Pj4+Pj4+Pj4+Pj4+OioJ5dGVgV1FNS01QVkw9QEdFR0lFRPHx8uzj3NHLwberoZeQj5GRkY6Jf3htZFxVUE5NUFVbX2NtbnN1c3ev5+vl6N7X0ci9saeclZCQj4+Ojo+PkpKQkJCOjIp9d29jXVVOSkdBQT58h5qhsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKyfwe3u5dnTzLevpZqOhX55eHh4eHh4eHh3d3l4dW1mYlhTTUhFQT49QkdcaHR5gImNj5GRkI2Ignt3b/Hs697XysK3qZ6SiYJ7enh4eXl5eHh4eHh4eHh4eXl4d3FsZF5XUUtHRUNGSE9JP0JJR0hLQ0Tn5+be08u9t6uekYd/eXl4eHh2cWhjXFZOSUZFRkdMUmFlb3B1d3V6rd/h29rQxb2xpJqNhH97enp5eXl5enl4eHh4d3V0aWRdVU9LRUNDPT47f4mbobK/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquob3k5djKv7SinJGFenBoZWRkZGRkZGRkYWNkZGFbVVFLSURBPj07OkBIXmp2e4KKjpGSkpGOiYR9eW/p4d7MxLiwoZKGfHNuZmVkZGVlZWRkZGRkZGRkZGRlZWNfWVJPSkVAPz4+P0NGR0BFTUpKTEdF29jUysC3q6KVh3xyamZkY2RkY11YU01HQ0A/Pj9BRktkaHN1eHt1e6fS08vIvrKpnI2Cd29raGhnZ2dnZ2dlZGRkY2NhYFVSTUlEQD08QDo9OoGKnqO1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKO62dTHtKebjYZ7cWZfWVVTU1NTU1NTU1JTVFNSTklHQ0E+PTw7Ojk/SWJueX6Ei5CSk5ORj4qFfnxx4dTLt6+jm4x9cWhhXVVUU1NTVFRTVVVVVVVVVVVUVFZVUUxIRkA+PDw7OzxAQkhDR1BMS01OR87Fv7SrpZaMgHJoYFtYU1NVVVNQTEhEPzw8PDs8Pj5FaG16e32Aen6jxMG3s6idlIV4bGRfW1dWVlVVVVVVVlVVU1RTUlBKRkRBPjw6OT85PDmFjaGmt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKittLKuaaXi3p1bGJZUk1LSUlJSUlJSUlHR0lKR0RBPj8+PT08PDw6P0pkb3x/hIiQk5STkpCLhoB9cNvLvqqgkoh5bGFZU1BKSUhISElISEpKSkpKSkpKSEpKSUhDQT0/PDs8PDs8QEBHRUlRTkxOTkbDta2jnJeEem5hWFJOTkZISUpKSENAQDw6Ojo7PD46Q2pxf3+Bg4CDoby1qaOYiYBzZVxXUk9HR0ZGRUZGRkxKSUpKSUhHQ0I/Pjw7Ojo8OTw6h4+kqbjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2p7bEu6CPg3dmYFZPSUZDQUNDQ0NDQ0NDQkFBQEBAQEA5ODs+Pjw/QjtPbGx7iIqNkpWXlpWTjol/gnC9ubKal310Z1xTSkRBQUBAPz9AQEE/Pz8+Pj4+Pj4+Pj49PTw8Ozo6Ozs6PEA+UUdFTVFYSkVUqLOgmYB7cmpfVkxGQT5DQ0JBQUA/Pzs7Ozs7Ozs7QD9/d39+hYmDjZahrKSQiHVuY1lPSkNAQkJCQkJCQkJCQkJCQkJCQj08Ozs7PD09PEE7NJCUna29xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7EuayyuKyRfXVuVE5HQT89Ojk6Ojo5ODg3Nzo6OTg4ODg4Ozo5OTs8PTxCVnNygIyNjpOWl5eWlI+Kg4h1uK6hh35rY1hQSUI8Ojw8PDw8PDw8PDw8Ozs8PDw7Ozs7Ojo6Ojw8PT9APz07OU5JR1FVV1VYXqKjjolzcllVTUVAPDk2OTk5OTk5OTk9PT09PT4+PkI6gn2DiIyNhI6Qj5WOfXBgWlBIQj87OTk5OTk5OTk5OTk5OTk5OTk9PTw8PDs7O0FEPzWcnai1wMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL23rKKXgm9iVk5KRUFAPTs6PT09PT4+Pj48PDw8PD0+Pj1AQD45Nzk7O1d4eIGMi4yTlZeWlpSQi4CHeKqfkHdqWFBKRkRBPj09PT09PT09PT49PTw8PT0+PT09PT09PT0+QUE8Ozs7PTNRVU5XYGJqSk2Jj314ZmJQTklFQkA+PT09PT08PDw8PDw8PDw8PD04N4qLiI+TmJOZkoaCfmtcV1FLRkRBPzw8PDw8PDw8PD09PT09PT09PD09Pj4+Pj4+QT03oqexvsTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBvqyXhHRnXVJCPzs5ODo5ODs6Ojo6Ojo5PDw7Ozs7OzxFQD1AQT44NS5Oc3mDiI2SkZSVlZWTj4qFinuViHtnXEpEPz49PDw8Pj4+PT0+Pj49PTw8PD09Pj09PT09PT4+Pj07Oj06ODkwRldZbHNUPVNTf4Bwa1xTQD89Ozs5Ojo7Ozw8PDw8PTQ1NTU0NDQ0Mj2Fj5OXmJykpZN9cmxeUkNAPTs8PT08Ojo6Ojo6Ojo7Ozs7Ozs7OzY2NjU0NDQ1NjY3PpyptLzIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxauvr6SXjYV6fHdvaWRhXVtaWFZVU1JPTkhGREE/PDs6NjQ8S1VZXmRsbnR1goeLio+Sk5OSkY2IgIF0fXRqYVdVUExJR0RCQkFAPj09PkBBPj49PT09Pj48PDw8PD0+Pz9DREhJRUhSZmtwW0pKSEdENkxGPkBCPkJCQkRFSElKSkxOUFJUV1hkZ21zeX+EiJCMm5acn6KllZudnZ2XjIGDf3p1dHFubGlpaWlpaWlpaWlpaWlpaWltb3J1eX6Dh4yXnpqsq7fGzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1Mq3u7WjmZiRhoN/eXJvbGlnZmNgXl1bWFVUU1BMSUZEQkRBQD8+Rl10bXF3eYaLj4+PkZKRkZCMh4eHfHNsZWFYXllTUU5KSUlJSUdGRkdJSUhISEhHR0dHRENDREVGR0hHSUhKUlNXYnVXTEhHT1FTV0VNSENJTkhHSEpKTU5QUVRXWlxeYWRmaW1zeH2Ch4uVmpmcp6iqq6eop6ajnZWSiYaBgH58enh2dnZ2dnZ2dnV1dXV1dXV1eHp7fX+DiY2NlqKmqK67xtHX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQy8e5qaaqoI+Tj4qEgX15d3d0cXBvbWpoYWBdWldVU1JRTkpHRkVHS1l0jY2OhouMj5CRkI+OioaCgn9xcmtsY2FdWVdUUU9QTk5NTU1NTk5NTk5OTUxLSkpKSkpLTU9QT1NVXm1oU0RNR05ZWVVVVldJT1FTVVlLWltcXFxdX2FkZ2psbW9ydXd7gYWJjpOXnaKora6xs7exsLCtqqWfnJ2ZlZGPjYqHhoaGhoaGhoaGhoaGhoaGhoKEh4mLj5SYl6GssbO5xtDW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1dPOwLGus6+km5iUkY+Lh4SCf3x5eHVxbmxraGRgXVtaW1taVlRWVFFTXGFje5CblJCSkpGQj4uGgoGEdHdsbWFrZ2JgXVlVVlVWV1dXV1ZVVFVVVVRTUVBUVFRUVVdZWm5xZVFKT1NWUVhYWVpZWVdkVVZZXWBnWGBhY2VkZmlsbHB0dnh7f4KFiY6TlpugpKelrbWzvbu9uru3s6+tqaWmop6cmpiTkZGRkZGRkZGRkpKSkpKSkpKSlZiZmp2hpaWsuLnCxNLa2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOVqKyfmZOHgYV/eXZzbmloaWZiX11dXFpcW1tbW1xeX1xcWVZZX2BeY2JqdHZrWVBSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsbHt+eoCKmqqjmY6IhYF9enVzcG9tbGtraGhqbG1tbGxtcXV3en97dmtiV1VXVVdZW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWx0dnVzc36Ngnt1d3+Fh4iSkJCRkIyLjo6Ni4mFf3dycG5nYV9hYl9jXVteX15cXFxcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHNwcW5sbWlpb3dzb3F2eXp6b21ucW9qaW1sbGxubmxmYmlraWdpa21qZGNiZGNdWFZZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357dnRwbG9va2pqamloaWpqa21rbG9tZ2ZpcG5sa2toZGFaXmJmaGloZGNfXVpWVFNUXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhH6Cgn5/fnl0a2tqZmNjZGVlY2NkYl5cXmZjYV9eXVtZVldYWlxfYWJaWlpcXV1eX2VmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiNjYqEgoGAf3Z2c25ramppaWdmZWRiYWFgYF9fX2BgYF9gYWJhYGBfZGRkZmdqbG5wcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWkY6Mi4iFgoB/f316eHh1cXBvbWtra2poampramppaWhtbWtsbW1ub3FxcXR1eHl5eXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/b19fXz8O/s6+7u7ezr7O3u6vDt8O3w7fTy8/T09fX19fX19fT08/Ly8vDu7e3t6ujm5eTj4uHg4N7e3dzb29ra3t7e3N3d3dzd3d3c3Nzc3ODd3eLg3+Lg6OTn5ebo6+jq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vPx8O/v8fHt6+nq7e3q5+3t6O3t8u7v8PDx8vLz8/Ly8vLy8fDw7+zs7e3r6ejn5OPi4d/e3dzb29ra2djX19LS0dHS09TU1dbW1tfY19jd29vd3N7h4d3c4OHi5Ofm5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vHx7u3s7Ovs6uno6Ojp6urr6+jr5+vq6uzs7e7v7+/v7+/v7u7t7Ovo5+fn5uHg4dzc2tnX1dTU1NPT0tHQz8/Pzs3MzM3Oz9HR0NDQ0M/P1dbV1dbX2NrZ293e3N7h4eLk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/t7Ovs6unn5+Pi4ODh4eLi39/j5OLl6Ono6err6+zs7Ozs7Ovr6uno6+Xi4uHc297Y2NfW1NPS0tDQ0M/Pzs7O0M/OzcvMzMzKy8vMzc3OzsrMz83S1NHT1dnX29fa3N7e3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6efl4+Ti397h3t3d39/b19/d3+Di4+Pg5eXm5+jp6enp6eno6Ofm5ePUxcG7sa2vra2traysq6uqqqqrrKytramqrK6wsbGxtLa5vsHFysvRzs/MztDLzc7TztnX19fZ2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4+Hh4ODf29zc2dbX3ODU2Nza3dre4uDh4uPk5eXl5OTk5OPj4uHj0MLCwbm4vLu7u7u8vLy8vb6/wMHCw8PGxsXFwr+8uru6uLa0s7GwsaWmpKSqqKutsrDK0NLR09TV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efl4+Lh4d7a2NTV0ci8t73D09fX0dzZ2t7b29ze39/g4N/f39/e3d3c28q/w8O8vMS/v8DAwcHCwsXGxsfIycrKz8/Q0dHQ0NHR0dDOzMrJybWfnpqUl5OUi46Ms8PJyc7Oz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl4d/b19DGvLOvrKuutbe0sKeinKLJ09HO19fY2tvc3Nzb3Nvb29rZ2NXGv8XEvLzGvb29vr6/v7/DxMTFxsbHx8vMzM3Nzc7Ozc3NzMvMzMyqkZSWkpeWl5eWjbTDxsPIycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PLs7e3q6ubk3s7Etq+vsbKxsbS3s6mdjoJ/gX1+ts7HzdDS09XV1dfX2NjY2NfV1NPPxsPAwL3Bu76/wMDAwMHCxMTFxsnKy8vNzs/Pz8/Pz9DMz8rNy87KoJaTlpWVlpaVjYukwr3Bw8LCxcfGyc7Nz9HR0tDS1Nfd29vf4uXk5enr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx8ezr6uHTwK2zsbCxs7SzsrewnoVxa290en6GgpTMw8jJyszO0NLT1NHR0dHQzs3MzcLCwMC9wbq+v8DAwMDBwsTExcbIycrLzc7Pz8/Pz8/PzM/KzczOx5yVk5aVlZaVlIyJpLm1vLa5u8PN0NDLw7+9ubSxsLK01NXg3tri5evn6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7/Du8OG/sLKysrO0tbSzsrO0lXNlZ2xxd3x8hYSBzMDBxsfIycvMzMzLzMzLysnHxsq+wsC/vcC7vr/AwMDAwcLDxMXGyMnKys3Oz8/Pz8/Pz8zOzM3NzcCWk5SVlZWVk5OLiKGsqLGntLi/vrStraytrq2urq+xsrC22d3Z4+Di5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7q5ufXsa23t7OzsrGvrrCyq4lqaW9qaXN7e3+Fgbe5ub29vsDDw8TExsbGxsXDwsHLvcLAv7u/u76/wMDAwMHCw8PExcjJysrNzs/Pz8/Pz8/Mzs3Nzcy3kZOUlZSVlJKPjIigqKKtqqiuur22sbCura6ur7CwsLCvqdHV1OHc3+Lk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t6uPg0aqss6iop6enqKWjop+Kc2xtampydXt/hIKQuLG4uLq7vL2+vb6+vr69vLq5z77CwLy8v7u+v8DAwMDBwsPDxMXIycrKzc7Pz8/Pz8/PzM7Nzc3KrZCUlpSUlZOQjoyFmaCan6eirru7r6issbCwr7CvsLCwrZ7Izc/b2d/f4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt6+nm4s+hoqqmpqSioqGgnpyjmX5qbHVzb3d5fX+Eg8GrsLK0tba1t7i4uLi4t7W0s9S+w768vL+7vr/AwMDAwcLDxMXGyMnKys3Oz8/Pz8/PzszOzczNyKOQlZWUlJSRj4yMhZKboJ6qx765tbCwsq+wsrS0s6+rqY2JvsnQ1dPY3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onn4d7VqaeopKelo6Gio6OimpyIbWhxdXZ8eXt+iYi4qaaprK2trbCysrKysrGvrq3WvcG+vL2+u76/wMDAwMHCxMTFxsjJysvNzs/Pz8/Pz87Mzs3LzMaak5aVk5SSj46MiIiQn7u5vrSysbKwsrKwrq6tp56UjIiGirzEzdHS1Nnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero6uDZ06ukp6mjpKSkop+enp6fjXNoZ2x1en5/gYiGn6u1t7e0rampqqqrq6qpqKal1bvAvby9vrq+v8DAwMDBwsTExcbJysvLzc7Pz8/Pz8/OzM3Ny8vFlpWWlJOVko2OjoaJjZzIxL/Bvr6/vLeyqqGel46FgH+AhJC8wM3Q0cvW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5eDg1M+3qKqpp6akoqKhoJ6coJaJjIuTlKSlp6qtsbO0sbKytbe8vsDKzc/OysTBwL69urazs7a4urq7u7y9vr6+v8DCxMXIyMrMz9DQz9DQzc7KzcvQuZOUlJSTkY+Ni46FhY7BysbHx8jIysjJqJGQkY6Ffn6ChX+ftr6/xcnL0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Tf3tXPvKisqqimpKOioaCfn52ersvPzsnFxMTCwL69vLi2tbSysa+vqqysrKurrK63trSysbGysrOzs7S0tbW1tbW2tre4ubm7v8PGyc3Q0s7Py87MzK+QlZWVlJKQjYuHiYOIvMfGyMfIysnJyKORkJGOhX9+g4aBqLO6u8LGyc/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj39rXzsKorauop6ako6KhoJ+ZmrPT0s/Ozs7PztDR09PV1tbX19bV1NHPzMjEwsC/v728ube2tLO2trW1tbS0tLOys7KysrGxsbKztbe5vL7Rz8zLzMmlkpSUlJSSkI6MgIZ9jMLHxcfHx8vIy8abkZGSjIV+f4OGg7SvtbW+wcfMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4t7X18zFqKyqqaimpaSjoqGfmpqxz83O1c3Nzs/S1dja4eTo7fH19fb49vLv6+Xh3tDNycbEwLy5t7a1tLOysbGvr66urKurqqqpqKelpKSlys3LyszEnZKUlJORj4yKiIF/eJnKxcXGyMfNx8zBlJKQkYyEf3+EhoS6qbCxu73EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Dd1dXJxampqKqopqakpKOjoZyasNLQy8rOzc7O0NPV2N/i5enu8vT29fTz8O7r5uHY1M7Lx8S/u7i3trSzsbCwrKysq6mpqKempaWlpKOiocjPzcvMwJuWmZudn6CioqKel5OvycLHxcnHzcjMuZCSkZGMhH+AhYeGuKSsrre6wcbKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf29TRyMOsp6iqqKempaSko52cm67S1M7Ly8zMzdHV19ri4+bq7vL29/b18e3q5+He2NTOysXCvry6ubi2tLOysa6ura2sq6uqqKiop6elo6LAy8bHzMq8vrq6ube0srCvsbO3w8fFysLJyMzJy6+Pk5KSi4R/gYWHia2fqKuzuL7EyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3tnUzse/saioqamnpqSlpKOfoZ2sy83Lzs3NzM/R1NfY3d7j6e3z9ff19PHt6eXi39jUz8rGw7+9uLe2tbOysbCurq2trKuqqauqqainpaOgxNXJx8jJyszHxsXDwL68u7K4vsTFyMjEysnKy8mmkZSTkYuDf4GFh4ygmqSorba7wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3Y1M3GvbSoqqqpp6alpaSjoJ+aq8/RzdDOzs7R09XY2dve4ujr7/Hx8/Px7+vn4uDY1tDMx8O/vbm5uLa1tLOyr6+vrq2srKuop6enqKelpLbQyMrKyMrFysrJysrKycnGxMHCx8fCx8rJyc3HoJOVkpGLg3+BhoiQmJihpKm0uL/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c29XKxbi5o62pqKmpqKalo6ShoazRztDMz87Nzc/S1tnd4OTp7PDz9PTz8O3p5eLf2NXQzMbCvry5uLa1tbSysbCvrq2trKuqqKiop6elo6Gz0czHx8jHyMvMzMvKyMjJzMjEw8TGxsXJysjNxZiVkZOTjYN/hIiJnIuTnaOntba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29rRysW8waatqqmopqWko6Ohnp+qzs3Qzc/Ozc3P0tbZ3eDj5+zw8vT08u/s6eXh39fU0MzGwr68ubi2tbW0srGwr66trayrqqmoqKenpaOhsdDMyMfIyMnKysrKysnJyszJxsXFxsfGysjJzr+WlZKTkoyDf4SHiKWIj5mfpbCzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vXzsrDvsWnqaimpqSkoqKioqKjrs3Mz87Pzs3Nz9LW2N3e4+fs7/Ly8/Hv7Onl4d7X1M/LxsK+vLm4t7a1tLKxsK+ura2sq6upqainp6akoqvNy8jHycrLy8vLysjHyMnKyMXFxsjIyMrHys+2lJWTk5KKgoGFhoayhoyWnKOrsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b1cvKwLvCpqeop6ipqamop6usrLXNzc7N0M7Nzc/S1tjb3uLn6+7w8fLw7uvn5N/d1tPPysbCvr26uLe2tbSysbCwr66trKurqqmoqKempKKqzM7NycvNzszMy8nIyMjJycfFxMXGx8fKxs3QrpOVlJSQiYOBhYaGvIaKlJujqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tLMyr+5vKmsrq+wsLCxsbGytLO8zs7PzdDPzc3P0tbY297h5ent7/Dx8O3q5+Lf3NXTzsrGwr69urm3trW0s7GwsK+urayrq6uqqKinpqWjqMrOzsnKzMvMzMvKyMjKy8jHxcXGxsXFysfPz6aWlpWUj4iDg4aHhrmEiJGZoqextb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trSzsrBubexsrS0s7Ozs7S1tLa0vcvOz8zQz83Nz9LV2Nvc4eTp6+7u8e7s6Obi3tvV0s7KxcK+vLq5t7a1tLOysLCvrq6trKurqqmop6elpKLEy8zIyszKzMvKyMXExMTBwcLDxMbHx8jIzsuemZWVlI+Ig4SHiYmngIaOl5+lrrS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493Z0tHIwbqytbO0tbe4uLe2tbK1s77Kz9DN0M/Nzc/S1dfa3N/k6Ovt7u/u7Ojl4d3a1NLOyMXBvry6ube2trWzsrGwr66urayrrKqpqKinpaSgwsnMyMrLx8XFxMC9u7q5t7i7vcDCxcbHyczEl5uVlZOPh4SEhoqMkH6FjJacpayzu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2dTRxMK5rLSxtLe8wMG/u7iztrO+ytDQzdHPzc3P0dXX2dzf5Ofq7O3v7uzo5OHd2tTSzcjFwb28urm3tra1s7KxsK+urq2sq6yrqaiop6alnbzCxL29vLe3uLi3trW1tbS1t7m5ury9xsrKvpKclJWUjoiEg4eLjoN9hYuXnKers7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTzMe/uq/Dq7S3usHHysvKxsTDxsvPz83Nzc7O0NHU1dnb3uLm6Orr6uro5ePe29nT0MzJxsO/vLu6uLe2tbOysrCwr6+uraysrKyrqqmop6Kgnp+bl5yjpaerr7Kzsa+ytbe2tre2tLi2r6ObmJmalo6Bh4KLiZ1ze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1M3HwLuwway0t7rBx8rLyszKycrOz87Nzc3OztDR1NXZ2t7i5ejp6+rq5+Xi3tvZ09DMycbDv7y7uri3trW0srKxsK+vrq6srKysq6qpqKeil4qCeXV3fISHjZWcoaOkrq+vrKmkn5qUl5iXlpeZmZSLg4WCiYWicnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTNyL+7sr6utbe6wcfKzMvPzs3Nz8/OzM7Nzs7Q0dTU2drd4eXn6enq6efl4d7a2NPQzMnGw7+8u7q4t7a1tLOysbCwr66uraysrKuqqainpZmMg3x2dHR3eX6FjJGTlZaWlZKSk5OSkZWYmJmZmJWUi4SFhYiFsHF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzci/u7K5r7W3ur/GyszMzM3Nzs7Ozc3Ozc7O0NHT1Nja3eDj5ujo6ejm4+Dd2djSz8vJxcO/vLu6uLe3trSzsrGxsLCvrq2trKyrqqmop6KcmJqbmZeXmpmYl5eWlJOXlpSTlJeZm5eYmZiZmpaUlYuGhIeJiLxxeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083Hv7uysrC1trm/xsnLzMzNzs7Ozs7Ozs7OztDR09TX2Nzg4+Xm5+fn5ePg29nW0s/LycXDv7y7ubi3t7a1tLOysbCwr6+ura2srKupqKiqpaKgn56en5mYmJmampmZlZWWl5eWlJSUlZWUlpiXlZSKhoSJioq3cHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POx7+7tK6ytba5vsTJzMzPz9DPz87Ozs7Ozs7Q0dPU19jb3uLk5eXn5uTi3tvX1dHOy8jFw7+8u7m4t7e2tbSzsrKxsLCvrq2trKyrqqioo6Ggn56en6CdnJybm5qZmJWUlZeWlpaXl5iZmJqbmJaSiIaGiYiJoHB5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vUz8nAvbass7W2ub3EyczN0NDPz8/Pzs7Pzs/O0NHT09bY297g4+Xl5uXk4d7a19XRzsrIxcO/vLu5uLi3t7W0tLKysbGwr66tra2sq6qpqKOjoaKhoJ2cnJubmpubmpmZlpOTk5OWmZSWmJmbnJuXkYiFiImJjIpweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b1dHKwb63q7a2trm8xMnMzc/Ozc3Oz8/Oz87PztDR09PW2Nve4OPk5Obl4+Dd2tbV0c7KyMXDv7y7ubi4t7e2tbSzsrGxsLCura2trKuqqaikop+eoKCfnZuamZmYmJaVlpSVl5eWlpiUl5mZmZqZl5KJhYqJi5F/cHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dXQzcPAtqu/srW3usDHy8zMzM7Oz8/Ozc/P0NDQ0NHR1dbZ3N7h4uPi4eHf29jV087NysjFw8C/vLu6urq5uLe1s7KxsbCura6urq2sq6qppaOhoKCfnp2dnJybmpmZmJeXl5eXmJmZmZmZm5uamZeShYaGjY2ZbnJ7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3X0c3DwbesvrK1t7rAx8vMzc3Ozs/Pzs7Pz9DQ0NDR0dXW2Nve4eHj4uHg39vY1dLOzcrIxcPAv7y7u7q6ubi3tbSysbGwr62urq6trKuqqaWjoaCgn56dnZycm5qZmZmXl5eXl5iZmZmampubm5mXkISGiIyLoWlye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He2NLOxcC4r7yxtLe6wMjLy83Nz87Pz87Oz8/Q0NDQ0dHV1tjb3d/h4eHh4N7b2NTSzs3KyMXDwL+8vLu6urm4t7W0srKxsK+urq6urayrqamlo6KgoKCfnp2dnJuampmZl5eXl5iYmZmampqcnJuZl4+Eh4iKirBoc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnTz8bAubC4sbO2usDIy8vNzc/Pz8/Ozs/P0NDQ0NHR1NXY2tze4ODh397d2tbU0c7NysjFw8C/vby7u7q5ube1tLOysrGvrq+urq2sq6mppaOioaCgn56dnZycm5qamZiYl5iYmZmampqbnJubmZeRhoiKioy+bHR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1M7HwbiytLK0trm/x8vMzc3Pz8/Pzs7Pz9DQ0NDR0dPU1tnb3d7f39/e3NjW0s/OzcrIxcPAv728u7u6urm3trWzsrKxsK+vr66trKqpqKWjoqGhoJ+fnp2dnJubmpqYmJiYmJmampuam5ycm5iXjoaIioqNuW12foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg2tTOycG5s6+0tba4vsbKy83Nz8/Qz87Oz8/Q0NDQ0dHT1NbY2tzd3d7e3dvY1dDPzczKyMXDwcC9vLu7u7q5uLa1tLOysrCvr6+urayqqailo6KhoaGgn56enZ2cm5qamZiYmJmZmpuam5ydnJuYloyFiYuLjaRrd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4drV0MvDu7WstLa2t73FysvNzc/P0NDOzs/P0NDQ0NHR0tPV2Nrb3d3e3dza19TQzs3MysjFw8HAvby7u7u6ubi3tbSzs7Kwr6+vrq2sqqmopaOioaGhoJ+enp6dnJubmpmZmZmZmpqbmpudnZ2bmJaLhoqLjI6ObHiAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHb1tHNw7y2rLW2tre9xMrLzs3Pz9DQz8/Pz9DQ0NDR0dLT1dfY29zc3dzb2tbT0M7NzMrIxcPBwL28vLu7urm4t7a0s7Oysa+vr66trKqpqKSjoqGhoaCgn56enZybm5qZmZmZmZqbm5qbnZydm5iWjIeLio2Rg3J4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6+/sba6uMLJyc3Oz9DP0M/Pz8/Q0NDQ0dHS1NXX2drb29vb29nX1NLRzMvKycbEwsG9vLu7urq5t7i3tbS0s7Gwr66srKurqailpKOioaGgoJ+enZ2dnJqZmZmZmZqbm5yfnZycnZyZloqJho2OmHJweYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrewvrG2urjCycrNzs/Qz9DPz8/P0NDQ0NHR0tTV19jZ29vb29rZ19TS0MzLysnGxMLBvr27u7q6ube4t7W0tLOxsK+urKyrq6mopaSjoqGhoaGfnp6dnZyamZqamZmam5ucnp2cnJ2cmJaIiomPip9scXqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5sbqxtbm5wcnKzc7P0NDQz8/Pz9DQ0NDR0dLT1dfX2dra2tnZ2NbT0M/My8rJxsTCwb69vLu7urm3uLe1tLSzsbCvrqysq6upqKWko6KioaGhoJ+enp2cm5mampmampubnJ6enZ2enJiWiYqKj4quaXN8hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurK2sra5ucDHy83Oz9DQ0c/Pz8/Q0NDQ0dHS09TW19jY2dnZ2NfV0tDOzMvKycbEwsG/vr28vLu6uLi3tbS0s7Gwr66srKurqailpaSjoqGhoaCfnp6enZuampqZmpucnJyenp2dnZuYlIuKiJCOvmx3fYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry0s7S1ubm+xsrOz8/Q0NHQ0NDQ0dHR0dLS0dLT1dbX2NjY2NjW1NLQzszLysnGxMLBwL+9vLy7ubi5uLa1tbSysa+urKyrq6mopqWko6KioqKgoJ+enp2bmpubmpqbnJydnp6enp6cl5OLi4mQj7tueX+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9tq+2t7i6vcXKzs/Q0NDR0NDQ0NHR0dHS0tHR09XV1tfX19fW1dTRzs3My8rJxsTCwcC/vr28u7m4ubi2tbW0srGvrqysq6upqKampaSjoqKioaCfn56enJqbm5qbnJ2dnZ6enp6enJaSioyOkY2obnqBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7ett7e4urvDyM7P0NHQ0dDQ0NDR0dHR0tLR0dPU1dbW19bW1tXT0M7NzMvKycbEwsHBv769vLu5uLm4trW1tLKxr66srKurqaimpqWko6KioqGgn5+fnpybm5uam5ydnZ2enp+fn5yWkouLkJGPlXN7g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4rLi3uLq6wsjOz9DR0NHQ0NDQ0dHR0dLS0dHT09XW1dbW1tbV0tDOzczLysnGxMLBwcC+vby7ubi5uLa1tbSysa+urKyrq6mop6alpKOjoqKhoKCfn56cm5ubm5ucnZ2enp6fn5+clpGNi46Qk495fYWOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7K+tLW7vb/Kzs3P0NLS0tLS0tLS0tLS0tPT1NTU1NXV1dXW1dLQz87Ny8rIx8bEwsHAvr28u7q4uLe2trW0srGvrq2srKyrqqempqWlpKSjoaGgn5+enZ2bm5ycnJ2en6Ggn6CgnJaRjIuNi5p6d36JkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw722vbK2u7y/yM7Oz9DS0tLS0tLS0tLS0tLT09TU1NTV1dXV1tXS0M/OzcvKycjGxMLAv769vLu5uLi3tra1tLKxr66tra2sq6qnpqalpaSkpKGhoKCfnp2dnJycnJydnp+hoaChoZyWjoeOi42jdX6Ai5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/u7uyubq8v8XNztDQ0tLS0tLS0tLT0tLS09PU1NTU1dXV1dXU0tDPzszLysnIxsTCwL++vby7ube4t7a1tbSysa+ura2trKuqp6empqWlpKSioaGgn56enpycnJ2dnp+foaGhoqGdlI2KkIyOsG59iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbu3s7y5u77DzM7P0dLS0tLS0tLS09PS0tPT1NTU1NXV1NTV1NHPz83My8rJyMbEwr++vr29u7i2uLe2tbW0srCwr62trayrqqenp6alpaSkoqKhoaCfnp6dnZ2dnZ6foKGgoaOinZSOjo+Mi659fomQmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO6tra8trm8w8zNztHS09LR09PS0tPT09PU1NTU1NTU1NPT1NPRz87Ny8vKycjGw8G/v76+vbu5t7i3trW1tLKwsK+ura2tq6qoqKenpqWlpaOjoqGgoJ+fnZ2dnp6foKCioaChoJyVjo+JipOrd4+Hk5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFu7e1ubW5usHKzM7S09PS0dPT09LT09PT1NTV1NTT1NTT09TT0c/OzcvKycnHxcLAv7++vby7ube3t7W1tLOysLCvrq2trayrqKinp6ampaWjo6OioaCgn56enp6en6Cho6OhoqCclI6IkZSqeoSGkJefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx8G7tbSzuri/yczP0dPT0tLT09PT09PT09TU1dTU09TU0tLT09HPzs3KycnIx8XBv8C+vby8urm3t7a1tbSzsbCwr66tra2sq6ioqKenpqalpKSjoqGhoKCenp6fn6ChoaSjoqOhm5KLkYm3enmCjJKaoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnGv7Ovsr22vcnMz9HT09LS09PT09PT09PU1NXU1NPU1NLS09PQz87NycnIyMfEwb/Avr28u7q5t7e2tbW0s7GwsK+urq6trKupqKinp6ampaSko6KioaCgnp+fn5+goaKlpKSloZuRiZ2fdXuBiI2anKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxL65s6ijrLzCyM3P1NTQ2tTV09HSztLM1NPT0tLS09PR0dHS0M7Ny8bGxcXFw8DAwL27u7u6uLa6ube2tbSysK+tq6urq6qpqqqpqKampqakp6impKSjoJqinqGeoZ+lqqmjnpyVpaFtc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzsnCu7ivo52dnrzOy8zS0NLQ1NjU1tXU09XU09PT09PT0dHR0M7LycfIx8fHx8XEwsLAv76/v727urm4t7e2tLOzsrCwsLCwr6uqqqmopqWkpKWkoqCfnpyfn6CknKKlopuemLDFkGprcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHLxL27tq2hm5WQkJ/B2NLM0dPTztTb09bU09PS0tHR0M7Ozs3Ny8rJyMfHxsXEwsHBv769vb27ubm5uLi4t7a0sbCvrq6urq2qqqqqqainpqSkpKKhoqKhop6aoqGcnKuzxZRbX2Rpb3Z8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djUzsrDvrexqaWblJGMhYCJo87T2c/N0s/Z0dLT09HPz87Nzc7OzczLy8bFxcTDwsC+vLu6ubq6uLe1tLOzs7OxsLCvrq2srKurq6urqamoqKeoqKimpKSioZyZoqaxzbFvVllcZGdjb3p7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1s3Mx8C6s6yno5mRi4mGfX90am6DrsnPwMbJzdDR0M7Pz8/Pzs3My8rIx8bGxMK/vry8u7u7u7q5t7a1tbW0srGysbCvrq2trampqKenp6ioqKioqKWjoaG2vJVXSk5JUFhYXmdmcXt0gIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnSzcfCvrqzrqShnZWQjX94d3BqYWNuqaewt7/GysvKy8zMy8vLysnJysrJyMfFwsC8vb29vby6urm4t7e3trSzsLCvrq2srK2kpaWmqKmqrKytrKuln56fj0g7SUhIVFZaYmJqb3Z8iIWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b3NXMx8O+uLStpaCZkoyEhHp3dGxjXa+dn6e0vsPFxsfExMTExMTExcPCwsPDwcC/u7u8vby6ubi2tbW1tbWzsrCxsbGwsLGzuLq7vL2+vby1tLStopiVl2pBQ0pMT1daXWhob3eAfoeLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dfU0M3Hv7m4sKejnpqXjouIf3h2cmO/lpuksbzDxcbFwMDAv7++vr26urq7u7u5uLu8vLy7urm4urm5uru7urm4ubq6uru9v8HBwL68uLOwr66tqJ6WlZlYQUtPVVdcY2hqb3ZxgYiOkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQioJ9enJwqZ2goqq5w8PJy8rKycjIyMjIwsPDw8LBwMC9vr6+vr69vb29vLu7urq6wcHBwsTGx8jIx8XBvLe0sq+xrKSbmY6tRUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlZCHgn93cpibn6KpuMDCx8nJycjHyMfIycbGxsXFxMPDxsbGxsbFxcTCwsC/vr6+vr2+v8DCxMbHycjFwby4tLOzsq2kmZiZu0hMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuZjYmFf3eAn5+iqLa/wMXGx8jIx8fHyMnKycnJx8fHx8vLy8vKysnIxcTDwsDAv7+7vb/Bw8bIysrIxsK9uLWzs7CspZmVmatNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKain5ORioV+da6eoqayvsDDxcbHyMjIx8nKysrJyMjIyMjJycnJyMfGxcTEwcC/vr6+v7/Bw8bJy83Ly8jDvbm2tLKvqqOal5aEUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqKOZl4+KhXe8mqKlsb/BxcXGx8jIycnJysjIx8fGxsfHxsbFxcTEw8LDwsHAv769vcDBwsXHys3NzczJxL65trWzsaufmpuea1NXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6on56Uj4uBvZqipbG/wcXFxsfHx8nJycjGxsXFxcXFxMfHx8fGxcXExMPCwcDAv7+/wcLEx8rLzs/NycW/u7e1sLSvn5eapVtXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezrqakmpWPiq6aoqSvvcHDw8bFxcbIycfGxcbGxsbFxMTHx8fHx8bGxcXEw8LCwMDAwMHDxcjKzM7QzsrFv7u3tq2yrqCXmapTW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t7OrqZ6Zko2fmqOkrr3AwcHGxMPFyMjGxMfHx8fHx8bFxcbGxsbFxcXDw8LBwMDAwMDAw8XIy87P0M7KxcC7uLazsKqcl5uzV15iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u3sqqloJeUmZ6coqe7vb/Fw8PDw8TExcXExMPCw8PDw8PExcXExMPExMPDwsLBwcC/wcLFyc3Q0dHPzMfAu7i2sbapm5mYv1xgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/uLStp6KZk5Wimp6lt7u8wr+/wMDAwMHBwcHBwMDBwcHCw8TEw8LCw8LCwsDAv7+/wMHCxsrN0NHR0MzHwLu4trG1qZqXlq9aY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7q4saqlnJSQqJeaobK3ur28vLy8vb29vb69vby9vb29v8DBwcHBwMHBwcDAv7++vsDBxMbKzdDR0tHNyMG8uLays6iZmJeZXWdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS9u7SspqCWj6uWl56ssre3uLi4t7e3t7e3t7a2t7e3t7m6u7y8vL2+vr6+vr+/vr7AwcPGys3P0dPRzsjBvLm3srGompqbhGNqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGv7y1rKahmZCqlZWaqK6ysrKysbGxsbGws7OysrOzs7O1tre4uLm6u72+vb2+vr6+vsDBxMjLz9HT0c7Jwr25t7KxppqaoXJmbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx7+6tKykoJmQoJGTlaKnq6ytraysraysrK6urq2trq6usLGys7S0tre4ubm6ubq7u7y9v8PHy87Q0tDNyMK9urizsaOZmqZlZm52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa+t7GqopyWj5KMj46coaOmp6ampqWlpqWmpaWmpqanqKmqq6ytrrCys7O0tbW1tra6u73BxsvO0NHPzcjCvbq4srOgmpusYmhxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDvLWwqqCZk42JiY2LmJydoZ2dnZydnJycnp6enZ6fn6CioqSkpaepq62ur7CxsrKzuLm8wMbKzdDQz8zIwb26ubK0n5uctGNsdHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jk39vY0s/Gu7ewqKGbk42Ig4iCf42ZmpmYlpOSlJSTkZOUlZaVlZWVlZqfnZudoaShp6qpqq2vr7O1uLzBxsrMz8/Mx8C7uLeyrKSZlLtmb3V+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn3t7c1crEvre3r6ehm5KIg3yDf3uFjpKTkI2Li4uMi4mJiYqLjI6QkZOQj5WZm5uao56fpaemqa6xsra6wMXJzM7Oy8a/ure3squimpm9aW93gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497a1MzFv7avsKedl5OLg39yenp0d3t9goSDgoODgoF/f3+BgYSEhoaHhoiPkpCSmZeZnJ+go6Wmq66xtrzCx8nNzcrFvrm2trSroJuas2xweoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7X1dDLwruyqqegmJKKgHp2fIqYpbTEz9fOzczNzczKyMzJxb20qqGcjoV+fICEiIyNlJiYl5udnqOlqrC3vcPGysvJxL65trWzraGZlp9rc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY18/Evbq0qqWalI2Nlae/0dDU1NHRzs3Nzs7NzM3NysnExcfIx8bEw7+/uaiZjYaCiYOFi46Nkpqbn6Wrs7nAxMjIx8O9uLe2sqygmZeSbHV9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cbDvbewpZ+eoa7E1tvY09HU0c7Nzc3MzMnJycnIx8bGxsbGxMPCwcG/wb++v7yunYV/fYKJi4+SlZigp621vcHFxMTAu7i2trKrnJyejXF1foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe/vrWooqW2ytvY1tXT0dLU1NHOzs7My8vJycnIx8fGxsXFw8PCwsHCvr67t7a3trK6rJaBeHyDiIuRmJ+mr7a7v8DAvbm2tbSyqpucoINydn+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/ua+lrsTU2d3S0NDS09HOzsvJycvLx8XFxcXDwsHBwcK+v7+/vr69vL++vb26uLe4tbOzr5+Ifn+EipGYoKmxtry+vru3tLOzsaudm5t5b3eBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTf29LMycK4sKi3ytjb2tfX1dPT0M/OzMvKyMXFxMPCwsLBwcC/v76+vb28vLy8vLy6urm4t7W0srOxrquurJZ3foCKk5egrbG3urq2s6+sr6ypmpmhcXR8g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd1c/OyryxsLLP1dvd2dXS0tLSz87Ny8jIx8XCwsHBv76+vr29u7u6urm5ubm5ubm5uLi3trW0srKur6+rqa2uqY19fIWPmKKosbW1s7Gtqq6rqJqZonF0fIOMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1MzMxLqzr7vS19jY1dPQ0tLPzcvKyMbEw8G/vry8urm6uLi3t7a2tbW0tLS0tLS0tLS0tLOysbGwsq6qqKWkp6qbmYh+h5WfoKqtr62sqqmtqaaamaNwdHyEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083Jwbmvssve29bW1dPT0dDQy8jGxcPBvr27ubi3tra0s7GxsrGwsK+vr6+vr6+wsLCwsLCwsLCvr7KsqqqppZ+bn6SZhX+KlJyip6mnqKemqqWjmpekb3R7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGu7WtutPd2djY1tbV09DMycbEwb+8uri2tLOxsK6vra2qqqqqqKioqKioqKipqampq6usq62trKypq6yqqKSioZ6cl5OLgIeYm6Gio6SjpKijn5iWpW10fIWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3EvrCswNre1dPX09HQz83Kx8S/vLq3tbOvrauqqKempqWkoqGhoaGgoKCgoaGhoqKioqOkpqenqKioo6mopaWkop+fmZWVlIqEjJSZnJ2fn6CkoZyWlKRrc3yFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurOuytrZ1dTU19DPzcrHw767t7Syr6ypp6WioZ+enZycm5mZmJiXl5eXmJmZmZqampudnZ+goaGio6KjoaKnp6CcmpiVkIyPi36LkJSVmZucoZ6ZlZKkaXN8hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKszdTY1dPW1MzLycjFwLu3tLGvrammpKCfnZqZl5eWlJOSkpKSkpGRkZKTk5OUlJWVl5iZmp2dnp6iop6doJ6amZeUlJGMi4yHhIqOkZaWmp+dmJOQo2hzfYSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+HX1czEwrCmzdfX1tXU0c7MyMXBvLizraunpaOfm5iXlpGQkI+Ojo6OjIyMjIyMjIyKi4uMjY2OjpCQkZOVlpiYmZqbnZycnJuWlJKPjIuHhn6Ah4+PlJKWmJKSi7Fncn6GkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u/u6+fk4uHg3NrW1dLRz87My8rJycnJycjKy8zMztDT1dbW2Nrf5Ojn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc1s3JurCwzNLV1dTT0c7Lx8LBu7axrailoJ2cmZWTkpGOjo6NjIyMi4uLi4uLi4uLioqLi4yMjY2NjY+QkZOTlZaXl5iamZmYlZSRjouJhoSCfIKEjIyPlZWQj4mvZnF9ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7p5uLi4uDa1dPRzsvKyMbEw8LCwMDAwMDDw8TExMbHyMjLztHU19jZ4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1s/Fv7SnytnU0tLR0M7JxcK6t7KuqaSfnJeWlZKQjo2NioqKiomJiYmIiIiIiIiIiImJiYqKioqKiouLjI6OkJCRkpOUlZWVlZSSj42Kh4SCgnp8eoKGiZKQiouHqmZwfIWPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn4d7c2NXSz9DGxMG/vby6ube2tbSzs7S0sLK0tri7vb/BwcHFys7R0tnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDJv7iqwdfR0NDQz83JxL67sq+ppaCcl5WSkZCPjY2LjIiIiIiIiIiIiIiIiIiIiIiKioqKioqKiomJiImLi4yMjY6PkJKSk5OTkY6LiIWCf356dnd4goSLjIiIhaZlb3uFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi39zZ1dLNx8PBwb66trGwr6+pqaeop6empqSlp6irra6vrLW+wsLBxcrQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLxbuqs9LSzNHQzszJxb+4tKqno56alpOQj4+NjYuMi4uIiIiIiIiIiYqKioqKioqKiYmJiYmJiYmHiIiJioqKioyMjY6PkJCQkY+MioeDf315fHZ0cHuDhIiFhIOjZG55g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnY0MfGxMC6t7Cvra6yucHFzs7Ozs3MysjMycS9tq+ppqioqq60usDCxMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbutr8vP0cvSy8vHw722sKukoZyZlZKPjYuLioqJiYqKiIiIiIiJiYmJiYmJiYmJiYqKiomJiYmJiYmJiomJiYqLi4yNjo6Pj46Oi4mGgn57e313b3BxgH2FgX5/m2FrdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSzsrEwLiurK67wszU19TPzMzMzc3LysfGxcTDwsC+vLu6sKSgpK61ubq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72xp8jQ0M7OzsjFwbu1rqejnZqWk5COjYuKiomIiYmJiYmJiYqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqKiomJi4uLjIyNjY2Ni4qIhoJ/e317dXJybHZ2fnp3eZRdaXN9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxsK6sq6vt8jX1dbU09DQz9DNzc3Ly8jHxsDAv7+/v728vLy7s6iioqaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3qb3Mz8vOzcvFwby3sKminZiWko+OjIqKioqJiIiIiYqKioqJiYmJiYiIiIiIiIiIh4eIiIiIiIiKioqJiYqKiYqKi4uLjI2Ni4qJiIWCfnx+enN6dGxpcHh1cnSQW2dxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb21rrDC1NvZ2NTV1dTR0M/RzMvKx8bFxMPEw8HCwsLAvrm1srO0sKegoaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHr5N/b0Me/rqjM0MrLx8jDwLy1r6mjnpqTkpCMioqIiIqKioqJiYmJiIiIiYmJiYqIiImJiomJiYqKiYmJiYmJioqKioqKioqKioqKioqKioqKiYeFgoB/fnl5fXlyXm9xcW1yhVJdZ3Z+iZOaoqyzub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PP08+/u6+rn5uno6Ofm5ubm5eXm5+bn5+fo6Onl4OHg2tXWzcXDv7evqsLX3NjW1NHV1NHOzczJyMjHxsTDwsLCwL++vby7urq3trW0sq+urKSfn6qztrm/x8zT2eDn6uvu8PP2+Pr7/P/+/Pv69/Pv6eLc08vCtKm60M7JycTFwr24saqloJqXkpCPjIqKiIiKioqKioqKioqKioqKioqKiYmKioqKiomIiYmJiYmJiYqKioqKioqKioqKioqKioqKiomHhYKAf317fXt9fGJqbG9rboJWYWpweISPl56lqbO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro5uXj4d/f3t3d3Nzc3OHh4uLi4uPj4d7f4N3c2NPOycXAuqypxNfd39rW19TR09DNzMvJyMbFxcPBwL+/vr28vLu6ubi4trW0s7Gurausp6Ken6eyur3DzNLW2+Ln6+3x9Pb5+/z+/Pv6+PXw7OXe2MzGuaquydDJycjBw8C3squkn5qUkZCPjIuKiYiJioqKioqKioqJiYmJiYmJiYmJiYmJiYmIh4eJiYmKioqKioqKioqKioqKioqKioqKiYqIhoWDgYB9gX97gYRqYWRqZ2h6Ul1kbnR8ho+YoKWss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6ePi397e3d3b1tXV1NTU1NTW1tbX2NnZ2djV1tfUz8zJwrq0s6620dfb2tfU09XT0M/NysjHxcPCwMC+vbu6urq5ubi4t7a2trW0s7KwrayrrqejoJuZoq6zvMXJzNPb4ubp7fH09/n7/vz6+ffz7eni2dPHwbOmvMnLx8jFv8C6sq2moJqWkY6MjIuKiImJiYmJioqKioqKiIiIiIiIiIiJiYmJiYmIiIiIiImKioqKioqKioqKioqKioqKioqKioqJiIaEhIKBfoWAf4OIeFlbYGBicE1XX2pweIGIkJmgpa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHe3NfV0tHR0M3MzMvLy8vLyMnKzM3OztDOz8/MxsPCwL6wray92d3c1NTW1dPQzcvLycbEw8C+vbu6uri3trW2tLS1s7OzsrKzsrGwrqyrqqSkpKSfmpqeqbK6v8XN1trh5Oru8fT3+f78+vj28evm39TOxburq8nFx8jGwr28ta2popuXlJCNioqKiIiIiYqJiYmJiYmJiYiIiIiIiIiIiIiIiIiIiIiJiYmJiYmKioqKioqKioqKioqKioqKioqKiYiGhYSDg4CGgIWEiYpaVFVVWWVFTllfaHR9g4iRl52krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dTRzczKx8bDw8LCwcHBwcTEwsPCwsLDwsbFwL29ubSsqK3K2tbZ1tXV09HNycfHxsPAvry6uLe1tLSysbGwsK+vr6+vr7Cwrq+urayrqqmko6Gfnp2bmKClrLS9xMvQ2+Dm6+7x9Pf9/Pr39O/o49vRyMCyprPKxMjIwry6t7KqpJ6YlJKPjIqJiYmIiIiIiYmJiYiIiIiIiIiHhoaGhYWFhYWFhoaHiIiIiIiIiYmKioqKioqKioqKioqKioqKiomIh4aFhYWFhYSKiIuVbFNVU1RfRUtTV19ocHV8ho2VmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0czLyMTBvbi1trW0tLOzsrO4uLm6u72+vrq8uLS1tKyknavP3dXW1dbRzsvIyMbEw768uba0s7CvraysqqmpqKioqKioqKmpqqioqamoqKenqqOdnJyamJeXmaCstbvDy9Ta4ebq7fL1/Pv49vLs5eDW0MS6q6q/xMTGxL+7trCupqCZk5GOjYuIiIiJiYiIiImJiYiIh4eGh4aFg4KBgH6AgICAgYGCg4OEhIWGh4iIioqKioqKioqKioqKioqKioqJiIeHhoaGiYSLjY6RmohGTk9PWERERVFWYGpxeX+CkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jDv7q2s7Kxr6uqqainpqampqanqaiqq6uuramoqKOeoLDW39bS0tTT0c7Jx8XDwLu2s7CtrKmnpqWko6KhoKCgoKCgoaKjo6OjpKOkpKSko6Whn5yalpKOj5CWoaqyvMfN09vi5urv8/v69/Xx6+Pe0tDBt6iwy8DCwb+8u7SqqqOdl5GOjIyKiIiJiYqIiIiJiYmIh4aGhoOCgX98enh4enp6ent8fX6AgIKDhYaHiIqKioqKioqKioqKioqKioqKiYiIh4eHh4yFkY2VmJqdYnqMnLm7w8LDxMfGwLSkmpCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9trOusLW+x83R0M/OzMzLy8nFv7evpqCcoJ+en5yVmqna2djU1tXPzs7NycK9vLm2r62qp6WkoKCenp6cm5uam5qampydnZ+fn5+goaGioqKgoZ+cmJOOi4aJjZOeq7e9x87X3+Tp7vP8+vfy7ung2dPBwK+hu8DBwr+8urawqqadmpOOjIuKiYqJiYmJioqKiIeHh4aFg4F/fXt6eHd1dHFwcHN0dHd7eXx/goOFhYaHiImJiYiJioqKioqKioqKiIiHh4iIiYmKjY+SlZibnqeqr7O3ur6/wcLDxMLBvrzAtqWVkJWirLC7vr/IztPf2uDf297d2djPz83Iw721rrS+zNXW1NLQ0M/OzcrKyMfHx8XDxsfAtaCVj5GLiKXT19bV0tHOy8nGwr24ta+sqqWjoJ2amZeUlJOTk5KSkZGSkpKRk5SVlpqbm52dnZ+enJuYlpOQioeDfnyAlaettcPK09ji6Ozv+vn18Ozn3tfOwLyrqL7Av8C/ure0rqijnJeSjYuKiomJiYmJiYmKioiGhoWFgn99eHZycW9saWhnZmdpa2xucnR4fH+Bg4SGh4iJiYmJiYqKioqKioqKioiIiIeIiImJi42Pk5WZnaCoq6+ytrq9wMDBwcPBwL28ubi2squglY2nrK+5xsrJz9nZ19XW1dDOzMXAvLSvvdHZ2drZ1dPR0M7NzMvJyMbGw8TDwsTHyMTMwKyKep/O3NXU0dDNy8jFwL24s66qpaOenJmXlpOSj4+Pj46Ojo2Njo6OjpCRkpKUk5WWl5eXmZeVk5GNioN/fHN0c3uTpq+4xs7V4eDi8fn49O7q5NvTyL+1prLAvb+9ure0sKykoJmWkYyLioqJiYmJiYmJiYmIhoWDgX97eXNva2dkYV5cXVxeYGFkZ2xvc3d7f4GEhYaHiYmJiYmKioqKioqKioqIiIiIiIiJiYyNkZOWmp6hqKuwsra5vL6+v8DAv769u7q2sa+tqaKdnJ6ksbq+vsLJys3PzcvIxsK+s623zdjW2tjV1NPT0c7LysnIx8XDw8HDwsHBxMfKysvQwLLJ28rS0M3LyMXBwLe0r6qloZ2al5WSkI+OjYuLi4uLioqKiouLi4uMjI2Oj5CRkpOTk5KTkIyKh4F7dnNramRid5SttsPHz9zi5e759/Pt6OLZ0MS9rqO6v7m/uri1sa6noZyWko6LiYqKiYmJiYqJiYmIh4aEgX98eHRvamRfXFhVUlJTVFdaXF9laW50eXx/goSGh4mJiYmJioqKioqKioqKiIiIiIiIiYmMj5GUl5ufoairrrO1uLu9vby+v728urm4tK2rqqqpp5uZnaWss7e4vsLGxcLBv7q3q6/G2dzY2NTS09LT0s3Kx8jGxcTCwcHAv7/AwL/CxcfGyMvMzc/PzcvJxcO+urivrKainZmVk5OQjo6NjIuKiYiIiIiIh4eJiYmJioqLi4yMjY6Pj46MioiEgHx3cGtlY2BZVlp0n6+5xNPX3ubo+ffy7Obf1s3BvKeivby4vLi2sq+rpZ+ZkpCMiomJiYmJiYqKiYmIiIiEgoB8eXRvaGNcVFFNSkdHR0hMTlJYX2VqcHZ5fICDhYeJioqJiYqKioqKioqKiomIiIiIiYmKjY+SlJebnqCpqq2wsrW3urm7uru7ubi3s7Ozsa6pop+inZmZoKqwr7W4ube2uLStprXM3NzU09rW1NHOzcrJycXEw8HBv7++vLq5vb+9v8LAxMLDysnGy8jFw7+7uLSwqKWgnJeUkY6Pjo2Li4uLiomJiIiIiIiIiYmJioqJioqKiYmJiYeFgoB9eHNvZ2JcVVRST0tGUHKwu77P0tvi6Pj28erk3dPKv7ijp7u4uLm3tLGtqKOdl5GOi4iIiYmJiYmKiomJiIeFgn58eXRtZ2FaUUtGQz89PT1AREZKUllhZm10eHt/goWGiYqKiYmKioqKioqKioqJiYiIiImJio2OkZOVmZyepairrK+ws7W2tba3trW0tLKxr6yppqWlnqOhmpeZoaiorKutsKykobTS4dfO19vRzc3MysbFxcXAv728u7q6ubq4tbi8vL2+v8PDwL/FxcPBvru3tK+rqKGfm5aTkI6NjIqJiYqKiYiJiYmJiYmJiYmJiYqKiomJiYiGhoOBfHp3c21mYVpSTkhDREQ/Pj5Fg7bBydLg4un39e/o4trQx7uyoa+5tbm1tLGuqqagmpWPjYuIiIiJiYmJioqJiIeGhIB7d3NsZV9XUEc+Ojg0MTQ0Nzs+Q0tUW2JqcXZ5foKEhomKioqKioqKioqKioqKiYmIiImJioqNjpCSlJeanKGkpqmqrK+wsLGxsbGxsK+vrquppqSjopykp6SbkI+cnqGhpKOZnK7Z1dPW19TR0szLysjFwr69ubm3t7W0tLS3tLO0tre4uru5urq4u768ubazr6umo5+cmZWRj42Mi4uJiIiJiYmJiIiIiIiIiYmJiYmKiYmIiIiGg4F/enVxamZeWFBKQj86NjYzNDc1O1aoxc7S3d7p9vTu5+DYzsW5rqC1t7S7tLOwrailn5iTj42KiIiIiYmJiYqKiYiHhoJ+eHRuZ19YTEU8My8sKScqLC4yNTpETFddZ290eH6ChIaJioqKioqKioqKioqKiomJiYiJiYqKjI6QkpOVl5qfoaSmp6iqq62ura6tra2sq6mmpaSkoqGioaGoq5iGiZGUk5WUj6jZ19bU1tXQzcvNycTBv726t7S0s7KxsbCwrq+xsrK0tba5t7i6uri3tbOxrqmloZ2amJWRjo2Li4qKiYiIiYmJiIiIiYmJiYmJiIiIiYiIiIaDgX57eHNtaF5YUEdAOjMvLjApIyosMEWQtrjI0dvb5/fy7efe2M7Ct6ibuLa1srOzsKumoZyXlIyLiomJiYqKiYqKiIiJh4SDe3VwaWJZT0Q8MCoqKygjIyQmLDA0PUVPX2FucXd7g4WHiYqLioqKioqKioqKioqKioqKioqKioyMjo+SlJWWmpucn6GipaWmpqampqamp6empaOioKChoaGkpqmvnHmJhI2Eg6XQ3dbU09DPzcvJxMK+urezsK+srKuqqaioqKioqaqrqqysra6ur66trKupp6OhnpyYlpGQjoyLi4mIh4eIiIeHhoaHh4aGhoaHiImIh4eHhoWDgH14cm9sY1pQSUA6Ni8pJykmIiQjKlmdqLK9yNLa4en28evl3dbMwLSnnre1tLKzsK6ppaCblpOMi4qJiYmKiomKioiIiYeDgXlybWZcUkg7NCsoJiQjIyMkJystMjtGUFZfbW93fIOFh4mKioqKioqKioqKioqKioqKioqKioqLjI2OkJGTlJaYmJqdnp+goKCgoaKioqKioqKhn56fn6GipKSnsamUcX96eJTR2cvU0s/Oy8rHxb+8uLSyrqupp6alpKSioqKjo6SlpaaoqKmpqqqpqKempKKfnZuYlJOPjoyMioqIh4eHh4eFhIOCgYCAf4CAgYKCgoKCgYF/fnp3cGplYFZMR0E4LScnJSMjIiMhLmKUoKq1v8nT2uHp9e/q49rTyLyxpaO2tLKxsa+sp6OfmZORi4qJiYmJioqJioqIiIiGg352bmdfVUk9MywmIyIiJyw1Nzk5Nzg/R1JSXm1weH2BhoeJioqJioqKioqKioqKioqKioqKioqKi4uMjY6QkZGSkpOVlpeYmZiZmZmampycnJ2dnJybnJ2eoKWkpbC2rndsa4XE087S0M/MycfDv722s6+sqaShoJ2cnJyampqZnJucnZ+goKGhoaKioqGgn52cmZeVk5GOjYyKiYmJh4aGhIOCgH98fHp6eXh5enx8fHx8fXx8eXh0b2lgW1NJQDwxKCgoJCAdIycgOXGKkKauuMLL1dvi6fTv6eHY0Ma6rKSotrKvsa+sqqahnJeSj4qKiYmJiYqKiYqJiImIhYF8c2piWU5CNTEqIyEkLDc/Q0VJR0M/QEJRXGJudXp/goiJi4yLioqKioqKioqKioqKioqKioqKioqLi4uMjY2Njo6Pj5CRkZGRkZKSlJSUlJaXl5eYmZqcmp2kpqatt7eoYmu31c3H0MzLyMXBvLi1raqnop+cmZaVlJOTkpGRkZOUlJWXmJmZmZmampqZmJiWlZOSkY+NjIqJiYiIh4WEg4B/fHp3dXRycnFxcXJ0dXZ2dnZ3dXNxamZeVk5HPTUxLCYlIR8hJB8kS3eDjZ2jsbvFztfd4+v07ujh18/EuKihrbOwr7GtrKmloZyXkY+KiYmJiYqKiomKiYiJiIR+enBnX1RKPTItKSMiKztHS0lMT09PTEhFS2VmbXp6goaIi4yNjIuKioqKioqKioqKioqKioqKioqKioqKiouLi4uLi4yNjY2MjIyNjo+QkJCRkpSTlZaYmpiboaenrbK3vImXyczKy8fHxcK+u7awrKSinpuYlJKQj46OjY2MjY2Ojo+QkZGTk5OTk5OTk5KSkpCOj46Ni4qKiYmIh4aDgn99end1cm9saGhnZmdoamttbm9vb21qZ2BaUUlBODErJyckIiMjIR4rWXR/j5ierrS+yNHa4Obt8+3n39bNwralnrCxrq2xrKqopJ+blZGOiYmJiYqKioqJioiJiYeCfHdtZFpQRzsxJyUjKDVETlFXWFlZWllVUEliam99fYWIiouOjo2Li4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uMjY2Njo+QkZKUlpeZmqCkqKuwtLS0wMDIwsPHwL67trKtqKWcm5eVkpCOjIyMi4uJiYuLi4uMjI2Njo6Pj4+Pj4+Pj4+NjIyMi4qJiYiIh4aEgX19eXVxbmpmY19eXl5eYGJjZmZnaGdkYV1WTkU9Ny4oJCUfHyUkICY0Y25/ipCeqa+6xM3V3uPo7/Ls5t7UzMG1pJ6zrqutsamppqKfmpWQjYiIiYmKioqKiYqIiImIgXt2amBXTEQ5LiQhJjNBTFRaYGJiYmBfW1dTWHB4f4OHioyOj4+OjIuMioqKioqKioqKioqKioqKioqKioqKioqJiIiIiYiIiIiJiYqJiouLi4yMjo+PkJKUmZqdoqSorbC4t7nBvcK7vrm2s62ppKCdl5WSkI+NjIqLioqJiYmKiomJiYmKi4uLjIyMjIyMjI2NjIqKioqJiIiHh4aEgXx7d3NtaGRfW1dUU1FSUlRWWFpaW1xbV1NQSUI5My4oJCMlISEiHiVGanWBiZGbo6+9wcrT2uLm6/Hx6+Xd08vAtKOds6yqrLGpqKWhnpmTj4yIiIiJioqKiYmKiIiJiIF7dGleVEk/NiwkHyg9TFJbZmVpa2pnZWJeYlB5gH+IiImNjpCQjo2Mi4qKioqKioqKioqKioqKioqKioqKiomJiYiIiIiIiIiHiYmJiYmJioqKi4yNjo+Qk5eZnJ+hpKistLG5uLi3uLizsayno5+amJSRj46Ni4uJi4uJiYmJiYmIiIiIiIiIiIqKioqKioqKjIqJiYmJiIeHhoaFg397d3FtZmBbVVBMR0ZFRkZISkxNTE5OTElEQTs0LSknIiEiICQhHTBTbnaAiZOapKy0vcbP197k6Ozy8evk3NLJvbGjmqytq6qsrKWkoJyYk4+LioqKioqKioqJiomIiIV+d3JnXFNIQDUqKCA2RlJcZGxwcnNzcnFsaGRadIaGgZCPkJKRkpGPjYuKioqKioqKioqKioqKioqKiYmKioqKiomJiYiIiYmIiIeIiIiJiYiIiYqKi4uMj5CTlZibnqGkp62usbKzsq+vraqmop6alpONjIuJiYmJiYmJiYmJiIiIiYmJiYmJiYmKioqKioqKiomJiYqJiYiIiIiFgn98dnFtZ19aU0tFRD0+PT0+P0FBQ0ZGREJAPDcxKikoIyIiHSQdID5hdHl/iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wpJqsraqqq6ylo6CbmJKOi4qKioqKioqKiYqJiIiFfndwZltSRz81KyYjPEpXYmpweHp7e3p5dG9qXXKHioeSkJGSk5OSj42LioqKioqKioqKioqKioqKiomJioqKiomJiYiHh4iIh4aHh4eIh4eHh4eHiImKi4yOkZOWmZufoqWoqautraypqaWin5yZlZCPjIuKiIiIiImHh4eHiIeHh4mJiYmJiYmJioqKioqKioqJiYmKiYmIiIiHhIF8eHRtZV9YT0c+ODUzMC8xMjE0Njg5OTc3NDAqKiUkJSEfISYbLkdhdH2Ei5Wcp7C3vsfO1dng5uru8vTw6uPa0Me7r6Kaq6yqqaqqpaKfm5eSjouKioqKioqKiomKiYiIhX12b2RZUEU9MyklJ0NQX2pyeICCg4OCgHx3cWJwio+OlZGTlJSUkpCNjIqKioqKioqKioqKioqKioqJiYqKiomJiYmIh4eHh4aFhYWEhIODg4OEhYaHh4iKjI+Qk5aYmp2goaOkpaWkoqCdnJmXlJGOjIiHhYSEg4OEg4OEhYWGhoeIiIiJiYmJiYqKioqKioqKiYmJiomJiIiIhoN+eXRtZltXTkM5MS0rLCgnKisoKi8vMDAwLy8qJyAhHx8jJSQiMk9reH6EjZahp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6im6urqaioqaShnpqWko6LioqKioqKioqJiomIiIR8dWxiWE9EPDQpJSxKVWNyeX+Fh4mIh4aBfHhocI+Sk5eTlZWVlZSRjYyKioqKioqKioqKioqKioqKiYmKioqJiYiJiIaGhoWEg4KBgH9+fn5+gYGChIWGiYmNjpGTlZeZm5udnp+enZuZl5WUkpGOi4mDgoB+fX5+f36AgoKDg4WGh4eIiYmJiomKioqKioqKiomJiYqJiYiIh4WAe3ZxaGBWUEU6Mi4qKCYkJScnJiUnJygpKCcnJiUkIR8kJB8oPV5teX6Fj5ifq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtoJqrqaiop6ejoZ6alZGMioqKioqKioqKiIqJiIeEe3RsYFZORDwzKiYxTlhndYCFjZCRkZCOiYN8bnGUlJaYmJeXmJeUkY6MioqKioqKioqKioqKioqKiomJiYqJiYiIiIeGhIOCgX9+fXx6eXl6enx9f4CChIeIi4yQkpOUlZaXmJmamZiVlJCPjYuKiIWCf317eXh5eXl5e35/gYGEhYaHiImJioqKioqKioqKioqJiYmKiYmIiIaEf3h0bmNbUUk9My0qJiQkJiYjIyYnJSEjJCUjISEjJSclIiAnRGp2fIGJlZ6kqra8xMvR197i5unu8vT2+fvu6OHYzcS4rJ+cqqiop6WloqCcmZWRjIqKioqKioqKioiKiYiHg3pya2BWTUQ8NSwnM1JbbHuEi5GTlZWUkYyHgXRympeZmZuampqYlpKOjIqKioqKioqKioqKioqKioqJiYmJiYiIh4eFhIF/fnt6enh2dXR0dXZ4eXt+f4KFh4mLjY+QkJKSkpSUlZSTkpCNjYqIhoJ+e3t5d3R0dHR1c3V5e31/g4WFhoeJioqKioqKioqKioqKiYmJiomJiIiGgn12cGlfVUtBNy4pIyIjJDA7P0A9NCglIiAhIiIhIyMkHx81VW11fYWNl6Gnrbe/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKugm6qmp6ekpaGfm5iUkIyJioqKioqKioqIiomIh4N6cmxhV01FPzYuKjdVYHKBiZGWmZuamZeRi4Z5cZ2anpqdm5ubmpaSj4yKioqKioqKioqKioqKioqKiYmJiYmIh4eFg4F+e3l2dXJxb21sbW5vc3V3ent/goWIioyNjY2Ojo6QkJGQj46NjIqIhYJ9eXV0cnBtbWxtbm1wc3d5fICDhIWHiYqKioqKioqKioqKiomJiYqJiYiIhYJ7c21lWU9DOjEqIyEpNEhLTk9RVFRSPTAjHh8hISAnHydFZXd9fYiSm6GprrjDyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirn5uqpqampKShn5uYlI+MiYqKioqKioqKiIqJiIeCeXFsYldORkA4Lyo3V2N3hYyWnJ+hoaCdl5GLem+fnaKcnp2dnJqXko+MioqKioqKioqKioqKioqKiomJiYmJiIeHhIF+e3l1cnBraWdlZWZoaW9xdHd6fYGDh4iLjIyMjIyMjI2OjY2LioeGg4B8d3FubWxoZmVmZ2dpbXF1dnp/goSFh4mKioqKioqKioqKioqJiYmKiYmIiIWCenJrY1ZKPzYtJiAjNUpVVVtfYmRiZGZMMCIiJCIgIC1RdHx7hZGUnaSqtL7EytLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qpuZqKWmpaOkoaCcmJOPjIqKioqKioqKioiKioiGgXlzamJaUkhAOjMsPlpneoqVmaCipKSin5mTi4J1oqGfn6GdnJuZl5OQjIqKioqKioqKioqKioqKioqJi4uIh4iHhYN+fHlzcG1mZmVhX11eYGJqanB0fH57hoWHiYuLi4uLi4yLi4uLiIeHhH97d3JsaGhjYF5dXWBkZGptcHZ6foKFh4mKiomJiYqKioqKioqKiIiJiomJiIeFf3hwZV5TRz0zJyIfM0xRWF1jZmlsbm1ucVwmISIiIjdmgH6Ei5CYoKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mbmailpqWjpKGgnJiTj4yKioqKioqKioqIioqIhoF5cmtjW1JIQTszLz5caX6Ml5uhpKampKGblY2EdqKhoKCinp2bmpiUkI2KioqKioqKioqKioqKioqKiYuLiIeIh4WBfHl1b2tnYlxZVlZWWFteZGVscXl+enyFh4mLi4uKi4qKioqKiYeFhIF9eHRuaWVfWldVVFVXXF5laW1yd3yDhIaJioqJiYmKioqKioqKioiIiYqJiIiGg312bmNcUkU8MSgjKEFWW2JobnF0eHp6fHp2TCEcJk+AiIeHkpidpquyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epm5mnpaalo6ShoJyYk4+MioqKioqKioqKiYuKiIaBeXJrY1pSSUI7NDJAXWuAj5mdpKepqKeknZeQhXiko6GhoqCfnJyZlZCNioqKioqKioqKioqKioqKiomLi4iHiIaEfnh1cGlkYFpWUk5PUFBTWF9gaW10fYGBhYeJi4uKioqKiYmJiYiFg4F9eHJuaGJdWFRQT1BRVVpYX2ZqcHR4f4SGiIqKioqKioqKioqKioqJiImKiYiIhoJ7dGthWU9DOSwnIDBPX2Rscnl9gISGh4iMjXYoMmaNkI+RmaOkqK+3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZuZp6WmpaOjoaCcmJOPjIqKioqKioqKiomLi4iGgXlyamFbU0lDPDQzQV1tg5Gbn6apq6qppqCakYZ6pKOioqOhoJ6cmZaRjYqKioqKioqKioqKioqKioqJiomIiIeFgn12cWxkXllTS0ZDRkZHS1FdX2hsb3iAhIaIiouLioqKiIiJiYmHhYJ/enRuaWJcV1NOSUdHR0tQU1tiaHB1eHyEhomKi4qKioqKioqKioqKiYiJiYmIh4aBe3NpXldMQTksKSA4WWNqdHuCh4qOkpOWkZuTY4WanZidoqWnrra6wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmbmKekpaWjo6GgnJiTj4yKioqKioqKioqIi4qIhoF5cmpjWlNKRD83NUJcboOSnKGnqqyrqqegmpCHeaajoqKjoaCfnZqVkY6KioqKioqKioqKioqKioqKiYqJiIiHhH98dG1oX1lSS0lCQEBBQUZMV1piam91foOHiYuLi4qKiomJiYmJh4SCfnhxamRdVlFLRUA+P0JHTVBYXmVweXx/hYeKi4uLioqKioqKioqKiomIiYmIiIeFgXpzaV5WS0A5Li0kQl9pc3yEjJGVmp6go6OlpqKvpKGqrbCvsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apmpinpKWkoqOhoJyYk4+MioqKioqKioqKiIqKiIaCeXNrY11WTUhDPDlEXG2Ekpygpqmrq6mmoJqRhnmlpKOio6Kgn52blpGOioqKioqKioqKioqKioqKiomKiYiIhoJ9eXFpYllUTUQ+Ojk6PD5FTFddX2Zxdn6EiIqMjIuKioqJiYmKiYiEgXx1bWVgWE9KQj05ODk9Q0hPWV9kbnd8gIaIi42Mi4qKioqKioqKioqJiImJiIeGhYJ6cmheVUxBNS0qJUpjcHuCi5SZnqOoq6q1sbCvqK6zsLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZqYp6SlpKKjoaCcmJOPjIqKioqKioqKioeJioiGgnp0bmZfWVFLSEE/Rl5ug5GbnqWoqqmopJ6Yj4Z7p6eko6OioZ+dmpaRjoqKioqKioqKioqKioqKioqJiomIiIeBfXZtZF1UTUY9PDgzLSgmKi9MYmZpcXd+g4mLjI2Mi4qKiImJiomGg4B6cmlgWlJJQz04NDIyMTY5RVRhZ292fICHioyOjYyKioqKioqKioqKiYiJiYiHhoSAeXFnXFVLPzUuJydUaHeAipOdoqetsra4tb+8try8u8DCxcnLy9Ld297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqiamKekpaSio6GgnJiTj4yKioqKioqKioqHiYmIh4J6dG9oYltUT0tEQ0pfboOQmZ2kp6iop6Odl4+GfKinpaSloqGfnZqWkI2KioqKioqKioqKioqKioqKiYqIiIiHgXxzamBZUElCODEvKiMdHCEmKFRpbXZ7gYeKi42NjYuKioeHiImIhYJ/d29lXVZORj42MjIyNDU5PTNMYGtzeH2CiIqNj46MioqKioqKioqKiomIiYmIh4aEgHhwZltUS0A5MicsXWx9hZKcpqywt73AxMTEzMbExsXIzc3P19ra3ePm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYaBe3dvaWJdWVVOS0pNXXKBjZaaoaWnpqShnJeOhnirpaalo6Ohn52ZlZGNioqKioqKioqKioqKioqKiomIiYiIhX52cGdfV01GQDkvKyYcIyEmKShNaG95eoeJjo6Oj42Mi4qKioiIiYeCe3ZtZVxRSUM7NjIyNTk8PD49O2lwc31/iY2Pj5COjYuKioqKioqKioqKioqKiomGhH93b2ZbUktCPDMtKGZzf42WoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmGgXx3b2tkX11ZU09OUFxwfomTl56ipKOhnZiTi4V3q6anpqWjoZ+dmZWRjYqKioqKioqKioqKioqKioqJiYmIh4V9dm5lXlRLRD03MCwoHiQjKSspR2x0fX6KjY+PkJCPjIuKioqIiYiHgnt0bGNaT0hBOTYzNDg9QUFDQT1lc3mAhYmOj5CQj42LioqKioqKioqKioqKioqJhoR/d3BoXVRMRD40Lyxpd4KQm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJhoJ8eXJuZ2NhXllWVVNdbnuFj5SanqCfnpuVkYiCdqynqKelo6GfnZmVkY2KioqKioqKioqKioqKioqKiImJiIiEfHZsY1pRR0E7NDAtKiIlJywuLT90e4OFjZCQkZGRj46LioqKiImIhoF6c2phWE5FPzc0NDg/REZHSUhDYniBhYqKj5GRkZCOjImKioqKioqKioqKioqKiYaEgHdwaF5WT0ZCOjQya3qGk5+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYaCfXp1cGtoZWNfXVxVW2t4gouSlZibmpmXko6Gf3WtqKmnpaOhn52ZlZGNioqKioqKioqKioqKioqKioiJiIiIhHx0amFZT0VAOjMwLisnJikvMTI4e4GHi5CTk5OSkpCOi4qJioiIiIaAeXJoXlZMRD43NDU8RUpNTU9OSWGAh4iPjZKSk5KRjoyKioqKioqKioqKioqKiomGhIB4cGlfWVFKSD86OW17h5Shrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqJiYiGhH98eHNwbGpoZWJhV1lodn6IjZKUlpaVk4+Lg3xzrKupp6SjoZ+dmZWRjYqKioqKioqKioqKioqKioqIiYmIh4N7c2lgV05FPzo0Mi4uLScrMTQ4NYSEjI6TlZWVlZORj4yKiYqIiIiFfnhxaF5WS0U/OTQ4QUpPUFFUU05khouLkZKUlJaUko+NioqKioqKioqKioqKioqJhoR/d3FpYlxVT0xEQEBsfYeVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKiYmIh4R/fnp3dHJwbmxralpWZXJ6goiLjpCQj42Khn55cayrqqelo6GfnZmVkY2KioqKioqKioqKioqKioqKiIiJiIeCenNqX1dNRT87NTUvMDQqLTI1OTWJiZCPlpaWlpaVk46Mi4mKiIeIhH12b2ZdVEtGQTs3O0ZPVFVWWVdSaYuOj5OVlpaXlpOQjIqKioqKioqKioqKioqKiYaEf3hxa2RgWlVPSEZHbXyIlqGtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqJiIeEgX98e3l3d3V2dXRdU19sc3qBhIiKiYmIhIF6dG+srKqop6Ohn52ZlZGNioqKioqKioqKioqKioqKioeIiYeGgXhxaV5VTEQ/PDc5MDI7Li40ODc3j4yXkZmXmZiYl5SQjYuIioiHh4R8dW9lW1NLRkI8Nz5JVFdYWl5cVW+PkJWUmZmZmJeUkY2LioqKioqKioqKioqKiomGhIB4dG5nZGBZVk9NTmt5hZOfq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiouKiYiHhYF/fn18e3t7e3t8YFFbZ291fH+ChIWEg4B9dnFsrK2rqaijoZ+dmZWRjYqKioqKioqKioqKioqKioqHiImHhoF5cGhdVUxDPzw3PDM0QDEvNDk1OpKPm5KcmJqamZaUkI2LiIqIh4eEfHRuZFtSSkVCPDg+S1ZbW11hYFdxj5KalZqZmZmYlJCOi4qKioqKioqKioqKioqJhoSBeXRwamdjXVtVU1Fqd4KQnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJiIaEg39/fn+AgoOEhmZNUWBobXV1gYF5fnqBd3FuZrCrq6ikoqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BpYFVNR0A+Pjk3Oj03MjU5PTWZmZacmpienJmWk4+MiIiKiYiHhH11bWZcVE1GQkA8QVBYXV9kY2NeeJqanpucn52bl5WSjYuKioqKioqKioqJiYmIiIaEgXx1cW1rZmReW1xZaXOEj5ijrLfByNDX4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYiGhIOEg4OEhIaIiYeFiI+TkJSaoKmurJ96dHFtamOvqqunpKKhn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwaWBVTUdCPz89MzZAPjU1Oj85nZuXnZ6enp2Zl5OPjIqIiomIh4R9dW1mXFVOR0NCP0RSW2BhZmZkYHqbnJ+dnqCdm5iVko6MioqKioqKioqKiYmJiYiGhIJ9d3NwbmppaWlkYWdwe4aWoa22wMjP2Nzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmIhoWEhoaHiIiKjI2MkJORj5CVmpefp62dbmlvaGVfrKmrqKWioZ+dm5WRjYqKioqKioqKioqKioqKioqIiYiGhYB3cGlgVk5IQ0FBRTk4Q0U8ODc+Op+fmp+gop+cmpaUkIyKiIqJiIeEfXVuZlxWT0lEREJHVl5jZWppZ2R9np6hnqChnpyYlpKPjYqKioqKioqKiomJiomIhoWDf3p3dHNxb2hua2tfaXSEjpmkrbe/yNHW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJiIeGhYeHiImLjY+Qk5OSkJCUl5icoqKjlGpoaWVhXaupqqekoqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BpYFZPSkVDQ0c+PUNFRkI6OzmfoZ2io6KgnpuXlJCNioiKiYiHhH11bmdeVk9KR0ZFSlhgZWhtbGtmf6CgoqGgoqCcmZeSkI2KioqKioqKioqJiYqJiIeFg4F9enl4d3Z1dHJ1Wmdye4iTnqavt8DK0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiImJiYiIh4eIiImLjY+RkouOkJKOjo+TlZqYnI9nZWFhXlusqaqlpKKhn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwaWBXUEtGRERGPj1ARUlIQ0A8n6GgpKSioZ+cmZWSjYuIiomIh4R9dW9nXlZQS0dIRktZYWdqb25uaIGhoaSgoqKgnpqXk4+MioqKioqKioqKiYmKiYmHhoSBf318fHx8d3uCglRbbnqCjZaeqLG7xczS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioiIiYmJiIiIioqLjo+Rk5SVko+OioiLj5CUkpmKXFxeXVtYqqmppaSioZ+dm5WRjYqKioqKioqKioqKioqKioqIiYiGhYB3cGliV1BMR0VFSz06QkVDQkRIQKKjoaalo6GfnZmVkY6KiIqJiIeEfXVwZ15WUEpISEdMWmFna3Bwb2uDoqKkoqOjoJ6bl5OQjYqKioqKioqKiomJioqJh4aFg4F/f4CBgX+Di4JYVWVveoSLlJ+osrvEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqIiIiJiYmJiYqKjI2PkpKUkY+MiouJiIaKjYiPglVbXlpXVaioqKSioqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BqYldRS0dGRk1APUVHQ0BARkGkpKKlo6Khn52ZlZGNioiKiYiHhH11cGheVlBKSUdITVpiaGtxcXJthKOjpaSko6Gem5eTj42KioqKioqKiomJiYqKiYiGhoWDgoKDhYeKiomJj5GUl5KUk5CPjY2Ru8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiIiIiImJiYmJiIuMjpCSkpKTkYqFhYWEg4iBhn1UWVZXVFOop6eko6Khn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwamJYUUtHRUVIQUBFSU1IPj09paeipKKgop+cmZWRjIqIiomIh4R9dXFoXlZQSklHSE1bY2lscnJzboako6akpKOhnpqXk4+MioqKioqKioqJiYmKiomIh4eGhYWFhoeJiJKPh5ePjJSUlZGOjIiGiLS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKi4uMjpCRkpSQkIyIgn99fH6AfoB1T1FVUlFQp6Smo6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0ZCREhIRkZDRKGjpqWkoaOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqHh4eGh4mLjI6RlJOUlpWUkZKRiYWCfoGrtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKioqLjI6PkZKSkI+LhYB7eXh3enh6cEpOUU9PTqWjpaKioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktGQkRISEdHQ0Sho6alpKGjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKh4eHh4iKjI2OkpSTlJSUkY2Mi4J+enR5prG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqKi4uNj5CQkY6Mh4B6dXJxcHJwc2lGSk5NTEuioaShoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLR0RFR0hISkREoaOmpaSho6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioeHiIiJi42OkZSVlJKSkY+MiYZ9d3JtcZ+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKioqLjI2Oj4+MiIN7dW9sa2hraWxkRUlOSkpJoaGkoaKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0dFRkdISUxERaGjpaWkoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqHh4iJioyOj5KVlpWTko+MiISBeHFrZmqYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomKi4uMjIyLiIN9dm9qZmRiZWNmYENJTEhJSaGhpKKioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktIRUZHSEpNRUWho6WkpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIiJiouNjo+SlZaUk5KNioF+eXBqY1xjkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqJiYqLi4uKioSAeXFrZWBfW19eYFxARUhISEigoKSio6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLSEZHSEhJTEZGoqOlpKSio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIioqMjY6PkpWVlJKQioV9eHRqZF1XXo2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiImKioqKiYeEfndvZ2JdW1hcW11YPUNGR0dHn5+joaKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTEhGR0lISUtGRqKjpaSkoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYqLjI2OjpKTk5GPjIV/eXNuZF5WUViJlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKioiJioqKiIeGg353bmZgW1hYXFpeWD5DRUZGRp+foqChoaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxIRkdJSEhJR0aio6WkpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmKi4yNjY6SkpKQjYmCe3JtZ11XTklRhZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqIiIiJiYiHhoF7dG1lXllXWFlbWVdCQ0ZDRkWgoKKhoaGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKS0pHSEtKSEVKoKWkpaOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIiImKi4uLjo6Oi4iDfHVuZ2BXUEhDTIGPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiYmJiYmJh4aCfHVuZmBbWlhZW1lWQUJFQ0ZFoKCioaGhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0tKSUlNTUtHS6ClpKWjpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqIiIiJiYqKi42NjImEf3dwaGBaUUpCPUeAjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomJiYqJiYeGhH11b2dgW1pYWVtYVkBCRENGRZ+goqGhoaCfnZqUkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpMS0lMUFFPS06hpKSlo6SjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIiIiImJiYmLi4mFgHpxamFaU0tEPDlCfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqKiYmKiYmHhoN8dG1mXlpZWFlbWVZAQkNCRUSfoKKhoaGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKTExLTlRWVFBRoqSkpKOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIiIiIiIiIiYmGgn13bmVfVlBJQjs4QXuJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiomJiomIh4WDfHVuZl9aWVhZW1lWQUJEQkVEn6CioaGhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSUxNTlJYWlhVVaOko6SjpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYmJiYmJiYiIhYF7dW1kXVVPR0E6N0F6iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomJiYmIiIaEg311bmhgW1lXV1lYVkFDREFFRJ+goqGhoaCfnZqUkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRklMT1JXW11aV1alpKOko6SjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmJiYmJiYmIiIaAe3VsZFxTTUY/ODZAeoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqJiYiJiIeFhIF7c2xlXVhXVVZYV1Q/QkRBREOen6KhoqGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZHTFFUWl5eW1lXpaSjpaOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKiomJiYmJiYmJiomGgXt0amNcU01FPzc1QHqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiYiIiIiHhYN+eHBpYVpVVFRUVlZTPkFDQURDnp+ioaKhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGRkxRVltgX1pZV6Wko6Wjo6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYmJioqKioqJhoF7c2piXVVNR0A5NkF7iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJioqKioqJiYeIiIWFhYOAfHRrYlpTT09PU09TUUJCRENDQpygop+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpLUVhdXl1fWlijpaSio6KjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmJiIiIiIiKh4OAeXJpY1tUTERANjJBe4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmKioqJiYmHh4aEgoF/e3dwZV1UTElISExKT05CREZCQ0GcoKKfo6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTFFZXV1dXlpYo6WkoqOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiJiYiHh4eHiIaDfnhwZ2BYUElBPTQxQHuImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJioqKiYiIhYWDgH59eHVvZ11UTEZBQkJFRUlKQkJDQ0NBm5+hn6KhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS01TWV1dXV5aWKOlpKKjo6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXWNqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiIiGh4aGhIWCf3lzamFbUktEPTkxLz96iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYqKiYiHh4SEgX57eXVvZl9UTEU/Ozw7Pj9DR0JCQ0RFQ5udoJ+ioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktNUllfX19gWVijpaSio6OjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYiHhoaFg4KAfXhzbGNZUkxFPjg0LCs7eoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmKiYmIhoWCgn97eHVwaWFZTEQ9ODU2Mzc5PkdJSUlISUabnKCfoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTlRbYGBhYllXo6WkoqSjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKiomIhoWEhIB/e3hzbWVbUktEPTcxLicnOHuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmJh4WEgX98dnRvaWJbUUQ8NTEtLi8yNzpGTU5PTk9KnZyfnqKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS05WXWJjYmNZV6OlpaKkpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXWNqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJh4WEg4B9enh0bWZeU0pEOzYxKykjJDZ9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiImJiYeFg399eHFuaWFZUEY7My4rKCgsLjQ3RlFTVVVVTp6boJ6ioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRk5RWGBkZGJiWVejpaWjpKSjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIeDgoB9eXRybWVdVEtBPDMvKyclISM2f42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiIiJiYmGhIN+e3Vva2RbU0c+MyspJyYmJigvM0ZVWVpZWVGfm5+eoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZPUlliZWRhYVlXo6Wlo6Sko6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioeGgoB+e3VybGdfVk1DOjUuKyckIyAkN4GOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKioqKiYeHh4N+fXVvamRdU0lEOzAsJiEhJSUrLjJFXmdiYmFel5qfn6KhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSFNbX2FmZGBaVqilo6ahoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEpKXGJpbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKiomJioqKiIeHhYN/eHZya2ddVk5DOjQuJiUiIh8jIzaEk6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqJiomHiIeCfXtybGdgWE5DMywmIyIgISUeJCYtRGBqZWZkX5iZoJ+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpTWVxeY2FdWFSmpKOmoaOjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSlxiaW5wcXFshaWkpqKioqCempeTj42KioqKioqKioqJiYqKioiHhoOAfHZ0bmdfVUxEOTItKSYlIiMhIiI2h5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmmZinpaWkoqOgnZuWk46MioqKioqKioqKiYqJh4aGgX14b2lhWVBGOzAqJCMkISIlIiMkLkdjbGhraGGYmp+fo6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKUVZYW2BeWVNRpKOipqGjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpcYmlucHFxbIWlpKaioqKgnpqXk4+NioqKioqKioqKiYmKioqIh4WCfnlzbmlhXFJHPDIpJSMhISAjISIiOIyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKiomKiYiGhYF7dW1kXVJJPjQoJSIjJSMjJB0gJTFKZG9sbGhimJqfn6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSE5TV1teWlVPTqOjoqaho6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXGJpbm9xcWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqJiYqJh4aDgHx2bmpiWVJIPTQtKCYlJCMhJSEhJDyQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqJiomIh4R/eXRqYVhORDswKCktNDo9P0FJSkxRXWdraWlnYZmboJ+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkhNU1ZbXFdRTU6jo6KmoaSjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVthaG5vcXFshaWkpqKioqCempeTj42KioqKioqKioqKiYmKiYeGhH96dGtmXlRHPzIrJyIgISEhICMhIiU8laOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmmZinpaWkoqOgnZuWk46MioqKioqKioqKiIqJiIeDfnhyaV5WS0E4LSgtNkBITVBTXV5gYmZnZ2dmZWCZmqCeoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTlBUWFlUT09PpKOipqKko6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUlbYWhtb3FxbIWlpKaioqKgnpqXk4+NioqKioqKioqKiomJiYmGhYN+eXJpY1lNRTstJyYlIyUiJCIlISMkOZyptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKioiJiYiHhH13cWdcU0pBNywoMD1IUFVaXmNkZmpramlpZmVhmZqgn6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTE1NTlJUVFNSUaWko6WhpaOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJW2FobW9xcWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqJiYmJhoWCfHZvZl9USj00KSkyODxBR09UXGJtcISjsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqHiYmHhoN9dm9kW1FJQDYsJTBATldgZmpubG1xcm9tbGhlYJmaoKCjoaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxLSEpOU1dZU1OopaOloaWjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISVthaG1vcXFshaWkpqKioqCempeTj42KioqKioqKioqKiYmJiIaFgHp0bWReU0c6MSgrO0dPVl5ob3mBjZChqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIeCe3NtYllQRz4zKSMxSlFcY21zd3t+f39/fHhwZ2Cbn6KeoaKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZHRklQV1lYV1RSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISklbYGdtb3Jwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhIF5cmtjW1BFODEmJEVQUl5mcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiHgntzbWJYUEY+NCknNUxUXmVwdnp+gIGDhYOBe3JooKGjoKOioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSElMU1laWVdUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJW2BnbW9xcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoSCeHJqYlpORDgxJyVJVVhlb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeYmKWlpaKjoqCdm5aTjoyKioqKioqKioqIiYqIh4J7cmxiWE9GPTQqHy9KVGBmcHeAhIeIiYmHhH94bKKgo6GkoqGfnZuVkY2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpKUFhbW1hXVFKho6WnpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVpgZ21vcXBrhaSkpqKjoqCempeTj42KioqKioqKioqKioqKiYaEgXhwamBYTUI3MSgmT1xhbniBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIaCenJsYVdPRj00KiUxR0xXX212fYOIjI6OjIiAeW+ioaKgoqKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTVFYW1pYWFRSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUlaYGdsb3Fwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhIB4b2hfVkxANzAnJlRiaHV/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiGgXpya2BXT0Y/Ni0pOFJXXl9kaHl9goSGhoWCgHlvpaKjoKOioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTE1RVVlZV1hUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJWl9mbG9xcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoSAdm5nXlVKQDcvJyVZZm57h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeYmKWlpaKjoqCdm5aTjoyKioqKioqKioqIiYqIhoF6cWthV1BHPzcuJztcZm1tbnFydXd4ent7eXZuZ6GjpKGmoqGfnZuVkY2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxLTVNYWFdYVFKho6WnpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVpfZmxucXBrhaSkpqKjoqCempeTj42KioqKioqKioqKioqKiYaEf3ZuZ11VS0A5MCglXmt0gI2Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIaBeXFsYlhRSEE5MS0+XGVxeIOKiImHgn15c25wZmCeo6SiqaKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLSkxTV1hXV1RSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUhaX2ZsbnFwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhH92bmdeVkxBOzEqJmRxe4eTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiGgXlwbWJYUUlDOzEsQGFteH2FipGVl5WUj4iDdmpioaWjoKiioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSklMUllZWFZUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhIWl9mbG5wcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoR/dm1nX1ZNQzwzKyhndX+Mm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6WamKilpaSipaCem5eTj4yKiYmJiYmJiYmHiImHhYF4cmphWVJKQzw1MURjbXmCiY6XmJmXmJeSjIR9dKOlpaSko6GfnJiUkIyLi4qKioqKiomJiYmJiYmJiImJhoR/eHBoYlhSTEdHSEpLTFBWWFhVVFOjpaWnpKKjoZ2ZlZGNi4mKiomJhn52b2heVlFMSklJSVlfZWxwcnBshKWkp6SkoaCempeTjoyKioqKioqKioqJi4uLioeEfnZuZl1VTEM+NS8oa3aDkZ2qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmZenpKWkoqOhn5yXlJCNi4mJiYmJiYmJh4mKiIWBeXFrYVpTS0U/NzFFZW98hIySmJqamZmZk42Hf3WkpqWjpKSjoJ2ZlpGOiomJiIiIiImJiYmJiYmJiYiKiYeFf3dwaWJZUUxIR0hJSkxQVllZVlRToqWmpqOhoqGdmZWRjoqJioqJiIV+d3BpX1dRTEpKSkpaX2VscHJva4OkpaakpKKhnpuXlI+MiYmJiYmJiYmIiImJiYiFg392bmdfVk5FPjYwKmx4hZagrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZeWpqSkpKKjoZ6al5OQjIqJiYmJiYmJiYeIiIeFgHhxamFZU0xGQDgyRmdxf4iQlpqcnZycm5WPiYF3paalo6Sko6CdmZaRjoqJiYiIiIiIiYmJiYmJiYmHiImGg392b2hhWFFLR0VGSUpMT1VZWVdTUqGkpaajoaKgnZmVkIyKiImJiIeFfnZwaF5XUUxJSEtKWl9lbHBzb2qEpKOmo6SioJ6bmJOPjYmJiYmJiYmJiYmJioqJhYN9dG5nXlZPRj85NC5we4mapbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WXlaakpaSio6CempeTj4yKiYmJiYmJiYmHiIiHhIB4cGphWVJLRj83M0doc4GKkpecnqCfnpyXkYuCeaanpaSlpKKfnZiWkI2KiYmIiIiJiYmJiYmJiYmJh4iIhoR/dm5oYVhQSkZFRkpLTE9VWFlXU1KhpKSmo6GhnpuXlI+LiIiIiYiHhX12cGddVk9KSEhLS1pfZWxwc29rhKSkpqSjoqGdm5aSjouJiYmJiYmJiYiJiYqKiYaEfXRtZl1XTkZBOzcxcn6Nnqm2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOlmZampKWkoqShn5yYlI+MiomJiYmJiYmJiImKiIWBeXJqYVpTS0U/NzRIaXSCipKXnaCioaCemJOLgnmmp6WkpqOin5yYlJCNiYiIh4eHh4iJiYmJiYmJiYmKiYeFgHdwaGFXUUtHRkdKS0xQVVhYVVRToqSkpaOhoqCcmJSQjImJioqJiIV+dnBnXldRTElISkpaX2VscHJva4OjpKWjo6KinpuYk4+LiIiIiIiIiIiIiImJiYiFgn91bmdeVk9HQz04MnSAj6GruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZiWpqSlo6GjoqCbmJSPjImJiYmJiYmJiYmKiomGgXpya2JbVEtFPzczSGl0gouSl5+ipKKgnpmUi4J4pqalo6WjoZ+cmJWQjYmJiIiHiIiIiYmJiYmJiYmJiomIhX94cGlhWVFMSEhJSktNUFZYWFVVU6GjpKSioaKfnJiVkI2KiYqJiIiFfnZvaF1XUUxKSklJWV9lbHBycGuDo6OloqKjoZ+bl5OPi4iIiIiIiIiIiYmJioqIhoSAdm5nX1dQSEI8ODJ1gpGhrbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6WYlaWio6KfoZ+dmJSQjIiFhoaGhoaGhoaEhYaEgX12b2hfWFFJRD03MkdodIOMlJmgo6SioJ6alYyDeKWlo6OjoZ+dmZaSjYuHhoaFhYWGhoaGhoaGhoaGhYaGg4F8c21mX1VPSkZFRkdJTFFXWllWVFOhoqKkoJ+fnZqWko6Kh4SGhYWEgXpzbGRbVE5JR0hHR1lfZWxvcW9rg6KipKCgoJ+bmJSPi4iGhoaGhoaGhoaGh4eHhoSBe3NrZFxVTkY/OTUxdoKRoq67x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOll5WkoaKgnp+bmZSPjIeDgH9/f39/f39/f4CAfn14cWlkW1NNRkE8NTFGaHWDjZWaoKOlop+empaNhHilpKKhoZ2bmZWTjoqHf39+fn5+fn5/f39/f39/f3+AgH97d29nYlpRS0ZDQkNFSEtRWFtaV1NSoKGhop+dm5mWko6KhoOAgIB/fnx1bmdgVk9KRkNERUZYX2Zsb3FuaoKhoaKenpyal5OQi4aEfn5+fn5+fn5+fn+AgH98enVtZV5WUUtCPTcyL3aDk6OvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzppuYn5mbnJuWk5GMiIN+eXZ3d3d3d3d3d3h2dnVzb2hjXFVMRUE7NTArRmp1gIqWnaGkpqWkopyWjoN3oJ+bm5iWlJCOi4eBfXp4d3d4eHh3eHh4eHh4eHh4d3h3dG9nYldQS0ZBPj5AQEVLU1VYW1ZVUJyanJyXl5WRjIiEgHt4eHZ1dnZya2ZdVk9JREA/QD5DVGJkbm5xc2l+m5qXm5eWko+MiYWAfHZ2dXV1dXV1d3d4eHd3dHJrZl1WUEpCPDU3Ky50h5KksLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaealZuVlpWUjomHgnx3cmxpaWlpaWlpaWlqaWhoZWFbVVJLRD04NDArKURqdoKLlZuhpKalpKKclpCEd5ublpWSkI2Hg356c29ramlpaWppaWlpaWlpaWlpaWloaWdiW1ZOSEI9OjY3OT5ES1NVWFtWVE+Wk5SUkZCNiIJ9eXRvbGloZ2hoZF5aVExGQT05ODk5P1VkZXBvcnNofZeWk5aSjoqFgX13cm5ramppaWlpamlpaWpqaWdlYlxUTEdBOzUwMygrdYiSpLC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapmZKXkI+MiYR/e3dwamRfXFxcXFxcXFxcXVxcW1pUTklGQDgzMCwpJiRCa3eDi5WaoqSlpaSinZeRhHeVlpCNioiEfnhzbGZgXl1bW1xcXFtcXFxcXFxcXFxbW1xZVU5KQj04NDEvMDM5RExTVVhcVlZRkIyOjYmIg353cm1oYl9bWlpbW1hSTkhBOzc0MTEzNDlXZmdycXNzanuRkIyNiIN/enRwa2VhYF9fXl5eXl9dXFxeXl1ZWFVPR0E8NzEtKSsjKHWIk6awvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qpmQkouIg395c29pY19aVlNSUlJSUlJSUlJSUlFQS0VBOzcwLCooJSQhQmt4g4yWm6Klpqalop6YkYV4kJKLhoF9eHJtZ2JbV1RTUlJSU1JSUlJSUlJSUlJSUlJQT0tGQjk1MC4rKysuM0NNVFZZXFhYVIqHiIaAf3dybGdiXVhVUlFRUVBOSEM9ODMwLiwtLi80WmhocnJ0dW58jIqFg3x5dG9pZWBaVlRUU1NSUlNTUlJTU1JSUE5IRD03My8sKSQmHyR3iJWmsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKyckI6Fgnx1bmdiXFZRTUpHRUVFRUVFRUVGRkZFRD86ODIvKycmJiQjIEJteoSOmZ6kpqenpqOfmZCFe4uMhH95cW1nYFtVT0xIR0VFRkZGRUVFRUVFRUVFRkZFREI+OjgxLiopKCYnKi9EUFZYWl5ZV1aCfn98dXJrZl9aVE9LSEZFRkZFQj05NTAsKykoKSorL11qaXR0dndxeoWCfnpzbWljXFdRTEhHRkZFRUVFRkdGRUVHRkRDPDkzLy0qKCUhJR8ieoqWp7K/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquoI6HfHlza2NeWVFKRUA9PDo6Ojo6Ojo6Ozs6Ojk1MzAqKCUjIyMjIiFEcHyGkJqfpaioqKekoJuRh32GhXx1b2djW1VQSURAPDs6Ojs7Ozo6Ojo6Ojo6Ojw7Ozk3NDEvKSYlJiUjJCYsRFNZWl1gXFpZe3h4cmpmYlxWT0lEPjw8Ozs7OTczMSwpJiUmJSQmKStibW13d3p6dXd7eXVxamVgWVFLRT89Ojo5OTk5OTk8Ojo6Ozs5ODEuKygnJSMiICUfI36Omqm1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKSNgHBuZ2BYVE9HPzk1NDIwMDAwMDAwMDAxMTAvLCsqJiMjIiMhIiEgRXR/iZOcoKeoqamnpaCclIp+fntwamRdWFBKQz04NDIxMDAwMTEwLy8vLy8vLy8xMTAvLiwqKSUjIiQjISEjKUZWW11fY19eXHVyb2pgXVVQSUM+OjQxMTAvMDAuLConJCMkJCMjIyYoaHNxfX1/f3l0cW1pZV9aVU1GQDs1MTEwMC8vLy8vMC8vMDEwLy4pJyUkIyMiISAlISWDkZ2tt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKmi3poZWFZUkZCOjMvLCopKCgoKCgoKCgoKCgnJSUjIiQjIiIjIyMjIEZ2g4yUnJ+nqaqpqKahnZaMfnl1aGJcUUxFPjg0LispKCcnJygnJycnJycnJycnJicnJiUkIyMkIiMkJCEhIylHWF1eYWRgXltwaWZgWFRIRDw3My8rKScnJicnJiUlJSMiJSUjIyMlJmt3doGBgoZ+dGpjYFxWTkhCOzUxLCkqKikpKCkpKScnJicnJyYlJiUkIyMkIyIgJSImh5SgsLjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2q4puYltZUEI+ODAqJyUkIyYmJiYmJiYmJSQkIyMjIyMlJCQlIyEhJCBIe4SOlpumqKutrKuppJ+XkIp0aWFaTUtDOTMwLCopKCcnJiYnJygmJiYlJSUlJSQkJCQjIyIiJSIiIyEeICQjS1tlZ2NsZGddZ1xbUlBHPjozLCgnJiQmJiUkJCMiIiEhISEhISEhIidydYOCh4iLg3BhXlhPTUI8NC8rKSgnJSUlJSUlJSUlJSUlJSUlJSMiISEhIiMjHCEgIouXprS9xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7Eua6IZ1pRSkM7NDErJyYlJCQkJCQjIiIhISQkIyIiIiIiIyAfHyEjIiEhSn6HkZufpqmsra2sqqWgmpGIbl9XUEQ/Ni0pJSIgICMjIyMjIyMjIyMjIiIjIyMiIiIiISEhISEhIiQlJCIgJUxdZGhiZmlwYmRVT0ZGQDMvKyYlJCUkIyMjIyMjIyMhISEhISIiIiUkdHuHjIyLjYZuV1FORUE6NS4pJyclJSMjIyMjIyMjIyMjIyMjIyMhISAgIB8fHyEiIB+TnKm2wMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL23hlxRS0A0KiwoJCMjIiIgIiIiIiMjIyMhISEhISIjIx4hJCIfHyEjIE2Ai5Scoairra+urqyoo5+Vh2lWTUY6NS4oJSUjIyQiIiIiIiIiIiMiIiEhIiIjIiIiIiIiIiIhJCQhICAhIyhSaGZpaWt5T0pTS0o/OjMsKickIyMjIiIiIiIhISEhIiIiIiIiIiMhJoCJjJOTlpWQdFRLSEA3Mi4nIyIiIiEhISEhISEhISIiIiIiIiIiIiMjJCQkJCQjIiAhl6KvuMTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBuIdbTEU8MSsmIyEhIiQlJCMiIiIiIiIhJCQjIyMjIyQhHh0hJyUiIChShJCXnKavqq2urq6sqKOZkINpVExEOjIrJiQjIiMjIiIiISEiIiIhISAgICEhIiEhISEhISIiIiIgISMjIyQpSWVrenlaSEVFT0hHOTIpJiUjISEhIiIjIyQkJCQkJSMkJCQjIyMjIi99j5WZmJqakHBOPjw3MiomIyEiIyMiIiIiIiIiIiIjIyMjIyMjIyUlJSQjIyMkJCAhLpSptLjIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxca0pqCajoV/eHNuaGViYF5ZV1VUUlFOTUdFQ0A+Ozo5ODhBVGFmbXV5gI2Pmp+ipaqtrq6trKijn5qUhnl2cWtpZF1aWFRSU1BPTUxMTU9QTU1MTExMTU1LS0tLS0xNTlBUWFxdWl1nYmt5aVRPSUxNSktCRD5DQkJCQkNERUZHSUtNT1FTVldbXmRqcHZ7f4eFl5aeoaKjoqOclZSSjIaEgHl0cG1rZ2hoaGhoaGhoaGhoaGhoaGhkZmlscHV6foeOk5KusbvHzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1MrEu7Con5aPi4SAenZzcG1rZ2RhX15cWVZVVFFNSkdFQ0VCQkRFTmZ/gIWMj5yhpqirra6trayoo56Yk46Cfnd1cm1nY2FdWltaWlhXV1haWllZWVlYWFhYVFNTVFVWV1hZW1tdY2Roc3RZUlFOUFBTUlNPR0xGTVFMTU5OTk9SU1VYW11fYmVnaGxyd3yBhoqSlpmeqamoqKqnop2al5WTjYqFgX99enh3d3d3d3d3d3Z2dnZ2dnZ2d3l6fH6CiIyQlZ2mrrjByNHX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQzMG3sq+mmpOOioWAfXl1c3NwbWxraWZkXVxZVlNRT05QTUpJR0hMUGV/lpmcm6Onra6vrq2sqKSjmpWViYV8fXZybWtoZmRmYWFgYGBgYWFgYWFhYF9eXVxcXFxdX2FiXmJjanVvWUpSSE5bW1ZVWEtSU1FXUFRWVldYWFhZW11gY2ZoaWtucXl9g4eLkJWZnaOpr7GysbSxsK6rqKWhnpiUkIuJh4WCgoKCgoKCgoKCgoKCgoKCgoSGiYuNkZaaoKKqsbe/yMzW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1c3Fvbu3rqemnJmVkpCMiIWFgn98e3h0cXBvbGhkYV9eVllYVVRXVlRUXWFoiaa2sq2vr66trKijpJiSlYyIgIN8eHRyb2tqbGtsbW1tbWxramtra2ppZ2Zra2trbG5wcXl8bFVNT09TVldWWVtaWVlVXFpXX1pgZWFiZGZoam1wcHR4enx/g4aFiY6TlpugpKupsbe2vrm6vb67t7Ozr6ympJ+dmpiWlZSUlJSUlJSUlpaWlpaWlpaSlZiZmp2hpaytsrXDxs7P2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOjuL62tLKppKSemJWSjYiHhYJ+e3l5eHZ3dnd3d3h6e3h4dG5wdHZxdXR5goFzYFVSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsbHyDgouYqru2rKGbmJSQjYaEgYB+fXx8enp8fn9/fn6AhYaHiIuHgXdsYVxcWVlaW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWRscXFydH+PioN9f4eNj5CenJydnJiXmpuamJaSjIR/eXVuZmJlY2BmYFxfYF1bW1xcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHNucG1rbWtrcXZybnB1eHl4dnR1eHZxcHRzc3N1dnRuamtraWhoampnYF9gYmFcV1VZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357fHp0cHFxbWppaWhnZ2hoaW5sbXBuaGdqcG5sa2toZGFaXmJmaGlmYmBeXFtZWFhZXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhH6BgXx7eXRubm1saGVlZmdjYWFiYFxaXGNgXlxbWllXV1hZW11gYmNbW15gYmRlZmVmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiLi4iCfXx7end3dG9ramppaWdmZWRiYWFgYF9fX2FhYV9gYWJiYWFgZmZmZ2hrbW9wcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWlZORkI6MiYeAgH57eXl2cnFwbmxsbGtpbGxtbGxra2tqamprbG1ub3Bvb29wcXJxeXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/b29/f49/b39u3t7Ono6enq6/Hu8e7x7fTy8/T09fX19fX19fT08/Ly8u7p5+jq6OTq6ejn5uXk5OPi4eDd3dzc2NjY19bW1tTW1tnb3eDg4eLf4Ofl5unn4d3h4+bo6eXq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vLu7erq6urx7+3u7+/s6enq5ejo7enq8PDx8vLz8/Ly8vLy8fDw7/Dw8O3p6ebj397d3NrZ2NfY2NfV1NPS0NnZ2NjY2drb1tfX2tvc3t/X1dXY19nc3Obj5+jn6ejk5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vLx7Orm5eTj5OPi4uLj5OTp6efq5urp6uzs7e7v7+/v7+/v7u7t7Ovo7vHs6ebl4N3d29rY1tXV19bW1dLR0M3S0dDNzc7NzszMzMrKysfH2dra19bY1tjd4eLh3d/h4+Lk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/u7+7u7+7t7Ojp5+fn5+jq4ODl6ejt8PPo6err6+zs7Ozs7Ovr6uno3ejr6ejq6+fp6ejn5eTj4+Pj4+Dg39/e09DPzs3MzMzV1tXU1dPS0s/R0c7Q0MzMys7Q1M/S2uHe3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6+ro5+Xk4uHi39/f4+Pf3Nza3N/j5eXk5eXm5+jp6enp6eno6Ofm5fH7/vj1+fnx9vb29vX19PTz8/P08vLz8+zt7/Hy8/Pz6Orr7vL09vfx7u3o6Obh4dXc1trR0NXd2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4d/d29jX1tfZ2NTW2+LU2NrV19LT1+Dh4uPk5eXl5OTk5OPj4uHl9fz4+////fj4+Pj5+fn5+vv6+/z7/Pz//////vv29Pn49vTy7u3s+Ozt6efr6ezk6d7m2c/P1tTV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efj4+Xn6urq5/r9+fHm4+rw+Pjx4+TY0tPb29ze39/g4N/f39/e3d3c4PT//Pr///38/P39/v7///v8/P38/f7+/f3+//39/fv//////v79/fnj4t/Z3Nna3+DS4NPJxtDOz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl3eHm6/Hw7uvz8PH1/f//+/Xq2NLq59vS19fY2tvc3Nzb3Nvb29rZ2OD4///7//70///////////9/v7//v7//////////////P7+///////x2N7g3uTl5uzm0N7Pwr/KycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PL7/eba7vLv+f//9e/v8fTz9Pf7+fDo3dLZx83V5tTFztLU1dTU0tPT2NjY2NfV1NPe+P/7///+///////////////+///////+//////////r////++P//6+He4d7e39/l1dPjtrDAxsnGxsbHy9PXztTa3+Pl6Orj7tHX6+fq7unr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx7e/j5Pn46eby8fDx8/b19P735s+8uL/EzsnW18zcwMbJyszOzs/Q0dHR0dHQzs3M3ff/+//9/f///////////////v/+//7//v/////////7/////vv//urg3uHg3t/e4dPW57Suwbu3vs7g7vX07fHx8vHw7+/x6/Xg2eLf5ezn6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7+Xv7Ovu8PL/8vP29/b39vf/48G1trzBycfL19rF6L++wsPEx8nMzMzLzMzLysnHxt32//z//fz////////////+//7//v/+/v7/////////+/////78//rk4d/g4ODe3NzT1+uvprirpbfS5+/x9PPu7u/x8O/v79/q5uDh2tjd5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7o7u7v7/X7//X19PXz8vb3/Nq+vsS/vsXCztTa0uO+tre4urzBxMXHxsbGxsXDwsHk+f/8//z7/////////////v79/v7//v7+//////////3////8/P/13+Hi4N/g39vZ09jtqp2rppev1PH8/vv3+Pj39fPx8O708Onc3NjW2+Lk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t6e3p6+z38uns6+3t7ezq6fDey8fIxcPKvdLU1NXMyK+ztri5vb6/wb6+vr69vLq57f3//P36+/////////////7+/f7+//7+/v/////////9/////P7/79/h4+Hh4N7b2dbV45+Rm6Coweb4+PDv7fv49fPz9PPz//To19nV2OXf4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt69/o5Ofl8+3q7Oro6ejn5uTx6tbIzdbSzMbQ0szUyuKrs7W2t7i2uLm4uLi4t7W0s/b///v8+/v////////////+//7//v/+/v7//////////////vn+/+ff5OLh4eHc2tvW1NudoKq28PD1+/n48+vu7e/w8PHx8vPo4NHVztfm3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onc4Nzq7vjt6u7s6urq6+vt4erfzc7X2djR0M7J1NbqrbCxsrKxr7CwsrKysrGvrq38///7/Pz6///////////////+//7//v/+//////////////74/f/i4uXk4OHf3Nnb0NfdrNDj8PHw8vX19/b09PP08u/u7u/279/FycTU4tnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero5+Xc6e316Orq6+3s6urp6OLp4tTP0NPa1dTSys7W2rDCxMG6squmqKqrq6qpqKal/f//+vz7+v///////////////v///////v/////////////++Pz/4OTl4+Li39rb3M7Z3rTw///++Pb39vf28efk4d3e5e/5+/nevcO/z9bW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5d7e1uDq8/Tg7u3r6erp6Obi6+bU09Lk7uvs7fDx8vT18vPy9fj8///z9PTx6uLd2v///fn4+Pv9/v7////////+//////////////////39/f/+/Pj/++Pk5OTh393Y1tfS0dH3+vr+/v38/v7/5dHQ197i4+jt8f3yu7bHw8vQ0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Td3Nfe6/L25O/t6+nq6ejn5+jp8//////////9+ff08/r5+PXz8O/v8fPy8u/t7e/19PLx8PLz9PT09PX19vb28/P09PX19vb29/v8/f////7///37//Tj5eXl5OHf3NrW2tHP9vn6//79/v3//+DR0Nfe4uTo7vL/97iywcLIzs/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj3djY3O7v+Onv7uzq6+rp6Ork4/D/+vj9//////79/v7////+/fr49f////79+/r58/Hw8PHw8fDz8/Ly8vHx8fHw8O/v7u3t6+zt7Ozu7/H+///////u6OXl5eXj4d/d1dzR1//7+v/+/P/8//7Y0dPY3+Lk6/Hy/Py0rbq+wcnMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4tzW1djs7ffr8O7s6+zr6unq5eHs+/Dy/vz8/Pv8////+/v+///////+/Pv6+vj28/r59vX19PPw7+7t7Ovq6enq6uno5uXk4+Xk4eDc29vZ9///////5+nn5+bk4t/f3drYz+P/+vz///z/+//50dLT2t/i5ezy9fn4rqizvb3EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Db1NPR6Orz7fDu7Ovs7Ovq7Ofj7v/8+v7//////f3///7/////////8vP09vf49fP9+fX08/Pw7+zr6ujn5eTk5ubl5OLh4N/e3d3d3Nva1/X/////+uLn6evt7/L09fX07eb3//f+///8//z/8c3S1Nrf5Oft8/b37Kekrry6v8bKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf2dPPzeHo8vDw7uzr7ezr6ujp5vH////////////////9/v78/f39+/z9/Pz8/fv59/Pw8O/x7+3u7ezq6Ofm5eXl5OPi4eDf3d3d39/d29rt///////7/////////f38/v/////5/////f/9/+fM09bb4eTo8Pb39diioKm5uLzEyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3tfTzMra6vP17+7s6+zs6+rs8Ovv//v8///////+////9fb3+Pn5+Pf7/Pz7+/r5+fTz8e/w8PDu7Ovq6efm5eTk5OPi4eDf3t3c293c2tjV8/////v8///////////9/vP8///5+f////7+///eztTX3eHk6PH29/XFnZyjtba2wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3W1crH1Oz0+e/u7Ovs7Ovq8fDo7P/59v3//v38/f39/v///////////f3+/v37+ff08vLx8fLw7u7u7evq6ejn4+Pi4eDe3t3Y19nZ2tza2ef////69v3++fv9/v////////759/j5///+/f/92NDV193h5Orx9/r2uZuZnrG0s7/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c2s7IxsHt9fbu7e3u7ezt7PLv7ez/+/3+/f/////////9/v///v////79/fz7+vf2+fb08vLx7+3t7Orp6+ro5+bl5OPi4eDf3d3d3Nza2Nbm///9/v/+//z9/v/+/f7////8/f7////9//z/+tDV1tbd4eTp9Pr89aGWmJuttba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29rLysbF8vb08vDu7u3s7+/v7ezr//r9//3//////////f7+/////v/+/Pz7+/r29vj29PLy8e/t7ezq6evq6Ofm5eTj4uHg397d3dzc2tjW5P///v3//v///////////////vz//////v79//TO1dfW3OLk6/T6+/qckpSXq7CzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vZyc3Ew/P08PLw8e/v8fLy7+/u7//5///9/////////v39/v/////+/fz8+/v6+Pb49vTx8vHv7e3s6+rr6ujn5uXk4+Lh4ODe3t3c3NvZ19z+/vz7/f7//////////////fr8/f////79/v/rzNXY2N7h5u31+fn/lY+SlKirsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b1snPwbzq8u7z9fX29vn5+ff69vX/+v7//v////////78/v///////f39+/r6+ff1+PX08fLx7+7u7Ovq6+ro5+bm5eTi4eDg397d3dzb2dfa/f///f////7///7+/v///v78+/z9/v3+/P//48vV2dve4ufu9vn3/I+NkpWoqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tLK0cC14PT2+/v7/f3+///+//78//v+//7////////+/v7///7+/v7+/fz8/Pr39vf18/Hy8e/u7u3r6uvq6efm5uXk4uHg4ODf3d3c29rY2Pv///3+///8/Pv6+/v9/v/////9/fz8/v3//9vO1tre4OPn8Pf6+O2HiZKTpKWxtb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trPzNLBstf5///+/v38/f7////+/v/7/v/+///////+/v79//////79/vz7+/v6+Pb39PPx8vHv7u7t6+rr6uno5ubl5OPi4eDg397d3Nza2dT3///+//////79/fv6+/v///////////z+///T0dXa4ODj6fH4+vvOfIeRkqGjsLS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493ZztDPwbHN/v/9/f39/Pr7+v3//f7//P///v///////v3+///////+/f39+/v7+fj19vTz8PLx7+7u7evq7Ovp6Ofm5eTj4uHg4d/e3d3c2tnV+P/////////////9+/z8/P39///////7///4zNPV2uHi5erx+Pv+r3SGkZGeo66zu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2c7QzcGuxv3/+/3//////Pn+//3///3///////////79/f/////+/fz9/fv7+vn49fb08vDy8e/u7u3r6uzr6ejn5uXk4+Lh4OHg3t3d3Nva1PX8//n5+PP///////////z9/f78/fz9+v/+8sfU1Nri4ubq8/n8/51xhpKSnKWts7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTysnBtbT0//79/f////76+ff2+f3///////39/v////z+/v////7+/f3+/f369/j49/bz9fLw8O/u7Ovq6efm5uTj4uLh397e3t7d3Nva2drg7vv+/P3//////////vz+/////fz7+fXw5djS09re3Ofm+ev5//Zze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1MvJwra18P/+/f3////++v/9/P3////////9/f7////8/f7//////v39/f38+vf4+Pf28/Xy8PDv7uzr6uno5ubl4+Li4eDe3t7e3dzb2tnj3t7g39rY2tfZ3+Ln6urr8/Ly7+nj3tnPz83LzdPb39rm6Pjs9//3cnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTLysS2tOj///39//////v//////////v///f3+/////v39//////39/P39/Pr59/j39vP18vDw7+7s6+rp6Ofm5ePj4uHg397e3t3c29rZ4tzX1tLLxcO/v8PHzM/R0dHR0M3Ky8vIy8zMzNHW29zc6On17vj+/XF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzcrEtrLf///9/f7////8//////////////39/v/+//7///////7+/P78/Pv5+Pf39vXz9PLw8O/u7Ovr6ujn5uXk4+Pi4N/f3t7d3Nva2dHO0NXW1M/M1dTS0c/Lx8bLysjHyMvLzc/OzMzR19vc3ert8/D8/f1xeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083Mxbaw1Pz//fz+/////fz9/v7+/v7+///9/f7//v/9/v/////9/f39/v78+vj49/b18/Ty8PDv7ezr6+rp6Ofm5OPj4uHg39/e3t3b2trX09HQz87My87NysvKysnIxcXGycnIxsbMysjIztbc3t/s7vHw/f7tcHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POzMW2r8z3//38/f////3///////7+/v///f3+//7///7+/////vz9/P39+/r59/b19fL08vDw7+3s6+vq6ejn5uXk4+Ph4N/f3t7d3Nra2dfW1dTU1dbPzsvKysnHxsbFxsjKysrLz87MzNLY3d7d7PHx8P34y3B5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vSz8/GuLDF9f/9/P3////+/////////v7///79/v/+/v/+//////7+/P79/fv5+ff29fTy9PLw8O/t7Ozr6+no6Obl5OTj4eDf39/e3dzb2tva1tbV1tbVzs3NysvLysnJx8THx8nMz83NzM3T2d7f3+7w8fD/+axweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b09HQybmxxPX//fz8/////v/+/f3+///+///+/f7//v7////////9/fz+/Pz6+fj39vX08vTy8PDv7ezs6+vq6ejn5eTk4+Lg39/f3t3c29rSzcnIzM/P0M7NzMzLy8nIx8XGyszLztDOzs3N0dfc3uDx8PHw//6dcHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dDVzcHCsbj4+/3///////z+/v7+/v7+/f///////////v///v///////v37+fj6+fb39fXy8vDw7ezr6+vq6Ofm5OPi4uHf3t7e3t3c29rZ19XT0tLR0M/Pzs7NzMvLysrKysrKy8zMzs7N0tfb4OLf7vTx+v/3c3J7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3S1svBw7K39fv9///////8///+/v7+/v7///////////7//v////////78+/n4+vn29/X18vLw8O3s7Ovr6ujn5uXj4uLh4N7e3t7d3Nva2dfV09LS0dDPz87OzczLy8vKysrKysvMzM7PztLX3ODi3+708/n/+m5ye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He1tfMw8Wzt+36/P///////P////7+/v7+///////////+//7////////+/Pr5+Pn59vf19fLy8PDt7ezr6+ro5+bl4+Pi4eDf3t7e3dzb2dnX1dTS0tLR0M/Pzs3MzMvLysrKysvLzMzPz87T2Nzg4uDu9fT6/f9tc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnYysHGtLXh+vz///////z//////v7+/v////////////7///7//v7//fz7+Pn5+Pb39fXy8vDw7u3s7Ovq6efm5eTj4+Lg39/e3t3c29nZ19XU09LS0dDPz87OzczMy8vLysvLzMzNz8/P09jc4OLm8Pbz+v3/cHR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1sjCx7ay1Pv9///////9//////7+/v7///////////7////////9///8+vn5+fn29/X18vLw8O7t7Ozr6+nn5+bk4+Pi4eDf397d3NrZ2NfV1NPT0tHR0M/Pzs3NzMzLy8vLy8zNzdDQz9TZ3eDi6fH48vr89HF2foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg3NbGxMm3rsb9/v/+/////f///////v7+///////////+///////+/v/++/n5+Pj59fb19fLy8fHu7ezs7Ovp6Ofm5eTj4+Hg39/e3dza2djX1dTT09PS0dDQz8/OzczMzMvLy8zMzc7Q0dDV2d3g4erw+fH++NRsd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4d/XxcbLua+9/v///f7///3////////+/v///////////v7//////v7//v37+Pr4+PX29fXy8vHx7u3s7Ozr6ejo5uXk5OPh4N/f3t3c2tnY19XU09PT0tHQ0NDPzs3NzMzMzMzMzc3O0NHR1drd4OHu8frx//e2bniAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHg2MbIzrquuv////3+///9///////////////////////+//////39//38+/j5+Pj19vX18vLx8e7t7ezs6+no6Ofl5OTj4uDf397d3NrZ2NbV1NPT09LS0dDQz87NzczMzMzMzM3OztDR0dXa3eDh8PT78P/6pnJ4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6/0///6+//+///////////////////////8/f7//v////7+/vz8+ff29/b39vPx8fDu7ezs6+vq6Ojn5eTk4+Hg397c3Nvb2djX1tXU09PS0tHQz8/PzszLy8vMzM3Oz9DT0tPV2+Dh5Ozw9/z/9INseYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrew8f//+v3//v///////////////////////f3+///+///+/v3+/Pn39/f29/bz8fHw7+7s7Ovr6ujo5+Xk5OPh4N/e3Nzb29nY19bV1NPT09PR0NDPz87My8zMzMzNzs/Q09LT1tvg4+Ts8fn+//R7bXqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5sen///r+//7///////////////////////3+/v////7+/v3//vz5+Pf39vf28/Hx8O/u7ezs6+ro6Ofl5OTj4eDf3tzc29vZ2NfW1dTU09PT0tHQ0M/OzcvMzMzNzc7P0NPT1Nfc4OPl7fT3/v77d298hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurLf/P/6///9///////////////////////9/v7+/////f3//v37+vj29/b39vPx8fDu7ezr6+rp5+jn5eTk4+Hg397c3Nvb2djV1dTT0tHR0dLR0NDQz83MzMzMzc7P0NDT0dTX3uLl5vH28//+/3VzfYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry01fn/+v///P////////////////////////3+///////+/v7+/Pr4+Pf29/bz8fHw7+7s6+vq6Ofn5uTj4+Lg39/e3Nzb29nY1tXU09LS0tLS0tHQ0M/NzM3Nzc3Oz9DR0dLT2N/l5ujx9/L//fNzdX+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9tsz4//r///v//////////////////////////v////7+/v7+/fz5+fj39vf28/Hx8O/u7ezr6ujn5+bk4+Pi4N/f3tzc29vZ2NbW1dTT0tLS09LR0dDQzszNzc3Oz9DR0dHS1Nvh5ejp8vrz//fVb3iBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7fF9f76///6/v/////////////////////////+/////v3+/v37+/n49/b39vPx8fDu7Ovq6ejm5efm5OPj4uDf397c3Nvb2djV1dTT0tHR0dPS0dHR0M7Nzc3Nzs/Q0dHR0tXc4ujq6fP79f/3unF5g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4w/T++v//+f7//////////////////////////////v7+/v79/fv5+Pf29/bz8fHw7u3r6uno5uXn5uTj4+Lg39/e3Nzb29nY1tXU09LS0dHT0tLR0dDOzc3Nzs7P0NHS0dLV3OLo6uv1+/H/+7B1e4WOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7P4///8/////////////////////v7+/v7+/v7+/v7+/v7+/f37+fj6+Pf19PPx7/Dv7ezr6unn5uXk5OPi4N/d3Nva2trZ2NbV1dTU09PS0NDQz8/Oz8/Ozs/P0NHS09LW3N3d4ejv+/L///GRcYCJkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw7258v//9fz//f////////////////7+/v7+/v7+/v7+/v7+/v39+/n4+vj39vXz8e/v7u3s6+ro5+bl5OTj4uDf3dzb29va2djW1dXU1NPT09DQ0NDPzs/Pz8/Pz9DR0tPS193e3uLo7+7x+v/zi3iAi5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/vef6+vP8//3//////////////////v7+/v7+/v7+/v7+/v38/fv5+Pn49/b18/Hv7+7t7Ovq6Obm5eTj4+Lg393c29vb2tnY1tbV1dTU09PR0NHQz87Q0M/Pz9DR0tPT0tfe3+Hj6e7q8/3/+H11iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbvb9f/8///8///////////////////+/v7+/v7+/v7+/f39/Pz6+ff5+Pf29fPx7+7t7ezs6ufl5uXk4+Pi4N7e3dvb29rZ2NbW1tXU1NPT0dHR0dDP0NDQ0NDQ0dLT1NLX3uDi5ezx8Pz/++qAcY6QmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO60e///////f/////////+//////////////7+/v79/fz8/Pv8+vj3+Pj39vXz8O7t7ezs6+nn5ebl5OPj4uDe3t3c29vb2djX19bW1dTU1NLS0tHQ0NHR0NDQ0dLT1NTS2N7h4+fv8/f///jVb4KPk5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFucje9P////7//////////v///////////////v79/f38/Pz7/Pr49/j39vb08u/t7e3s6+rp5+Xl5ePj4uHg3t7d3Nvb29rZ19fW1tXV1NTS0tPS0dDS0dHR0dHS09TV09ff4uPn8PXy/vrxk3p7mJefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx8DAwtTp//7///////////7///////////////7+/f39+/v7+/z6+Pf39vb19PLu7O7s6+rq6Ofl5eTj4+Lh397e3dzb29va2dfX19bW1dXU09PT0tHR0tLR0dHS09TV1dTY4OPk6e719dvvl39+h5Saoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnIuq230/T4/v/////////+///////////////+/v39/fv7+/v7+vj39vb19fTx7uzu7Ovq6ejn5eXk4+Pi4d/e3t3c3Nzb2tnY19fW1tXV1NPT09LS0dLS0dLS0tPU1dbV2eLl5unv8/nYhHZ/jY+VnKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxr60rqirvdP9//////31/P/++vf7/P/8///////7+fj+/v7+/Pr59/Dw7+7u7Ono7ero5+fm5OLo5+Xk4+Lg3t7c2tra2tnY19fW1tXV1dXR1NXT09PSz87TzNLV2NDPz9nh6Ore5dptc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzs7CubOtqKquuNbt7fT////////+///+/f/+///9/fv7/f38+/n29PL08/Py8vDu7O3r6ejp6Obk4+Lh4ODf3dzf3tzc3Nzc29fX19fW1dTT1NXU0tDQz83V0M/X1d7b1NTY0+byrXVrcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHQxru2sa2mo5GSmLDc+/77/f//+Pz/+v3+/f38+/r6+fj4+Pf29PPy9/b29fTz8O/p5+bl5eXj4eHh4ODg397c29rZ2NjY2NfX19fX19bV1NPT09HP0NDP3tLJ09TQzdXU5rBuaGJdXXZ8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djU08zBubGsp6WXkZGQjo2Zt+n0/fTw9fn//v/9/Pr6+vz29vb29fTz8/Tz8vHw7uzq5+bl5OXk4uHg397e3t7c29zb2tnY2NfX2NjY19fW1tXU1NTS0dHQz9fKycrS7MmAUlRWXmJgbnt7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1tLOx761rqeipJqSiYeDeHl6eIGZxOr//////v38+/z/+fn49/b08/Lw7+7t6+nm5Ojo5+fn5uXk4+Lh4eHg3t3g397d3Nvb29nZ2NfX19fX1NbX2tvc297h2qdkVldMTVZUWWJhb314gIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnUzcfCvLixqaOem5GMiHlybnBuZm2K5f39/fz6+fn7/fn5+Pf39vX18O/u7ezq5+Xo6eno6Ofl5OXk4+Pj4uDf3t7d3Nva2tvV1tbX2drb3N7i5uvr7PD0pFI7RERHUVBmbGhsb3N4hIWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b2tXMycXAuLSro56Xk42FhXJ0cWVgdPD///37+Pb09/n4+Pj4+Pj4+Pb19fX18/Hw7u7v7+7s6+rp6Ojo6Ojm5efo6Ojn5+jq7O3u7+/v7u3r7vT39/f9/3lFPUFHTVdYYW1tdHqCfYOLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dXS0tLMxL66saimoJyakY6IgHJoZXP//v////339/f4+vr5+Pj39/b9/f3+/v78+/f4+Pj39fTz9vX19vf39vX5+vv7+/z+//X19PLv6uXi4ujw9/n9//9tTUpIUlZbYGBlbnp1goaJkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQhIqDeG5u0P////v+/PP08vT08/Lx8fHx9vf39/f39vb6+/v7+/v6+vb29/b29/f38vHw7uzr7Ovl5+jm5uTj4t3o7v35///2RUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlYqPiH1zbrr////6/fry8vDz8/Lx8fDx8vX19fX19fT09fX19fX09PPx8fLx8PDy8u3t7evq6enq5ujo5uTl4+Ph6u/99////khMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuTlY6DfXOf+P//+fv58/Dv8fLy8fDw8fLz8vLy8fHx8e7u7u7t7ezr7+7t7Ozs6+vq6uno5+jq6efo6efl4+Pj4+nv/vr8/+NNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKaimZmTiIZ6jP3///n6+fPx7/Dx8vLx8PLz8fHw7+/v7+/u7u7u7ezr6uzs7Ovq6+vr6+vq6enq6uvo6Ojm5eTk5OXp6/7+/vivUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqJ2emY2LgIb8///5+fz18/Dw8fLy8vLy8+/v7u3s7O3t8vLx8fDw7+7r7Ovq6+rp6err6enp6enp5+np5+bk5OTn7u36///6iFNXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6ipJ6SkoaK8f//+fn99/Py8PHx8fLy8vHu7u3t7Ozs6/Pz8/Py8fHw7Ovq6erq6enq6eno6eno5+nq6ejk4+Pk5/Hx/f//+WtXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezqKiimJqKjdn///v6/Pfy8fDv7/Dx8vDv7+/v7u7t7Ozw8PDw8O/v7uzr7Ovr7Ozs6Ono6Ojn5+jq6ejo5OPj5ejw8f7///haW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t62tp5yeio7G///7+fz28u/w7u3v8fHv7e/v7+7u7ezr6uvr6+vq6urv7+7t7u7u7unn6enp6enq6uno5uXj5OXu7+37////WF5iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u1sKqloJeWm/T///T28+zn7u7u7u7u7+/r6+rp6enp6ejp6uvq6uns7Ovt7Ozt7ezq6+rq6erq6ujp6Ojl5OTl6+r3/f//62ZgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/trKtp6KZlZf2/P/08vLs5Ojo6Ojo6Onp6eno5+fn5+fn6Onp6unp6urq6uvr6uzs6+vq6erq6uro6ujo5eTk5evr9/z//NhiY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7i2saqlnJaS9vf78fDv6uDk5OTk5OTk5OTj4+Li4uLi4uPk5ubm5+jp6ejo6urp6evp6enq6urq6evp6ebl5OXs6vr7//e+YmdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS7ubSspqCYkfLu9evr7ejb4ODg39/f39/c3Nvb29vb29ve3+Di4uPk5eXl5+jo6urr6ejp6Ojp6urr6unm5eXm7er+/P/1pGVqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGvbq1rKahm5Ln5Ozk5efk1dbW1dXV1dXU1tbV1dXV1dXX2Nna3N3e4eLj5OTl5+fn5+jn6Ofn6ejq6+rq5+bl5u3s//3/84tkbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx724tKykoJuS0Nfk297g2c7S0tHR0dDQ0M/Pz87Oz8/P0NHU1dbZ29ze39/g4eLj4+Xk5OXm5+jn6erp6efm5ufu7//8+/J4YW52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa8tbGqopyYkbrK29DU1dDEysnJycjIyMfHxsbGxsbGx8nKy8zP0NLU19fa29vd3t7j4uLj5eXm5+jp6enn5ubn7vP//fj0cGBxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDurOwqqCZlY+rwdTJzs7Ivr+/v76+vb29v7+/vr6/v8DBw8XFxsrMztLT1NfY2drb4eDh4uLk5efn6ejp5ubm6O70/v74+HFidHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jo4tvX0dDKwLy1raefl5GNm7bHxsK6tLS8uri2uLi1s7a3t7a0sK+vtbzAwL7ByMvJzc3Ly9HX19na29zh4+bn4+Xn5ubn6enr9vz//fRrbHV+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn4d7c0sjCvriyqqSemJGHgo+twcK/vLu/qaekpKWjoqCgoqSlqq2xsa6oqKyxsrKwxcHAxsrLz9XV1tnb3uLl5+Lk5uXk5ufp6/X6///zbmx3gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497X0crBvLStrKOclpGLg3+HorOyqqGhpaCfnpydnJuXkZGUl5qcnqCgn6Ous7O5v7O3ur7BxMbH0NDT1dre4OLh4+Xk4+Pm6Ov3+///5m5weoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7S0s/KxL2zrK6lnZWLgHdzfZKmqaaioaefnpucnJqZl52em5eSjIeEm5OPkZmfp6ykrbW4ubq6uMfJy8/U19zd3+Hi4ePj5ujr+fz/9s5rc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY0crFwcC6r6ibkYiEh5WouaGpr6ukmpaWn5+enpycmpmRkpKRjo2KiXh/hYeIjZOWpqCgp6yxuca+wMXIztHV2drd4ODi4+Xn6vr8//O7and9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cDBv7qzp5qZjJaptbSsop+ysK6qpKGen5qampiYl5SUjo6Ni4qJiIiAgYGEhod6aYSFjp+utbi8t7q+wsfL0tTX2d3e3uDk5+r5+//2r216foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe9vrWnnJefrrm1sKuknpyfpqCbmpqZmpuPjo6NjIqJiZSRjoyIhoSDh4aCe3h2cm18f4CEjZecnqyxtbu+w8rO0tXX29ze4+bq+/r/9KJte3+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/u7Gmqba7sq+xrq6vraqlpaCZk5KSk5KTkJCPjIuLi4qCg4ODhIOCgXp5eHh2dnV2Z2Nka3J8kaelqK6yuL3DyM/Q1dfa3OHl5/z8/u2VanyBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTZ1s7Ix8W6tZ6msba1tLS2ramno6Cdm5mZlZOQjouJhoeEhIODgH9/fn59fX19fX15eXZ2c29ubWtmXlVZZ2pcoJynq67CybzGzM/T1dnd4/Hx8f71eXZ7g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd0c3Qy7uuqaq7vb23r6urrKimpKGcmZeUkpCMiYiFhIF/f35+fHx7e3h4eHh4eHh4dXV0cnFubGtpamdcVFtlalyOmpulqba7wcfLztPX2+Lw8PH+9nd2e4OMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1M3OyL2xpKe4ureyqqWjpqiioJyZlJGNjImGg399e3p4d3d0dHNxcHBwcHBwcHBwcG1tbW1rampnZ2dlX1RKS0xNT4CSk6ass7i+w8nN09fe7e7x/vd2dnuEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083QxruqprO9tbKxrKWioaOjmpeTjoqFgYB8end0cW9sbGpqaGhnZWRkZGRkZGRlZWVlZWVlZWVkZF1cXF5YUEU/Rkg4YI+aqKawt73CyM7T2urr8f34dXZ7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGxLemqLi7sq+zr6yopJ+cmo+LiIJ9d3NvbWpoZWJhXltcWVlZWFZWVlZWVlZXV1dXWlpbXV5eXV1YWFhWVFFPS0Q4My1XjJGoqa+1vMLIz9Xo5u7593J0eoWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3Evq+lrb24q6murKikoJyXk4+AfnlybmhjYFtYVlRRT0xLSUlJR0dGRUVGR0dHSEhISE1OT1BSU1NVXFxVTk9PSkQ6Pzg1KT6DmaCnrbS7wsnQ4+Ps9/ZwdHqFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurOds762rqmpq6ainZeRiYJ+dHBrZF9ZVFBKR0VDQD47Ojk5ODg3Nzc3ODk5OTo6OjtAQEJFRkdISlVSSklRT0Q6Njk8LCMgNnaVnaSstr3Dy+Hg6/X2bnR6hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKsrrW3sK2tqJ+bmJSNhHxzbmpoYlxUT0hFQD47NzYzMC8wLi4uLiwsLC4vLy8wMDExNjg5PD5AQUNEQj5FTUo9NTwuLTMkHi4zj5eeqLC5wcng3+r09W10eYSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+Hb2crAxLaXpa6trKunoZyYlY6FenBoYl9RTUlFPjg1NCsqKicmJiMjHh4eHh4eHh4hIiIjJCQlJSUoKCwuMTQ0OTo7PD4+PT42MCslIBwbGTOKnqScv8C/z+Dp7O1tcX2GkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u7t6ubj4eDf3dvY1NDPy8rNzMvKy8vLy9XX1dHQzs7O19jZ3d/g4eTn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc283Iva+ltK+sq6qnpZ+XkoyFe29mYFhWRkM/OTUvLComJiQjIiIgHx0dHR0dHR0dHh4fHyAgISEhIyQnKiwvMDM0Nzg5OTk4MzAqJB8dGRcrV5qUn6W8vsnb4+nrbHB8ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7s6ePg4NvVz9DOy8jHxMLCxMPCwMDCwsK5uru8vL7Cw8bJys7R1tve4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1tTGwrmdqbK1qammo56Xjol9d2thVk9JRzY1Mi4pJSIgHx8fHxwcHBwbGxsbGxsbGxoaGhsbGxsbHB0fIiMmJykrLC0wMTEzMzAtJyMeGxcXGyV3jZeXrbzD1N/n5mtve4WPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn5eLd19POysrEwsG/vb68u7e2tbSzs7S0ra6ztrzBxcjBvry/xM/X2tnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDKw76opqmjraako52XjYN8bGVbUEY/OjgrKickIB4cGhsbGxoaGhgYGxsbGxsbGxsYGBgYGBgYGBoaGxwdHyAgJSYnKCsrLCwsKCQfHBkXFgoSQIWMn564vdDb4+Jqb3qFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi39/c2NTPycXDx8S+ubOwra2mpqWjoqKhoaanqaqsrq+ws7vDxcLAw8jQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLvsCvo6mhnqagn5uVjIB1bltVSkE6NC8tJCIhHhwaGBgaGhoaGBgYFhsbGxsbGxsbGBgYGBgYGBgZGhoaGxsdHSAgISQlJigoJiQgHBsZFxYJFRljiJ+crbfL1d/caWx4g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnWzsjJyMXCv66rp6WlqKyvp6WmpqOin56YmZmZmJiYmKSmrrW6vby9xMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbOqp6ueo52fmpeSiX9yZl9ORz41LisnJh8dHBsaGBkXGhoaGhgZGRkbGxsbGxsbGxkZGRgYGBgYGhoaGxsbGxwdHSAhIiIlJSIfHRsaGBgWExkUK3yIpJ6wxc3Z1WZpdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSy8fDvbauqq2jqrG1s6ylnqChoKCdmZeWjIuKiomHh4aLiImRoLC8wLq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72tmqqlo6GempGMiH1xZFhRQzw2LCckISAeHhsbGhoaGhwcHBsaGhgYGxsbGxsbGxsaGhoaGhoaGhwcHBsbGxsbHR0dICAhIyMeHBsZGhgYFhocFxBNdaCSp7zE085gZ3N9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxsW5rqahpbC/ra6rp6Ofnp+enpyal5OSj4+Mi4mGg4F9dnl8foGKmaaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3qqWeoaOjnJiMiIB2aVtORj02MCgjIB0dHh4eHRsbHBscHBwbGhoaGhoaGhoaGhoaGhobGxsbGxseHBwcHBsbGxwcHR8fICIiHBsaGRcYGRgbHxUUGnGQjKK1vszIXmVxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb27squyu7iwqaipqaqnpqeompmWko+Mi4qJiIaFg4F+fIB2aGRpdHl8oaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHz39PW0sa9s42po5mcmJSJh31xY1dLQz0qKSUgHBsaGBsbGxsaGhoaGhoaGhoaGhgZGRoaGxoaGhsbGhoYGBgYGxsbGxsbGxsbGxsbGxsbGxoaGhsaGRkYHRQVIQc1g4qnqLC+wmxlcXF5h5CZoa20ub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PPw8e7v7+/t7uTj4+Lh4eHh5+fo5+fo5+fo6Onl4OHg2tXWy8PDv7mxl6u8urOxsbCop6OhnpyamZOSj46LiYmJhYWCf316eXdycm9tZ2NhXmZ/mKartLm7ytHU19zk6enu8PP2+Pr7/P/+/Pv69/Pv7uDVzsvBsamZqJuVmZWPiH53alxQRTw2KSgkIBwbGhgbGxsbGxsbGxsbGxsbGxkZGhobGxsbGxobGhoaGhgYGBsbGxsbGxsbGxsbGxsbGxsaGxobGhkZGBwWFxwMMGyIkZiir7JiW2R0fIiUnKOqrrO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro5+Ph393l5OPj4uLi4tvb3Nze3t/f4d7f4N3c2NPMycfCuqeguL2/vLKrrayqpqKgnZqYl5SOjoqJh4SEhIGAfnx7eHV1cXFubGZiYF9vXmeJoqSuwbzI0M3R2uTl6+3x9Pb5+/z+/Pv6+PXw7Onh1snEu6ajoJ+SkZONioF0a15SRDo0LyUkIh8cGhobGxsbGxsbGxsbGxsbGRkZGRsbGxsbGxsaGhoaGhobGRkbGxsbGxsbGxsbGxsbGxsbGRsZGBoaGBkcFxoYESVLgIaPnaqpXlNYbHJ7g4yVnKGss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6eXk39vZ2NXT2tnZ2NjY2NjZ29vb3d3f39jV1tfUz8zJw724tamouLm3tK6npqanpJ+dmZaUkI2Mh4SDgH98e3t6end3dHFxcW5tbGllYV9eVlVQWHKTp6q4u8HHzNTc4ubp7fH09/n7/vz6+ffz7enk4NjEwLSeo5iUiYuMh4R4Z2BTRjoyKicgIB8cGxoaGxoaGxsbGxsbGBgYGhoaGhoaGhoaGhoZGRsbGxobGxsZGxsbGxsbGxsbGxsbGxsbGxsaGhgYGRcYHBgaGBQYMXCCjZyrqWJTW2hudn2Di5Oapa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHg3djT0M/Oy8zLy8rKysrK0NHR0tPS0tPOz8/MxsPCwMOzrKSsvLmyrq2sqqeioJ6XlZGNiYWCgXx7eHd0cXFvcHBubWxsa2tpaWhlYl9eW0lMSkVMYoGVtK6zxdDO0t3h5Oru8fT3+f78+vj28evm3dvUxLiml6KQjIaHhoN9bF9WSj0zKyUhHBwcGxsbGhsaGhoaGhoaGhkZGRkbGx0dGhoaGhoaGhodGxsbGxobGxsbGxsbGxsbGxsbGxsbGxsbGhoYGRgXGBoaGxkYEilZdXqFlZBPRFFfaHJ7f4WOlJ2krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dPQz8/NzMq+vr29vLy8vMPBwL69ubm3wsbFwL29ubSwpaGzurCvqbKvrqqknZmXjIqFf313dHNtbWppZmRkZGNjY2NjY2JiYmFgYF1aWVhXTEVEPTpQa5Gfsb/CxcrU2+Dm6+7x9Pf9/Pr39O/o49nUzcOwmZCXjoyHgoB9c2ZXTkE1LScgHhsaGhobGxsbGhoaGhkZGRkaGhobHR0fHhkZGRkZGhobHBwaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxoaGRgXGRkYHB4cHBkxSICBho+KUk5cXmZvd36FjpWVmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0c3MycbDwb26ubi3t7a2tba4uLm9vsDBwbq8uLS1tKykl523uqypqayqp6Sgm5aOin97dnJtaGRhXl1aWVdVVVNWVlZWVldXV1ZWV1dVVVRUVlJJPTw9NytXg6evrbnHzNTa4ebq7fL1/Pv49vLs5eDUzMO/qZORiI6MhYF/eWhfT0Y7LygiHhwaGhoaGhsbGxoaGhkZGBgXGhkaGxwcGxwXFxcXGBgZGhcYGBcYGRoZGxsbGxsbGxsbGxsbGxsbGxsaGhkZGBgYFiAlHSIqPEJub3J2b0VBTExUXmlye4OHkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jHxLuzr6qmpamop6alpKSkmJqgpqyyt7iuramoqKOeoJi5v7Cnpqmno6Gblo+GfXJwbmhhXVlUU01NTElGRkVFRkZISUlKSkpMTU1OTk5OTU5HQ0FBOSobKFF/lqSwvcbN09vi5urv8/v69/Xx6+Pe0Mi+vqaUlH+OiIB+f3VhWExDNi0lIBwbGBgbGxsbGxsaGhoZGBcXFxgXGBgXFxcXExMTExQVFhcUFBYXFxgZGhsbGxsbGxsbGxsbGxsbGxscGxoaGRkZGRUiLB0qOUJCSFZnd4d1fYmIi4+SjoV3bZCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9v7mxq6mrrrOhoJ+enJybm5WVl5eYmpqZoJ+en5yVmqm0s7Kurqylo5eXkoh/dWtjZ2NfWVNPSkdEREI/Pjw8Oj4+Pj9CQkNDR0dISUdISEg/QUA+Ni8sLhIgS4WlqbC8x87X3+Tp7vP8+vfy7ung2dLJv62afoGJh4J9dm5iVk4/OS8mIB0bGhsaGhoaGxsbHBoaGhsdHh4UFBQWFhQSERcWGBoaGRgaGhkYGBgYGRoZGhsbGhkaGxsbGxsbGxsbGxsaGhsbHBwdISUrMTg+QFVcZW53e3+ChIeKiomGgn51dHl9h5ams6S9y83Oy9Li3OLd2Nva1tbIzNDPyL6upJ+otLi2r6ypo6CfnJmWk5KPj4yKjpGNg4eGjZmUhJS3ra6rqqadl5OPiYF4bmReWE1JRUE9OTUzLSwsLCsrKiorKyssLS4xMjc3Ojw+QkNEPjs4MiskHRgnDwo0fKuztMTJ0dbg6Ozx+vn18Ozn3tfOx7ismIKBhoN/enRqXlRMOzcsJR8cGxoaGhoaGhobGxoZGRgZGhocFBYVFhYVEhETERIUFBMTFRcXFxcWFhgcGRobGxoaGhsbGxsbGxsbGxsbGxobGxwcHyMnLTM5P0NVXGVtdnt+gIOGiImIhYF+gXlyb3J9iZGpsLS7xcjHzNvZ19PU09DOzsbDvbCmrby7u7izraelop+em5mVkpGOjI2KiY2SlpOkoph+bouwtKuqpqSgmZKLhX53bWRcU09BPzs3My8sKicnJyYmJiUlJiYmKCkqKy0tLzAzNjc3ODUxLSolHxcTGxQUHEF/p7S3xczT3+Di8/n49O7q5NvTysGwppSGgIN+e3ZtZVpPRTgzKiIdGxsaGhoaGhoaGhoaGBcVFxgZGBoXGBgZFhMREA8QExAQEBMVFBYUFRYZGxgZGxsaGhobGxsbGxsbGxsbGxsbGxscHCIlKi82PEFGV1xlbXZ6fX6BhIeHhoN+fHtvY1xfZ3BzlJqlr7W2usLHys3Pz83KycjBsaOntby3s6+qp6ainpucmZeUkY2MiouKiYiJjZSZkpqmmo6jrpelo6Ccl5CHgXRwZl1TS0NAMzIuKigmIiEfHx8fHh4eHh8fHyEiIiUmJicoKywsLC0oJSQhIBoVEBQZGgsNP4OztMHFzdzi5e759/Pt6OLZ0Me8qZ2MhXx9eXdwamBVSEEzLiYfHBsbGhoaGhsaGhoZGRgVFRYXFxUZGBYVFRQTEA4ODxAQDxETExQVFRUWFxoYGRsbGhoaGxsbGxsbGxsbGxsbGxsbHBwkJisyNz5ER1VcZGxzd3l6foCBg4B9e3hnZmRjYVtTS2t9l6eoq7S/u8DGx8XEwr26qaSxvbm0s6mnpqSioZuYlpSTkI2Jh4eHhoWGh4eNkouMk5qbnJ6cm5qXkoqDenRjX1ZNQzs1MSknIyEeHhwbHBsbGxsbGhoaGhwcHB4fHyAgISIjIyIhHBwcGhkWExATFRQMBBBKlqq1wtPW3ubp+ffy7Obf1s3CuaORg4F4d3RybGRcUEQ7LikiHBoaGhoaGhsbGhoZGRkYFRcYGBgWFBEODQ4NDAkNDQ8PDw0PFBMVFhUUFRgbFxkbHBsaGhsbGxsbGxsbGxwbGxsbHBwdJSYsMjc+Q0ZUWWBobXFydHh5e3x7eHVzbGxrZ15TRT5OXHSOo7GzrrK2u7q6u7atnKW1v7itrrSsqqekoJyYmI6NioiFgn9/gHx8foGDhomHjY2QmJiVnJCMioR8c2plU05IPzYwKiYgHx4cHBoaFxsbGhoaGhoaGRkbGxscHBwcGx0dHRsZGRgWFRUWFBAOEAsMDw0HG0uotLrO1N3i5vj28erk3dPKvregiHx7dXNxbWhhVkpANyomHxsaGhoaGhobGxoaGRgbGBYYGRkYFRIOCQkLCwsIDg4PEA0OERUUFRYWFBUZGhcYGxwbGhobGxsbGxsbGxscHBsbGxwcHSMmKi81Oz9DUFRaYWVoamtvcXN0c3Fta3RuZ11UUExNQ0ZSbpKppp2lqq2ws6yhm5y3wrGnrrOrpKSinJeVk5GFgoF+fHl3dnp1c3R5fX6BhoyMi42Rk5CBf3x1bWNaVEZCOjMtKCIfHRsaGhkZGRgbGxsbGxsbGxkZGxsbGxsbGxwaGxsaFxQWFhQUFBMRDwoKDw0QFQ0IeK69y9Xi4+j39e/o4trQx7i0n4B5dnBxbmlkXFNGOjInIx8aGBgaGhoaGxsaGRgXHBoWFxcWFBEQDAkJCQwLCgwNDg0MCg8VEBQWFRQVGBoWGBscGxsbGxsbGxsbGxsbHBwbGxwcHR0hJCgsMjc8P0hNU1leX2FiaGhqa2poZWNkYV5YVE9MSUdDRVZzhpCbm6Gjp6WWk6O4sq+vrqump5+cmpWPiYJ/enh3dHFubWpwbWxtb3J1eHt5fn58fH58c29sZV1USkQ7ODIrJiEdGhwaGRkaGhoaGxsbGxsbHBwYGhobGxsaGhwcGhscGhcUFxUSERIRDw4KDg8JDBINB0qfwc/V39/m9vTu5+DYzsW0saB8eHRwcGtmYVpQRDgxJyMdGhgYGhoaGhsbGhkYFxwZFxUVFRINDwsHBwkLCwkHBggJBgULEA4RFBQTFBgaFhgbHBsbGxsbGxsbGxsbGxwcHBscHB0dHyImKy81OjxESE9UV1pcXGFjZWVlY2BeVlRRUFBOSklRTERMXGd+m4+UlpiUiZ3Ks7GwsKumoJyZlI6GgXp0cHJwb2xqaGVlZGZmZ2lscHNtb3J2dHFqZ2tnY11USUA5NzItJyIdGhcdHBsbHBwcGxoaGxsbGxsbGRkZGxoZGRoZGRcYFxgUERMPDQsKCQkHDQwHBAUACCmCrbTJ1N7c5Pfy7efe2M7Csq2NdXBvb2dmYl1VSj40LR8eHRwaGhsbGxwbGBgaGRYSFBUWERETFBISEAcCAAACBAgNEBALDA4LFBQfGQ8OHRgaHB0cGxsbGxsbGxsbGxsbGxsbGxsbGyAgJCcrLjEyPj9CRUlMUFBSVFRUVFVVVVBQT01JSEhJQUhRUVpwem6Nf4uRiY2nt6+tqqaim5WPjYh+dG9oZGNeW1pZV1ZWVlZWWVlaXF1dYmNjZGNiYWBXVE1HQTo1MSwpIyAdHBwbGBgZGhkZGhocHBsbGRkaGxoZGBgYGRsbHRoXFBcbGBMJBwcJDAwICBELAwMFEUmPqLK9yNLa4en28evl3dbMwLCrinNvbm1lZGFbU0k9MSsfHh0cGhobGxscGxgYGhkXFBQWFREOEBAKCgoHAQAECwgLDw8LBQcKCAwOGhsSDh8aGhwdHRsbGxsbGxsbGxsbGxsbGxsbGxsfICMmKiwtMDc4Oz5AQ0VGSUlJSUxMTExKSkpHRURFRURJUVBUaXh1cn16e4uzrqCqqaWjnZaPioR9dWxkXlpZVFFQT01MTExMTE9QUFNUVFlZWlpZWFdWUExFQDo1MC0pJiAdGxsbGhgYGRgZGhkYGhkZFhcXFhcaGhgYGRobGxkWEhASExENDAsHAwQHCQcFAwUGGVSNnaq1v8nT2uHp9e/q49rTyLyvp4ZwbWxsY2FdV09FOS8nHh0cHBoaGxsbGxsYGBkaGBcWFxUPDA4LBgQDBAQJFiMrLzEtJBoZGw4JCRcbFg4cGxwcHR0cGxsbGxsbGxsbGxsbGxsbGxsbHx8gIyYpKiosLC8wMzY3ODg5OTs8PD8/QUJAPz8+P0BCSlJQTl5vdWxpa3alr6SipKOfm5aMg31ybWRcVE9LSkNCPz8+PDw8PD4/QEFEREVLS0xMTEtKSUM/OzYzLSomIyAcGhgaGhkXGBcXGBgXFhgYFxQVFhUVGxsZGhscHBwXFBAOEBANBw8IAgcKCQcFAggHKWiHla6uuMLL1dvi6fTv6eHY0Ma6raN9bWxqal9dWVRNQjcsJh0dHBwaGhsbGxsZGBoaGhgYGRkXEAwLCgkEBAYRIDRDT1FWU0tAOzkcDwwZGRYZGhwdHx4dHBwbGxsbGxsbGxsbGxsbGxsbGxwfHx8iIiUlIyMkJicnKioqKiwsLTAwMDU2Nzc3ODk7PUZRVFJbaXCIVmCUoaGfoJual5CJgHZvYFxTSUM/OzkzMi8vLiwsLCwvLzAxNDU1Ozs8PDw7Ojo2Mi8sKicjIB8cGhcXGBgZGBgYFhYXFRQYFRQUFBMVFhgWFxYXGRgXFhMRDw8OCwgPCgcGBgQIDAYPPnGDkaKosbvFztfd4+v07ujh18/EuKycdWdqZ2dZWlZSSUA0KiEdHBwcGhsbGxobGRgaHBkXGRkZFhAMDQ0IBgUNIjxPV1lcYGNjXFZSLB0QGBYUIhcfHyAhIB0cHBsbGxsbGxsbGxsbGxsbGxscHBwcHh8fHxwdHR4eHh4gICAhISQlJScrLC0vMDM1NjhBT1ZZX2duh2h5l46XoZiQj4qEfG9lXk5KQTo0MC4tJyYkIyMjISEjIyQlKCgpKS0tLS0tLSwsKykmJCQhHh0dGxgXGBgZGhkZFxcYGBcWFRUUExITFRYREhERExESERQRDg4OCwcFCQkHBQYICAUgUHGBk5ygrrS+yNHa4Obt8+3n39bNwraslm1kZ2VnVVdUT0g9MSghHBwcHBsbGxsaGxgaGxsZFRoXGRUNDA4NBQYLHTlRXF1cX2JmaGdjXkMpFhQTFCMZISIiIiEfHRwbGxsbGxsbGxsbGxsbGxsbHBwcHBwbGxsbGxsbGxsbGxsbHR0eHiEhIyQnKCstLzA3PEdSWmBpb3F7j4aKiZCVgYB8dWpgVE1BOzQuKSUkIiAgHR0cHBwcHR0eHiEhIiIkJCQkJCQkJCIhICAeHh0cGxoZGBcZGhgcGRgXGRgYFhcWExMTExUWEhESExISEA4XEg8PDgoHAwcBAQcJCBEgYm+Cj5Wfp6q6xM3V3uPo7/Ls5t7UzMG1rJNmYGZlZVFVU0xFOi4lHhsbHBwbGxsbGhsYGRsdGhQYFBUSCgkMCwMEEjFPYWNhZ2psbW5taWVgOB4OFxkZHSIkJSMiIB8dGxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkZGxsbGhoaGhobGxscHR0dHx0eHyIkJystNTg+SVJbY2hxbXaHg4F5gnRybGRbUEY+NzErJSAfHh0dHBwbGhobGxsbHBwdHR8fHR0dHR0dHR4eHRwcHR0cGxsaGRcZGhgYGhgUFRUSERAUExEPDxERExQTFBUUExAOEhEMDg0LBwYJBQUHBxM6YHWAi5Odo627wcrT2uLm6/Hx6+Xd08vAtKyQYlxlZGVRVFBLQzktJBwbGxscGxsbGhobGBkbHRoWFhQSDwkHCgsEAxY+X2ppbHl9f358e3hzdkElDRwdDyQjJCYmIiEgHxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkZGR0bGxsbGhoaGxsbHBwcHh4ZGh0eISQnKTQ1O0FKUllfbGBuf4FwanVsaGJcUUU8NzAsJiEdHBwbHBwbGxoaGhoaGhsbGx0dHRsbGxsbGxsbHBsaGxwcGxwaGRgYGRgYFxcUEQ8ODgsJCwoJBwcJCgwSEhESEhAODAoHBggJBgUGBQkIBx5IaXV9hY+Yoq24wcbP197k6Ozy8evk3NLJvbGseWVdX11XVFNNRj01LCQfGxsbGxsbGxscGxgZGRwcGBYVFxQODA0OAA09V2Joc4CAgoODgoF8eG9xLxgXICcdKissLConIR0bGxsbGxsbGxsbGxsbGxsbGhobGxsbGxocHBsbHBwbGxkaGhobGxoaGhsdHx8iJCUtMTU7QUdOUF9iZmlqZ2NhW1VORj05NDIiIR4cGxsaGhgYGhoaGxsbGxsbGxoaGhobGxsbGxsbGxoaGhsaGhkZGRoXGBgaGRcQExMUDwwMDwUGCQgJCwkJDg4NCwkLCAUJBwsOCwkIAQMADDJccHh8iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wqndjW19dV1RTTUY9NSsjHxsbGxsbGxsbHBsYGRkcHBgVFBYTDQsNDAAQQ11pbnmEiIqLi4qJhH91dDMbGyUpISstLS0rJyEdGxsbGxsbGxsbGxsbGxsbGxoaGxsbGxoaGxoZGhsbGhkZGRkaGRkZGRgaGxseHyIkKy00OD1ESkxXW15hYV9bWFFNRDw1LisoISAfHRoaGhoZGRkZGhoaGhsbGxsaGhoaGxsbGxsbGxsaGhobGhoZGRoZGBYXGBcTExQVEwwICAsMCgsNDg0ODwgJCAYHCAQACwgICgYBAwgAFjdYcXyDiZWcp7C3vsfO1dng5uru8vTw6uPa0Me7r6d3YFpdXVZTUExFPTQrIx8bGxsbGxsbGxwbGBkZHBsXExITEQsKDAsAFktlcHaBi5GTlJSTkY2IfHs+ICQsLSYuMDAwLCchHhsbGxsbGxsbGxsbGxsbGxsaGhsbGxoaGhoZGBgZGRgXGxsaGhkZGRkWFxgZGxweICgpLTM4PENFS05RU1NRTUpGQjsyLSYiIB8eHBsaFxcYGRkYGRkaGBkaGhobGhoaGhsbGxsbGxsbGhoaGxoaGRkaGhkXFxYVEBMWFxEKBgcLDAkKDg8LCw8JCgoKCg0MCQsKBgMFBgUEIkNjdoCGj5ehp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6ldWBYXVpVUk9LRDw0KyMcGxsbGxsbGxscGxgZGRsaFhMSExAKBwoJAx5Ua3Z/iZKZm52cm5qVkISCTiYrMTEsMTMzMy0oIR4bGxsbGxsbGxsbGxsbGxsbGhobGxsaGhkaGRcXFxgXFhsaGRgXFxcXFhcYGBkYGxwiJiotMzY5PT1AQ0VEQj47OzcwKSQfHRsbGhgYFxcXGBkZGxoYGRkaGRkaGxoaGxobGxsbGxsbGxoaGhsaGhkZGxkYFRYXFhATFBINCAcKDQEBAwgIBAICCAcIBwoMDA4NCQMHCAURLFhpd4CJk5qgq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtonNdVFpaVFFPSUM5MSggHBsbGxsbGxsbGxsYGRgbGRUUEhEPCgcICAgnXHB7hY+aoqWmpqWjnpiJiWEsMjQ2NTc3NzQwKiQeGxsbGxsbGxsbGxsbGxsbGxoaGhsaGhkZGRkXFxgZFxUbGhkXFhYXFxYWGBgYGBkbHyAlKS0wMzQzNjg6OTczMC4qJR8bGRYWGxkXFxYWGRkZGRoZGhkaGRgZGhsaGxsbGxsbGxsbGxsaGhobGhoZGRwZGBYXGRUPDg0LBwMDCAkGBwkICAkIBwUGBQYGBQgLBggHBQoYPGd2foWNmaOnrba8xMvR197i5unu8vT2+fvu6OHYzcS4rJ1yW1FaWlNQTEhCOTEoIBwbGxsbGxsbGxsbGBkYGhgTExIREAgICgoLLGF1goqTn6iqrKyrqKOejZFyMzc3OD06Ojk3MSskHhsbGxsbGxsbGxsbGxsbGxsaGhoaGhkZGBsZGRgYFxYVGxkXFhUVFhcWGBgXGBcZGxsdISUoKCstKi0uMTAtKygmIx4cGRoYFhoYFhYXFxobFhgaGRcWGBgXGBkbGxsbGxsbGxsbGxsbGhoaGxoaGRkbGhcWFhcUDgsJBwUBAQUKGSYzNjc1Kh0NCQQEBQUFCAEEAgomT297foaPmaOpsLq/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKubcFtQWFpSUEtHQTgwKCAaGxsbGxsbGxsbGxgZGBoYExYUFBAJCAoKDzBmfIiRmqWusbOysa+po5SVfTg+PDtDPT09OTMrJB4bGxsbGxsbGxsbGxsbGxsbGhoaGhoZGBgbGxoYFxYVFBkYFhQTFBUWFRUWFhcYGhsZGx0fISMkJiIlJyopJiMhHhwZGBkZGRkWFhQTFBYZGhQWFhcVFRcYFhcZGxsbGxsbGxsbGxsbGxoaGhsaGhkZHRsXFRcWEgwLCQkIBQYTJEZLT1JUVVRQLRwLBAQEBAMJBBM5X3Z+f4eRm5+nr7jFyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirmnBZTVdXUk9LR0E4MCcgGhsbGxsbGxsbGxsYGRgZFxIWFRQRCgkMCxIzan+PlZ2ptLe5ubi1r6mYmYI5Q0E/REBAPTk0KyQeGxsbGxsbGxsbGxsbGxsbGxoaGhoaGRgYHBsZFxYVFBIWFBIQEBETFBQVFxYXFxgbFhccHR4gICIgICIlJCIfHhgWFBUWFxcXEhAPDxATFRUSFBUVFBMWFxYXGRsbGxsbGxsbGxsbGxsaGhobGhoZGR0bGBYWFQ8JDQ0NDAgNJ0FRVFphZGNhYFo/HwwKCgcFCRpEbnp6go+Rm6CmsLzEydLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qp5wV0pTVE9NRkQ9Ny0nIB0bGxsbGxsbGxsbGRkZGhkVFA4MDAwMDAcHOG99iJeqs7i6vr68ubWvoZeKREdGTEJDQkE7Ni0lHhsbGxsbGxsbGxsbGxsbGxsbHRwYFxkZFxoXGBkZGBgUERMTEQ8ODA0ZGRkVEhITIxcZGx0dHR0dIiAdHBwcGxoaGRgYGRcUEhcXFhYVExMTDxUVFBYVFxsZGxscHBsaGhsbGxsbGxsbGhoaGxwcGhkaGBUVFRcVDgkJBwYDIEhZWF1jZmlsbm1wclQSAwEHDS9ee3qCjJOboKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mecFdKU1RPTUZEPTctJyAdGxsbGxsbGxsbGxkZGRoZFBcRDQwMDQ0ICTlxf4uZrLW5vMDAvru3saOZi0ZHR01DRUNBPDcuJR4bGxsbGxsbGxsbGxsbGxsbGx0cGBcZGRkaFhYXFRcVEg4OEBETFBUUERMYFBYVExYXGRsdHR0cHSEeHBsbGhoaGRgWFxcWFBIQDhAREhEQEhMXGBgXFxYcGBobHBwbGhobGxsbGxsbGxoaGhscGxoYGxYWFBMVEwwKCQkHEDFTY2JobnF0eHp6fnpwOwcBEUB4g4KDkJmgqauyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epnnBWSlNUT01GRD03LScgHRsbGxsbGxsbHBwZGRkaGRQXEQ8PDQ8OCgo5coGNna61vL/DwsG+ubOlnI9IS0pQRkZFQj84LiUhGxsbGxsbGxsbGxsbGxsbGxscHBgXGRoZGBQVFRMSEw4TEhEVGBcXGQsOFBQXGxkXFxkbHR0cHBweHRsaGhkYGBgWFRQUExIPDAwNEBERExYUGRsaGRcUFhgaGhwcHBsbGxsbGxsbGxsbGhobHBsaGBkVExEQExAJCwUJCBxCXW1scnl9gISGh4qOiWsVIFqHi4qNl6Glq7K3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZ5wVkpTVE9MRkQ9Ny0nIB0bGxsbGxsbGxwcGhkZGhkUGBMQEA8ODgoIOXGEkp+vt77BxcTDwLy2qJ+QSk1LUkdHRkM/OC8oIRsbGxsbGxsbGxsbGxsbGxsbGxkYGRkaGRoVFBMSEhIMDgoKDg8ODxIMDRUYGBsZFxgaHB0dHBwcHRsaGhoZGRkZFhQTFBQRDg8ODAsLCgsMERMVFhoZExIYGhscHRwbGxsbGxsbGxsbGxoaGhwbGRgaFBMREBAPCA4GCggoUGVwdHuCh4qOkpOXk5qOWHqXoJOYoKOnrra8wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmeb1ZJUlRPTEZEPTctJyAdGxsbGxsbGxsbHBkZGRoZFBcSEA8ODg4JCDZwhJOisLe/wsbFxMG8tqmfkUtNTVJHR0ZFQDkxKCEbGxsbGxsbGxsbGxsbGxsbGhsZGBkbGRgcFhMUExIRDA8JCAsKBgcKDgwQFhsbFxQZGx0dHRwcHBwcGhgaGRoaHBgUFBYVEhAQDAsJCggKDQwNCQkUGhcTGRscHR0dGxsbGxsbGxsbGxsaGhobGxkXGxYSEBEREAkQCA0MNlxrd3yEjJGVmp6goaWlo52qpqmoq66vsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apnW9WSVJTTkxGRD03LScgHRsbGxsbGxsbGxsZGRkbGRUWEQ8PDg8OCwg2cIaToa+3vsHFxcPAvLapoZNNUE5USkpIRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxobGRkaGhkWGxYSExISEQsHBwgNDw4TGRsWCw8aGxgUGhweHh0cHBwbGxkZGhkaGRwYExMVFBEPDgwMDg8RExcWEgkFDhgYFRocHR8eHRsbGxsbGxsbGxsbGhoaGxoYFxsXExEQEhAJDQYIDUBicnyCi5SZnqOoq6e3tK+rpbO8sLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZ1vVklSU05MRkQ9Ny0nIB0bGxsbGxsbGxoaGRkZGxoWFhIQEA4PDwoNOHCGlKCus73AxMPCvrq0qqGUUVJRVUpKSUVCOTEqIxsbGxsbGxsbGxsbGxsbGxsaGxkZGhwaFhkTERAPEA4JDw0QDxAQFBkeIxINFRoZFBsdHh8eHRwcGxsZGRoaGRoaFhMSExMQDAwNEBUaHB8iIx8TCxAYGRkbHh4gHx4bGxsbGxsbGxsbGxoaGhsaGBYcFhQSEBIRCgsEAg9LaXd9ipOdoqetsra1tcK7sri9wcLEx8jKytHc297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqidb1ZJUlNOTEZEPTctJyAdGxsbGxsbGxsaGhgZGhsaFhUSEBAPEA8LDzxxhpSfrLK8v8LCwb25s6qjlVJVUlhLSklFQjkxKSIbGxsbGxsbGxsbGxsbGxsbGhsYGRocGhcYEQ4ODw8MBwoOEhQXHCQqBRsUDRgdHRkcHR8fHx0cHBoYGBgZGRoZGhUREBISDQsICxMgKjA1OiYmHBQXGx8gHB4fISAeGxsbGxsbGxsbGxsaGhobGhgWGxcTEQ8TEQoQBwASVG5+f5Kcpqywt73AwMTEy8G+xsvKz8/R1tnZ3OPm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgYGxwaGBYXFRAQEhIPDA41aYmWoqutub2/vr67trGlmI1eXFJVT0tJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxsbGRgZGhoWFhISEhESEAsBFSAWHSIoJR8pERgRKhkZJCYmJiUgHRsZGRgXGx0bFRcSEhUTExINEAAhLTBCPTk2PSoLFBMWJSEkJCcmIR0bGxsbGxsbGxsbGxsbHBsYFhgVExQTFBIMCgkJB2Nuf5KWoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGBoaGhcWGBURERISEBAPNmiHk56oqrS6vLu5uLOuo5eMXl1TVlBLSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxscGxkXGBwZFhQQEA8PEA4JARclGh8kKycjKBMYESkcHicnKSkmIB0bGRkYGBodGxUVERITERIQCw8BJjQzRkM/PEEmDhgUGSQkJCcnJiMdGxsbGxsbGxsbGxsbGxwbGBYYFhQUEhQSDAsJCQlkc4KVm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGBgaGhkYFhcUEREUExISEjZnhI6YpKewtLi3trOwrKCVi19eVFdQS0lFQjszKiMbGxsbGxsbGxsbGxsbGxsbGxsZFxkbGBUUEA4ODg0MBwEcLiIiKC8qLCYVGBAoHyEqKioqJiMdGxkZGBoaHBoUFhEQEQ8PDgkOBCw8PU5LR0VFIhEcFRsjJygqKikjIBwbGxsbGxsbGxsbGxscGxgWGRYVFRISEQ4MCgoNZnaGl5+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhgYGhoaFxYYFhERExQTEBE2ZYGJkZ6krK+ys7Kwq6mekopgX1RWUEtJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxsbGBcZGxkUFA8ODgwMCwYDITUtJSowLTcoFxkRJyQoLS0sLCkjHRsaGRgZGhwZFRcSEBANDg0HDAY0R0RUUU5MTSEXIRcgJissLSwqJiAdGxsbGxsbGxsbGxsbHBsYFhkUExQSEhEMDwoLD2d5h5ahrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsaGhkYGRgWFxUTEhETEhASMmF+hYyZoqerra2srKikm5CJYGFUVU9LSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxsbHBoZGBwYExcSDg8MDgsHBiQ/OykqMjA8KxobFiUrLTEzMi8qJB4bGhsaGRwdGRQXExEPDw4OCAsLPE9LWFVVUlQkHiUbIy0wMDMwLCchHRsbGxsbGxsbGxsbGxwbGBYYFBITERERDA8LCxJnfIeVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGhoZGRgXFxYWExMTExITEzNeeoCFkZyhpKiop6WkoJeNh2BhVVVPS0lFQjszKiMbGxsbGxsbGxsbGxsbGxsbHRsaGRobFxIYExAODA4MCAgrSUguLDM0PTMeISEmNTE2NjUyLCYeHBobGhocHBgSGBQQEA4PDQoJDENVTlpYWldZKiQpIyw3NjY2My8qIx8bGxsbGxsbGxsbGxscGxgWGRUTERISEQ4QCQwVZXuKlKGtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbHBsaGRgYGRgXFhUWFhcXGBkzW3R4fYiVmp6goaGgnJuTiYVgYlVWUEtJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxwbGhgZGhgTGRMPDg4ODQoNLlBUMy0yNzg4IicuKz03OTg3My0nHhwbGxoaGxwXFBkTEA8ODw4KCA5GWlJcW11dXTAoMC40Qjk5ODYyKiMgGxsbGxsbGxsbGxsbHBsYFhoWExQSFRMQEw0PGGR6h5Kfq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxwbGhcYGRcXFxgXGBoaGxsdNVlwdHaDj5aZm5ycm5iVkIaDYGNWV1FLSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxscGxoYGRoYEhoSDw4NDg4KEDJWWzYuMjg2PSUuNy9DOzk5ODUtJx4cGxsaGhscFxMYEw8ODQ4OCgcPSFxUXVxgYl8zKjQ1OEk7Ozs4MiskIBsbGxsbGxsbGxsbGxwbGBYbFxQVFRYVEhcQEhpjeISPnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbHBoYFxcXFhcYGhscODM/WW91eIOPj4Z9hZyWj4uGdmldXFVSSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYVEQ4PDg0MCwxEXk5CODM5QDs2Njs/QUFDPzszLScgGxsbGRcZHBkVGhQQEA4MCggHCVRZX2VfYWhYRDozOzpBQ0I+OjMrIR0bGxsbGxsbGxsaGhobGxkXGhgVFRUUEQ4TEBQfWG6DjpqksLrEzNHZ4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhsbGxoaGBcZGBgZGhweHw4WIy8vMkFRVFtkc36Kh4yHgnNoXFxVUkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFREODw8PCw0MP1xXTz80OTw9OjtAQkREQ0A7NC0nIBwbGxkXGRwZFRoUEA4PDQsKCgxWXGJnYWRsWkg+OT8+RERCPjszKyQdGxsbGxsbGxsbGhoaHBsZFxsXFxcWFREREhANFFlreYSUn6y1v8fN1tzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxoaGxsaGBkYFxcaGxweIiMfKS8qICEtOjg+S2JveHmGgntvZFlcU1JKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxsbGhcXGhoYFhURDxAQDg0NDEJgYV1OOzo4Oj1DRkZGRkVCPDYuKCAcGxsZFxkcGRUYFBAPDw0LDAsNWF1la2Vnb19MRD9GREpFQz87Ni0kHhsbGxsbGxsbGxoaGxwbGRgaGRgXGBgVExkZEhZlcHqDj5qlrrjAydLW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsaGhobGhkYGRcXGBocICIlISotLCYkJilBR0ZUZHZ4fHx3a2NXWVJSSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYVEQ8QEQ4ODQhEZ2ZmX0xCNjtBSE1LR0VGQz03MCgjHhsbGRcZHBkVGBQQDxAODg8MD1hfZW1nanJjUkpFTEdNR0RCPDctJR4bGxsbGxsbGxsaGhscGxoYGBoZGhkXFhUeFg4OYGlsbYeSm6SttL/J0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBoaGhkaGRkWFhkcICImJyksLCkiICguKzIwPlh3fXl3cmhhV1dPT0pJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFhEQERIQDQ0FRGdnbGlbVEJDRUpPT0pFR0Q/ODErIx8bGxkXGRwZFRkUEBAREA8PDRBaX2dvaW5yZFZPSU9JUEdGQz43LScgGxsbGxsbGxsbGhobHBwaGRkZGBkaGhcXEBEXFVZecHeDjJSbpa+6xszS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGhoaGRoaGBscHyQmKi03MywmHRsfJSgtKDVManRvc21lX1ZWTE1KSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxsbGhcXGhoYFhYUEBERDwwMDUNlaG1pX2JXUUpLTU5NS0lFQDkxKiMeGxsZFxkcGRUXFBAPDw4PEAwQWF9ncGpvcmVVUExRSk5IRkM/OC8nIBsbGxsbGxsbGxoaGx0cGhkYGBkZGhkYFhYeKCRRU2Zzf4aLkZyotMDEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGBgaGhoaGxsbHiEnKy0uKiglISAdFhEcIhUeOF5sZ21pYF1VVEtMSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYXFBASEQ4NDBJGZWhtbWdqZF1STEtNUVFJRUA5MyolIBsbGRcZHBkVFxIODw8OEBAND1dgaHBtcG9iVlFNUktNSkZEPzgvJiAbGxsbGxsbGxoaGhsdHBsZGRgZGhoZGRghIRoOMywoKTIyLikoKCsxu8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgYGBoaGhoaGx8iJisuLisqIhoWGB0cGiMUFzZfbV9qZl5aUlNLSkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFxQREhEODAwOSmdjb3hycGdgVk5JSlBSSUU/OTMqJCAbGxkXGRwZFRgSDg8PDhAQDA9YX2lxbnFuY1VSTVFJTUpGRD44LyYfGxsbGxsbGxsaGhobHRwbGhgaGxsbGhkaGykkGTgrKDU2NSwmJCMmKrS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbHR0gIycqKy0qJyIcFhQWGBgZHRQqXWFpZl5eUlRMT05JSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEZoaW92bWpnXFFMUFJPSUpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhkYGx0fICAnLS8xMjIxLiQhHxwXIDirtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxwdICMkKCsrJyQhGRUVFhcVFhkRJlxfZWNcXFBTS05NSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxGaGlvdm5rZ1xRTFBST0lKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhoZGRweICEkKi0vLy8tKygdGhoWEhkzprG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxscHR0hJCcnKCIgHRgUFBUXExQXDSRZXWJhWVpMUEhNS0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MR2pqbnZvbmhcUUxQUk9JSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGhodHyEiKi4xMC4sKCQjGRcYFA4YMZ+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbHBwdICEjJCQdGhgXFBUXFxIWGA0kWlxgXldWS1BITUtJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEdra252cHBoXVFMT1JPSkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhobHiAiIy4wMTAtKSMeIBUTGBQPFzKYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxscHR0eHiAfGRcWFRUXFRcSFhgNJFlZXFtUVktQSExMSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxIa2tudnFxaV1RTE9RT0pKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGxsbHB8hIiMuMDEwLCcfGxwREhYUDhUxkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsbGxwdHRwbGxYVFBQWFxUVEBQWCiFWVVRbU1VITUdMSklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MSGxsb3ZwcGpeUkxPUU9KSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbHBwgISIjLC4xLSslHhYeERIYFg4WMI2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhsbGxsbGhcXFxYWFRUTERATFgofVFJPWlNSR0xGS0lJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDUhsbHB2cG9qXlJMT1FPSkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxscHBwdICEiIiksLSsoIxsTHxQUGRYNEi6JlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGxsbGBcWGBcXFhUUEQ4QFRcKH1NQTVlSUUdMRUhISUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ1IbGxwdm9ta15STE9RT0pKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbHBwcHSAhISInKispJiAXER0REhcTCA4nhZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsZGRkaHBsaGRkVExQTEA4PDxEPDiBGT1dZVFJITUVKRklIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0PSGpqbnNwb2ZlVFNSUU1LSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbGxwdHh4eJyYiHx4cGRQYFhkUEQwRIYGPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhoaGhwcGhkaFhQVFBIQEQ8SDw4fRU5WWVRSSE1FSkZJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwND0hqaGxycHJmZFRTUlFNTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsbGxscHB0dHiUjIB0aGRcTExMTEgsJDB2AjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGhscHBoZGxkXFhQSEBEPEhENH0ROVVlUUkdNRUpGSUhFQjkwJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxHaWhrcnJxamdTUk9RTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwdHhwZGBcUEQ8PEA4LBwscfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsbGhobHBwaGRwYFhcVEhEQDxIRECFGUFZYU1FHTUVKRklIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MR2dnanRydW1pVFFPUE1OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkYFhYXFRIQDxAPCwkMHXuJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGxoaGxwbGhgcGBYXFRIREhESERAhR1BXWFNRR01FSkZJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEVmZ2xzdHVwalNRTlBPT0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhoaGhoaGhgYFxUWGRgUEQ4SDgwJDx96iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGhobGxkXHBoYFxYTEhIQExIPIUdRV1dTUUdNRUpGSUhFQjkwJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGaGhudHR1cGlTT05QT09KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhoaGhoaGhoXGRcXGBkaFhAPEA8KCQ4geoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsaGhkaGxoYFxsYFhUWEhEQDhIRECJIUldXUlBGTEVKR0lIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0KRmlpb3Z0dG9oU09OUU9OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGhoaGhoaGxsYFxgZFxQQDxAMCgkOIHqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhkZGRsaGBYYFRMUEg8ODQ0QDw8hR1FYV1JQRkxFSkdJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNCUdqa3F2c3RvaFNPTlFPTkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhoaGxsbGx0dGhkYGBcTEg8RDgsIDx97iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGRkZGxsaGhkaGRgZGxwaGBUWFxUTEhIMEg4QIElNUlhZVj9GSk5HSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxIamltdHN1cGtRUE1MTU1KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGRkZGhoaGxsYGBcZGRgXEw8PDg0MBwohe4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgZGxsaGhsYGRgWGBsbGRYUExMSDw0MCRAMECBLUVRVV1M/RkpOR0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0NRmppbXNydHBrUVBNTE1OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxgYGhkaGhoaGRgYGBgYFRIPDw8MDAcLInuImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGxsbGhoaGRkXFhgZGBcUEhAQDg0JCQkQDA0gTFJUVFVTPEVHTkZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNC0draW1zcnRwa1FQTUxNTkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWmFqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsYGRkZGRoaGxYWFhcXFhMRDQ4PCwoFDCF6iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGhsbGhoZGRkZGRcXGRgVFBEOEA8MCgoLEA0MIE9SVFNVUzpBRkxGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGaGltdHN1b2tRUE1MTU5KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhkZGhobGxoXFhQTFBMRDA0ODQwIBQkfeoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhobHBsaGBkaGxgXGBoZFhYSDhAPDQkJCQ4LCiBVVlhUV1Q6QEZMRklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0JRmlobnNydG9qUVBNTE5OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGBkcHRsZFxUVExMTDw0NDAwKBwMJIHuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxoaHBwbGRkYGhoYFhcZFhMYEg4ODQsHBwsNCwkhWVlZV1tWOj5FS0ZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNCERqanB1c3VvalFQTkxOT0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWmFqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGRkZHBoZGBkXFRQTEw8NCgsMCAYCCSF9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsaGxwcGxsZFxkZFhQUFhMOFA4LCwoJBgUKDAgFHlpaW1teVzk9REtGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGbGxvdXJzb2pRUE5NTk9KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhgXGRoZFhQZFhMREBAODQcJCQcGBAwjf42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxscHB0aGBcYFxUREhEOCQ4JBgcICQcHBAcFAR5cYF9fYVk6PUNLRklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0LR2tucHVxcm9qUVBOTU5PSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxkXFxcYGBURFxQQDQ4NCQkFBQkHBgQMJoGOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxwbGhcZGxkWFhYXFxERFBERBgEDCQsLCw0OCAgkTWJeXVhdOEVCRUZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDExwbm5zcHB0bFRRTk5NS0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw8RWWBpcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRgaGxsbGxoaGBgYFhgYFRURDxEPDw4KDAsHBwcKCh2Ek6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsbGxoZGRsaFxYVGBYQDxEPBwAAAAQEAwUCAgACI1JmY2RdXjdCQEVGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ5MbWpsc3Fwc2tUUU5OTUtKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVlgaXJtcXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkYGhsbGxsaGRgYFhYXGBIUDg0MCwsJCAsMCQoHCgoeh5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmmm9WSlJSTExGQz02LSYgHBsbGxsbGxsbGhsaGRkaGRYWFRcWDgwNCwwIBggJBAIDBQYACCtZbWZqY2A3QT1ERklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0OSWllaXFzcnBqU1FOTkxLSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFZYGlybXF1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsZGBobGxsbGhoXFxUSFBYQGRMODgkGBQQGBgYJBwcKIIyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxobGxkZGxoVGBcXEwsJCgoJChEUFRAQEA8SERk6Y3NtcmdiNz88REZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEZoZWtzdHRuaFNRTk5MS0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWWBpcmxxdWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRkaGhsaGhkbFxYWFBUUDRMPDAoJCQgIBwYEBwYGCCCQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsaGRkZGxwZFRkYFhMMCQoKChUnNDg6P0dOUExKXHN3bXVrZjhCPkVHSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxFaGhvdnRzbGhTUU5OTExKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFhfaHJscXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkZGhobGhoZGxgWFhMVEwwLBgQECAYDBAMDAwYEBwohlaOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmmm9WSlJSTExGQz02LSYgHBsbGxsbGxsbFxkZGRsbGhUXFxUSCwkLCggcOUlRVmBqb3VxbHF/fXB9cWk8Q0BHS0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0ORmhpbnNxcmxoU1FOTk1MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhBYX2hxbHF1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsZGRoaGhoZGBwYFhUUFRIMCgYDCA8QDg0LDQsNDA4PJZyptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxcZGRkbHRkWGBUTEgoKCwsLJkVYW19qdnd9fXmBi4h6g3duP0VDSk5JSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDkZnZm1ycnVtaFNRTk1NTUpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QWF9ocWxxdWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRkaGhoaGRgbGBUUFBQRCggHCBIlLjM2PUVLU1lmaXyjsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsXGRkaHBwaFRQTFBAJCQwNCihLXmJlcX18g4OBipWQg4l8cUBHRU1SSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ1EZWVqc3R6bWlUUU5NTU5KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEFhfaHFscXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkZGhoaGRkYGhYUExQUEQkLCg0eN0VOU15ob3uDj5SkqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxgbGBYUExUTDQsMCwYqWGBocXl9g4aLjo6Qj4uKgXdARUlNRUpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0NRWVja3Rzc2xnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDxBYXmdxbHJ0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhYXGRkTEBEPCwgIBUdMU2BmcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcYGxgWFBMUEwwLCgsKMFxlbnqFho+Tl5iZnZuZkYl8QkdKUEdKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDUdnZmx0c3JsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QWF5ncWxxdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYWFhkYEg8PDgsICQZLUVlnb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeZb1RKUlBNS0ZDPTYtJiAcGxsbGxsbGxsaGxkXGBsYFRMSExEMCQsKAytcaneEkJSanqGgoJ6cmZGKfEBFSlFLSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ5IamltdHJxbGdSUU9PTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFdeZ3FscXRmV1FNUkpPSUhEPjctJB4bGxsbGxsbGxsbGxscGxgWFRUXGBAPDgwKCAoHUVhicHiBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxcbFxUSERIQCgkJCQYtWmZ0hZaemZyhoqKhnpiQin1CRUlQSUpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0OSWtpbHJxcWxnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhBXXmdwbHF0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhQVGBYRDQwKCgcJB1ZeaXd/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcXGhcVExISEAoICgkLNWV0foiSlZ+jpqinpaGek42CRkhMUEpKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwND0lqZmpxcHFsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QV11mcGxxdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYWFhcVEAwNDAoGCQZbYm99h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeZb1RKUlBNS0ZDPTYtJiAcGxsbGxsbGxsaGxkXFxoXFBMSEhEJBwoKBzZvgYyUmpyoq62sra6sqpOMgUdLTVFKSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ9IZ2RpcHBxbGdSUU9PTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFddZnBrcXRmV1FNUkpPSUhEPjctJB4bGxsbGxsbGxsbGxscGxgWFRUXFw8NDgwMBwoGYGd1go2Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxcaFhQUExMSCgkMCgs3bH2Mm6mvuru5tbCrqKOaj4FMTk1QSkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0PR2ZkaXFxcWxnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDg9XXWZwa3F0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhUVGRcQDg4NDggMB2ZtfImTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcXGhYTFBMTEgsICwsKN3GDkZymq7G2uLm5t7CtqJqLUVJMTkdKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDkdmZGtzcnFsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0PV11mcGtwdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYVFRgXEQ4PDg8KDQlpcYCOm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6Wcb1ZKUlNMTUpEPjYsJB0aHBwcHBwcHBwaGxoYGBsZFhgSEA8ODg0JBzx2h5CbqrC4u76/wLy1raWekk5TUVZLSEdEQDguJSAdHRwcHBwcHBwcHBwcHBwcGhoaFxkZGBYVFBETEQ8ODw1GZ2hucnBybmpUUE1PT1BIRT44LiggHBwbGxoaHRwXFhQREhMRDg0ND1ZdZnBscXVoWlNPUktPR0VBOTMsJCAcHBwcHBwcHB8cHBwcHBsbHhgWFBQSDwkQCQkIcX2Ik52qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmW5WSVJSTExJRT82LSceGxoaGhoaGhoaGhsbGRkaGRQZEw8ODhAOCgc9eImTna20ub2/wcG+tq6on5NPUVFVSElIRkE6MighGxoaGRkZGRoaGhoaGhoaGhkbGBgYGRgUFRMQERIPDg4MRWdobnNxc25qU01LTk5PSEVAODEqIx4cGxkYGh0aGBcVERMSDw4ODhBXXWZwbHF0Z1lSTVJLT0pHQTszLSciGhoaGhoaGhobGhoYGBoZGhwWFBUUEw8JDggICHF+iJWgrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZhtVUlRUkxMSUM8Ni0nIBsZGRkZGRkZGRkaGBYWGRYUFxENDw0PDgkIPnqLlqGxuLu/wsTEwLiwqqGVUFFPVUhLSkhDPDQqIxoZGRgYGBgYGRkZGRkZGRkZGBYVFxgWFBMQEA8PDAwNDEVnZ21zcXRtZ1FNSk5OTkpGQDkzKyQgGhkWFRgaGhYVExEREA0MCw8QV11mcGxydGZYUkxSSk9MSEM9NS0mIhkZGRkZGRkZGxsZFxkaGBgZFBMUEhIPCQ4IBwhyf4qXpbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WYa1VIUFJMSkZDPDQtJyAcGRkZGRkZGRkZGhgWFhkWExUPDQwMDQ4ICT97jZijs7m9wcXHxsG6sqqilE5ST1RJTEtHQjszKSQaGRkYGBgZGRkZGRkZGRkZFxgVFRUYFhMTEA0ODAsKCg1GZ2dtcnF0bWdRTUpMTU5LR0E6MiojHxoYFhUYGhkWFBAODw8MCwgPEVddZnBscnRnWFJNUEtNS0hCPDYuJyMZGRkZGRkZGRsbGRcZGhkZGRQTEREQDwkNCAkJcn+Lmam2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOll2xUSFBQSktGQjs1LicgHBoaGhoaGhoaGxsbGRkaGRUYEQ4MDA4NCApAfI6Zo7O5vsPHycjDu7SqoJROUk9USkpJR0I7MikiGxoaGRkZGRoaGhoaGhoaGhoZGBgYGhgUExAPDw8MDQsNRmdobXJwcm1oUk1KTE1OSkZCOTMrJCAcGxkYGh0aFhUSEREQDQwLDhBXXWZwbHFzZlhRS1BJTUxJQz01LSYjGhoaGhoaGhobGhgYGBkZGRsVFBQSEhAKDQoKCnJ/i5qruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZdsVEhQT0lKRUE6NS0nIBwbGxsbGxsbGx0eHBobHRoYGRQQEQ4QDgoJQHyOmaSzucDFycrIw7y1qqCTTk9NU0hIR0VAOTEnIBwcGxsaGxsbGxsbGxsbGxsbHBoZHBsaFxUSEhESDw8PDUZoaG5ycHJuZk9KSEtMTEhFQDgxKiMeHRwaGRseHhkWFBETEg8ODg0PVl1mcGxxdGZWUUpQSExLR0I7MywkHxsbGxsbGxsbHR0bGxscHBwdFhQVFBQRDA4JCgp1g4+crbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6WXa1NFTE5HRkA8NzApJBwaHBwcHBwcHBwcGxkZGhoZFRcSDxAQEBAKCD97jpqltbvBxsnKyMO9tqmhkU1OS1FGRURAPDQrIxwdHBwbGxscHBwcHBwcHBwcGhkZGBkbGRUSEQ8RERAODwpEZ2lvdHFzbWZPSUZISEpEQDkzLCMeGRwbGRgbHRoWFBEQERIQDQ0LDVZdZnBrcHNmVlBJTEZIRUI9NS4nHxocHBwcHBwcHB4cGhoaGx0cGxYSExITEg0OCAgLeIaSn667x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOllmpSREtMRkQ8ODMrJR8XFRYWFhYWFhYWGBgXFRYXFhEVDwwODQ8OCQc+e4+apra8wcbKysfDvbeqopFLTUpPREA+OzYvJh4YFxcWFhYWFhYWFhYWFhYWFhYVFRUUFhUREA0NDw4ODQ4IQ2ZpcHVydG1lTkhFRkdIPjo0LScdGBQZFxUUFxkWExEODQ4PDQoKCQxVXWdwa3BzZVVPSEpERj88NzEpIRkVFhYWFhYWFhYYFhQVFRUWFhcSDg8PERELDAYIC3iHlKCvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzpp5kQT1HPC8tKSYfGhcXGRkVFRUVFRUVFRYVFBQYFhQQEw8MCw0OCgkNQHqMmKi1uMDEyMrJxLy1sKOcRjw+OTsvKyYiISAfHBgWFRUWFhYVFRUVFRUVFRUWFRUVGBUSDRcTEhEQDQ8RDkJgbHZzb3JsZz0+Qjg4KColIBwaGhsaFxUUFRYXEw8aFBERDw8ODxATT15pbnNsbHBWOj4+My8vKiUgHh0cGxYWFRUVFRUVFRUVFxYVFBIXFBAPEREPCw4NAwZ0h5OisLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaefYjo0OzEnJyEeGBQRERISExMTExMTExMSERIUFBMRDRAMCAgHCQoGCkB6jZmptLnAxMjKycS8tbKimD4yNTAwKSQfGxkXFRQVFBMTExQTExMTExMTExMTERESFBUTEAwSDgwMCwkMDg1DYmx2c290bmY1MzQsMSMkIBoXFRQUExIREBIWFBENFA8NDAsKCwwNEVJga3B0bW1vTjAyNCsqJyIdGBYWEhIVFBQTExMTFBETExQUFBIQFBENDQ4MCggLCwMEd4eWpbC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapoV4vJCsiHB4bFxMPDg8PEBMTExMTExMTFBMTFBUTEQ4NCQcGBwgIBwg+fY6aqbW4wsTKysnHvbewnpU0JigiIyEdGBYVEhEOFRQSEhMTExITExMTExMTExMSEhQUExEODAsHCQYFBgkMRWVsdnNxdnJoKyUnISgcHRoVEhITERETEhISFhUSDw8LCAgIBgcJCgxUYm1ydm5wb0kiJSghIR4aFhQREg8NFRQUExMTExQUExMWFhUUEhIQCwgLCgkGCQkDBXmKl6awvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qqJbKBggGBQZFRIREBETExITExMTExMTExMTFBQUEg8PDgwGBwcJCQkFPn2Qnaq2ucLHy83Mx8C4sJ6TKiAfGRkZFhUTFRMQEBUUExMTFBMTExMTExMTExMTExMTExIPDwwKBwgGBQYJCUZnb3d0cXl4ayMaGxciGBcUEhITFBMTExMRExMUEA0MCQcGCAcHCQgJV2RscXdwcnNFFxkfFxkXFBMRERIQDxUVFBQTExQUFBQUFBUUEhASDwwKCwoJCAgIAwN+jJupsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKylWCISHBQRFhIQDw8QEhESDAwMDAwMDAwMDA0MDAsJCA0LCAgJCwsMBD5/kp2tuLvEyMzOzcjBua+flSYbGxUVFRMSERQSEA4PDgwMDQ0NDAwMDAwMDAwMDQ0MCwoKCAcKCAcHCAYICAlKbHF5eHV8eG4aExYRHRQVFBERERIREA0MCwsLDAgHDAkHBwkICQgIB1xmbXN5cnR2RRMUHhQWExEQEBESDw8ODQ0MDAwMDQwLDAwNDgwLEg8LCgoLCgkICQMDgY6ap7K/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquplYfERsWERQTEhEQERAQDggICAgICAgICggICAgIBgcLCQgHBggJCAVBhJSfr7y+x8rPz87Lwr2yopohGBkUFBUVExIUEhAOCgkICAkJCQgICAgICAgICAsJCQcGBwQGCAcHCAcGBgYJTXF0fHt4gHtyFxIVER0UFRQREhIQDQwJCAcHBwYGBAkHBgcIBwYICwVjaW90fHZ0eUYSGB4UFBUTEhISEA4MCQkICAgICAgICAgICAoIBw0KCAcJCAgHCQoFA4WPm6e1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKZWHA4cFQ4REQ8ODg8NCgoICAgICAgICAoLCQgJBwkKCAcGBQUGBgUEQoiZo7K+v8nN0NLQzMW+uaeeIBMXEhMVEhIRERAMCAoJCAgICQkICAgICAgICAgLCwkICAYICQcGBwoJBgQFClN0dn99fYWAdxcUFhMcExEREA8ODQkGCwgIBggIBgYHBgUICAcFBQoGanF0en97eH9KExcfEhATEhAREQ8LCQoJCQgICAgICQgICAsKCQgICAYGBgUGBQsKBgSIkJymt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKlVBkNHBQMDQoJCQkJBwQDCQkJCQkJCQkLCwkJCQkLDAcGBQUFBQUEBEOKnKazvr7JztHS0c3Gv72toR4SExATDw0MDAwKBAEKCQgICAkICAkJCQkJCQkJCgsJCAkICwwHBwkKCgYEBQpTeHiAf36If3gUERQRGxAKCAcHBwUBAAoICAcHCgkKBwUGCgoHBQUKBm91eX6DfnyETRQXHA4MDAsKCwwKBwQKCgkJCAkJCQoJCAkLCwoJCAcGBQUFBAYKCgcFiZCdqLjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2rFkXEBYTDgwKBQEAAgYICQYGBgYGBgYGBwYGBQUFBQUEAwQHBgQFCANAjqausbfEzdDS0dDOycS9q6sOFBITDg4JBQUICAcHCQgIBwcICAkHBwcGBgYGBgsLCwsKCgkJDQoKCQgGCAwOVX6LiIeNe4p+FQ8OEhIODgoGBAQICQkICAcGBgUEBAYGBgYGBgYGAA9seoaDhIaWeksjEwwNFQsJBgcHCAoIBQUFBQUFBQUHBwcHBwcHBwgHBgYGBwgIDwwDDoiepay9xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7EuatYFQ4TCwgMDQkGBggLDQ8MDAwLCgoJCQwMCwoKCgoKCQcGBAYFBQQSSpCirbrH1s7R0tLRz8rFxLCoDxAQFxISDQoKCwsKCQUFBQUFBQUFBQUFBAQFBQUEBAQEAwMDAwQEBQcIBwUDCk94goiMkYyIexcNCg8NCw4KCAcICg0OCwsLCwsLCwsLCwsLCwwMDAMPcX6Ki4qMlHtJGgoHCAsNCwkKCg0NDAsLCwsLCwsLCwsLCwsLCwsLCwoKCgkJCQwGAQiOoquxwMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL2vWRQMEwwDBQcFAQEDBAQFBQUFBQYGBgYEBAQEBAUGBgoNDgwGAwUHDUuTq7W+xtDR09XU1NLOyc66phcRCQ4JCwgFBggHBgYHBwcHBwcHBwgHBwYGBwcIBAQEBAQEBAQDBgYDAwMGCAhUhoyPkoyMVVELDhESCwcICAQDBAUGBwUFBQUEBAQEAQEBAQEBAQICFH6MjZKRl5SBUB8LDA0KCAYDBQYFBAMEBAQEBAQEBAUFBQUFBQUFAQICAwMDAwMGAwAKkaayuMTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBqF0dExcRDAwODQoJCgwMCwsKCgoKCgoJDAwLCwsLCwwJBQYMEA8LCxpTmLC6vcTN0tXW1tbU0Mu8spgiGAgEABAMCAkIBwUEDQ0NDAwNDQ0MDAsLCwwMDQsLCwsLCwwMDQ8NDRIREhMhXIqPl5NmQjo8ERcbGAoDDQ4MCgoJCgoLCwwMDAwMDQcICAgHBwcHCyR7kZSWmJ2Rf1AiDgwODAwLCgoLDAoJCgoKCgoKCgoLCwsLCwsLCwkJCQgHBwcIEAkKHpGrtrfIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxdGulZSTiYWFd3JsZGBcWVdVU1FQTk1KSUNBPzw6NzY1NzlFW212gImMmKuwvMXM1NXY2dnY19POy9PPlaOgpaCCf3l4dG5pZ2NiYF9fYGJjYGBfX19fYGBiYmJiYmNkZWxwc3d4dXiCeY2WclVTTkhWUzk5QEM+QUBAQD9AQEFCRUdJS01PUlNcX2VrcXd8gHh9lpibnKKosq6hk4+OjIl+enVyb2pmYWRkZGRkZGRkZGRkZGRkZGRlZ2ptcXZ7f4SJjY+rsbrCzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1MrKu6qinZeSj4iEfnd0cWxqaWZjYWBeW1hXVlNPTElHRT89QUdNW3eRoaq3vs3T3ODa3N3c3NvX0sDOxamzpqCXk46Kh4J7dHN2dnRzc3R2dnV1dXV0dHR0dnV1dnd4eXp9f3x9gYCCjYRuYk5GVFZRVlNKRUtNSVBPUFFPUFFRUldaXV9hZGdpbnJ4fYKHjJCJk5udpKOpr7GtpqCdmZeXjIuIhoOBenh5eXl5eXl5eXh4eHh4eHh4fX+AgoSIjpKXm6Gorre/w9HX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQzsW6saylmpSLh4J9enZycHBtamloZmNhWllWU1BOTEtMSUhIS01QVnOTs7/JytHS4eLj4uHg3NjM2Ma5vaiemJWRjoyJg39+goKBgYGBgoKBgoKCgYB/foCAgICBg4WGfX99gIh/ZVZLTVZYWFtXTU1PVlFWVk5SU1RVVVVWWFpdYGNlZmhrbnR4foKGi5CUm6Wtrqqssruvrq+uq6egm5KQjYuJh4J+f39/f39/f39/f39/f39/f3+BhIaIjJGVn6Sts7a9xcvW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1c3KxLy0q6WjnpuXlpSQjImKh4SBgH15dnNyb2tnZGJhWlpZU1JSUU1PWF9slr3U1uXn5+bl5ODb0tvBvsWvqqaqpqSkn5mVlZKTlJSUlJOSkZKSkpGQjo2NjY2NjpCSk42OfGBSUU5OUFxXT1NcWU5YVWNaXF5WXmNkZmprbXBzc3d7fX+ChomFiY6TlpugpKystLavtrrBtLe6uLazq6Sko6OioqCbmJmZmZmZmZmZmZmZmZmZmZmSlZiZmp2hpaSosrS+wc3T2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOwyNbY4ejm5trUzsvJxL++raqmo6GhoJ6ioZ+fn5+hoqinoZqan5+ZnZianJN+ZllSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsZHZ/hJGjus3e1MnDwr66t7q4tbSysbCwrKqsrq+trKyeoKKhoqOdl4N2amJfWFZVW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWJqbm5ub3qKjIV/gYqQkpO2tLS1tLCvsq6tq6mjnZWQgH10amdoZWJfWVZaW1lXV1xcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHN5eHVxb2pqbnJuamxzdnd5bmxtcG5paGxsa2tta2ljX2hpZ2NkZWViX2BhZWRhXVtZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357fHhzb25uamhnZ2ZlaGlpamlnaGtpY2JlcnBua2toZF9cXmJmaGlnY2dkYmBeW1tcXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhHx/f318fXhyZ2hnY2BiY2RkYmJjYV1bXWxpZ2NiYV5cXF1eYGJlZ2hdXV1fXl1dXmVmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiQkI2HhIOCgXx8eXRzcnJxZ2VkY2JgX19gXl1dXVxcXGFiY2RkY2VkY2NhYmNmaGpwcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWlI+NjIqFgoB6enh1dHRxbXNycG5ubm1raWlqZ2dmZmRlZWZnaGtsbW5wcHN2eXp8eXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
-
diff --git a/software/Print3r/models/Amf_Cube_Gradient.amf b/software/Print3r/models/Amf_Cube_Gradient.amf
deleted file mode 100644
index 2d14e197..00000000
--- a/software/Print3r/models/Amf_Cube_Gradient.amf
+++ /dev/null
@@ -1,272 +0,0 @@
-
-
-
- Amf_Cube_Gradient
-
- Default
-
-
-
-
- 10
- 10
- -10
-
-
-
-
- 10
- -10
- -10
-
-
-
-
- -10
- -10
- -10
-
-
-
-
- -10
- 10
- -10
-
-
-
-
- 10
- 9.99999
- 10
-
-
-
-
- 9.99999
- -10
- 10
-
-
-
-
- -10
- -10
- 10
-
-
-
-
- -10
- 10
- 10
-
-
-
-
- tmp
-
- 0.8
- 0.8
- 0.8
-
-
- 0
- 1
- 2
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 0
- 2
- 3
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 4
- 7
- 6
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 4
- 6
- 5
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 0
- 4
- 5
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 0
- 5
- 1
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 1
- 5
- 6
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 1
- 6
- 2
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 2
- 6
- 7
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 2
- 7
- 3
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
- 4
- 0
- 3
-
- 0
- 1
- 1
- 0
- 0
- 1
-
-
-
- 4
- 3
- 7
-
- 0
- 1
- 0
- 0
- 1
- 1
-
-
-
-
-
-
- Master
-
- 10
- 10
- 10
- 0
- 0
- 0
-
-
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/bx9PT08/T08/Ly8fDw8fLz7vTx8u/y7fTy8/T09fX19fX19fT08/Ly8vDv7Ovr6unl5OPi4eDf393d3Nva2tnZ2dnZ2tra2tvW1tjY2Nvb2+Dd3+Ti5Ofl4+Hm5ebo7Ozq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vHv7u3t7u7s6ujp7O3q5+jr5uvs8e3u8PDx8vLz8/Ly8vLy8fDw7/Hx7+3r6eno5+bl5OLh4N/f397d3Nva2tXV1NbX2Nnb19ja29zd3t/Y1tbb2tzg4ODf4+Tk5unn5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vPx7uvn5eTi5eTj4+Pk5eXl5eTn5eno6uzs7e7v7+/v7+/v7u7t7Ovu6ufk4uDf397e3NvZ19bW1tXV1NPS0dDR0M/O0NHS09TU1dXV19bW1NXW1dbZ2dvf4N/g3uDh4OLk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/v7u3s6+ro5uXl4+Pi4uPj4eHj5ePl6Ono6err6+zs7Ozs7Ovr6uno6uDV0dLQz9DLy8rJx8bFxcPDw8LCwcHBwsHAv8DAwMDCw8TFxsjJycvNz8/T1dTW2dfU2Nfa3Nne3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6enn6Ojo6Ofq5+Pj5OTg2efl5OTk4+Lf5eXm5+jp6enp6eno6Ofm5d3Gr6aloJuWkZGRkZCQj4+Ojo6Pj4+QkI6PkZOXmJiYnZ+ipquvs7TEwcTBwsTAwsvKwc/W2tfU2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4+Li4eDf2dra1dDO09jU2NzZ3Nnc4ODh4uPk5eXl5OTk5OPj4uHYup6Znp2YlY+Pj4+QkJCQkZKSk5SVlpaampmYmJWSkJOSkpCOjI2Mj4OFg4OLiYygnZi5zNbSztTV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efm497c2NLNyMLCvrKln6KovcTHxtXX2uLb29ze39/g4N/f39/e3d3c0rOYlpyempeXl5iYmZmampydnZ6foKGhn6ChoqKkpKSlpaSkoqGhoYhycW9pbGtsb2tnmLzPzc3Oz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl4t/XzMCvoJaMiYaIjY2IhIKAf5DA0tfZ19fY2tvc3Nzb3Nvb29rZ2NG0mpifn5mXnJycnZ2enp6goaGio6OkpKKkpKWlqKmpp6enp6ipqamEa3BybnZ1dm9nXJG3y8jIycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PL0+Pbx8OTWya+ilI2Njo+OkJOUjoN2Z1lWWVRSlMPP19DS09PT09LS2NjY2NfV1NPGqpuZnZSZnZiZmpqampucnZ2en6ChoqKhoqOjpaWlpaakqKOnpailenBtcG9vcHB2b2OCtru4v8nIycvIyc3Nzc3NysnLz9TW3uLm5eTl6Onr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx8u7q5dvFqZORj46PkJGQj5aOfGFLREZLUFddVXG/x9DJyszO0NDR0tHR0dHQzs3MwaeamZ2Ul5yYmZqampqbnJ2dnp+foKGioaKjo6WlpaWmpKijp6aoondvbXBvb3Bvc2tihbC4ubi5t7u+vbq0rKOfmpKPjpKUusja3dvg5e3n6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7+3q5dCpko+OkJGRkpGOjY6QcU9AQENITlBVXFpeu77Gx8jJyszMzMzLzMzLysnHxr2hmZyelJaamJmampqam5ycnZ6fn6ChoaGio6OlpaWlpqSnpKenqJxxbm5vb29vbW1pYYWosLSttrSwpZSIiIeOjIqHhYaJioSYydjZ4N/j5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7q5t7Dk4WMkJCQj46KiYuLhmRGQ0lCQUpPVVddXp+wvby+v8HExcbGxsbGxsXDwsG7n5mcnZSVmpiZmpqampucnJydnp+goaGhoqOjpaWlpaakp6Wnp6eTbG5vb25vbmxlZ1+Fp6uur7GwrqaYkJCSl5aSkY+RkZKEjsXS1d7b4OLk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t7undwY2Fh4GFgoKCgX99fHpmT0dIRUVNS1NZW1xyqLK2uLq7vr/Cwr6+vr69vLq5vJyanJ2UlZmYmZqampqbnJycnZ6foKGhoaKjo6WlpaWmpKalp6emimltb21tbmxpYmhcfZyemaSjp6yhkYqTm5COiomKjY+RmZjJ09Xa1+Df4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt6+ns6MmKf4ODgX99fHt6dnR+dFpHSlNSTk5RV1hbXa2rrK6ztLa3ubq4uLi4t7W0s72bmJyelpWZmJmampqam5ycnZ6fn6ChoaGio6OlpaWlpqSmpaanpIBpbm5tbW1qaGNoXHSRmoyYsaebkIqOk5KKi42QkZKTlZKXydPS0tLc3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onf5ebUmISAf4F/fXt6e3t7dXhmT0tUWFhWUVVYXV2hqJ+ip6qsrbCzsrKysrGvrq2+mJecnpeUlpiZmpqampucnZ2en5+goaKhoqOjpaWlpaakpqWlpqJ4bG9ubG1raGdlZl9vj6ycoJKOi4uIi42NkZOSkY+NjI2Yn8rIyMnR2tnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero2+Hi1ZmBe4J9fn58enh3dHt9bVdNTFFcVVRZW1lXhaitr7Cvqqinqqqrq6qpqKalvJaWm56XlJWYmZqampqbnJ2dnp+goaKioaKjo6WlpaWmpKWlpaWhdG5vbWxua2ZnaWRgaoq1opqfm5ucmZSPhYOAfXl6foeOmaXGvsHF0dXW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5eDg2tOnfHqEgYB+fHp5eHZ0eXFjZ2ZydX+AgoWIi42Oi4yPk5ieoqe0t7u6t7Owr52cmZWSkpWXl5eYmJmam5ubnJ2cnp+goKGjpqempaWlo6alp6WokGpvb29ubGpnZWJeYW2gpqGgoqOkpqWmiHJ3en18fISLkZWuuL7AxcnM0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Tf3tvTrn58hoKAfnt6eXh1d3Z4h6SoqqahoJ2bmZeWlY+Pjo2Mi4yMiYuOjo6OkJKRkI6Mi4uMj42NjY6Oj4+PkY+QkJGQkZGTlpqdoKOmqKSnpqimpYhqbGxsa2lnZGJeY19nmaOhoaKjpqWmpYNyd3p9fH2EjJOXtrW6vMLGys/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj39rb1LWCf4WCgX58e3p3dnhydIurqKioqamnpqeoqKikpaWjoaCdnJiYlZOQj4+OkY+Ojo2MjIuOjo2NjYyMjI2Mi4qKiIeHh4iJioyOkZOmp6emp6J/bmdnZ2dlY2FfWmJabKCjoKCioqekqKN7cnh7fXx/hY+TmMGxtba+wcfMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4t7V2NK9h4CEg4B+fXx5eHd4c3SJpqKmrqenpaanqqytq6yurq+vrayrqailo6GdmpuYlpOUkY+Mjo2Mi4qJiIiHh4aEgoF+fX18e3p4d3d3nqOmp6mgeXBubm1raWZkYl9dWHemoKCio6Kpo6medHN5fX1+gIeQlJnGq7Cxu73EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Dd09bQwY1/gYKAfnt6enl3enV0iKqnpaWpqKampaaoqKipqamnpqampaSjo6ShnpqempeUkpGPjIqJiIaFg4KCgoJ/fnx6eXh3dnZ2dXRzcpylqKipnXl1enx+gIGDg4OAeXONpZ2ioaSiqaSplnBzen19foCIkZWawqasrri6wcbKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf3NDR0cKUgICCgHx7e3p4d3Z1dYerrKmnqKenpaWmqKmqq6qpqainpqmop6SjoJ6bmZeSkJCPjIyMi4qIhoWEg4GBgH59fHl4dnZ2dnZ0cnGUoqKkq6manZ+fnp2amJaVlpaXnqCdpaCko6ilqIxvdHt+f36CiZOYnLahqKu0uL7EyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3trQztDCnIKBgX58e3p5eHd4eniFpKSlqamop6Wlpaanp6ipq6usq6uop6eloqGenZiVk5CRkI+NiYiHhoSDgoF/f357enl4dnd2dXV0cnBtmKyipKeoqaqnpqWjoZ+dnJabnZ6doKOipaSmp6aDcXV8f39/gouTmJ+onKSnrra6wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3Z0MvPwaGEg39+fHt5eXh3enl1hKenpqqqqqimpqWmpaqqrK+urq6upqalpqSgnpyYlpSSkpCPjYeHhoSDgoGAgIB9fHt4eHd0c3NzdHRycYqnoaeopqmlpKSkpaWlpaWspp+bnZ+dpaWkpamkfXN2fn9/f4KLlJmin5qho6q0t7/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c0s7KybuyhHl+fXp4d3d2d3l2d4OpqKuopqipqampqamoqaurq6urqqempqSioZ6bmZaUkpCOjIqKiYeGhoWDgoGAf357enl4dnZ2dXVzcW+IqaemqKmoqaWmqKemp6eoqaWhoKCioqGhp6Slmm93fXyBgX+FkJmdrJCVnqKotba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29TMysm/uYl7gH15d3Z1eXl2dXiDpqerqaaoqampqampqKmqq6urqqqnpaWjoqGdm5iYlJKQjoyKiomHhoaFg4KBgH9+e3p5eHd2dnV1c3Fvhqenpaapp6ilp6enp6mpqqmmo6ChoqCfoqWlppRtd35+gICAhZCanLSNkZqeprCzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vXzczHv76NfX58enh4eX19e3t9iKWmq6qmqKmpqampqKipqqurrKqqpqelpKKhnZyYmJWRkY6MjIqJiIeGhYOCgYB/fnt6eXl3d3Z1dXRycH2ho6OjpaanqKiop6inqKmlo6Cgn6GhoaKkpqeLa3d/f4CAgIeRmZrAio6Xm6SrsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b2czMxL29k4KCgoGCgoSHiIeIipKop6qpp6ipqampqaipqaurqqurqaimpKOjoJ2bmpeVk5GPjo2LiYiHhoWDgoGBgH97enl5eHd2dnV0cnB6nqSlpaeoqaiop6inp6mqpKKgn56foJ6io6mog2p3gIB/f4GJk5mayImMlZqkqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tjNzcG6vKCUk5KQj4+RlJSVl5OaqqmpqKepqampqamoqamqrKuqqqinpqWjo6CdmpmXlJORj46Ni4qIh4aFhIKBgYB/e3p5eXl4dnZ1dHNxeJykpqWmp6aoqKmop6iqq6WkoqGhoZ6eoqSrp3tteIGCgH+Bi5SbncOGipOYoqextb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trWzsrBvLyxq6SinZmXl5iZmpyYnqqpqaenqampqamoqKmqqqurqqmpp6akpKKgnJuZl5aTko+OjouKiIeGhYSDgYGAf3x7enl5eHd2dXVzcnSZo6elp6mnq6qpp6alpaWioqKjoqOkpKClqqNzcHeBgoCBhIyVnaCvgYiQlp+lrrS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493Z08/Fwb28v7iwraqloZybmpyemaCpqqqop6mpqampqKeqqqqrqqqqqaempKSjn52amZeWk5KRjo6LioiHh4aEg4KBgH98e3p5enh3dnZ1c3J1maSpqKurp6WlpKKfnZ2enJ2eoKKkpaafpqicbHJ3gYKAgYWMl56jl36HjpWcpayzu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2dPNwMC9ucS+t7e1saymn5ydoJuiqauqqKipqampqKinqaqqq6upqainpqSkop+dmpmXlZOSkY+Oi4qIh4eGhIOCgYB/fHt6eXp5d3Z2dXRzcpWepJ+fnpmZmpqbmpmbm5ydn56en56fnqemlmdzdoGDgoKFjZifpol9h46WnKers7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTzMe/ubDLuri4t7e3tbGupaOipaerq6mpqaiop6ipqqepqamqqqmopqamo6Gem5qbmZeUk5CPjYyLiYiHhoSDg4F+fX18eXh4eHh3dnV0c3l9hY6NiIiLjI6RlZiYlpSfoqOioqOioJaShnhwcXp9hYN/jo2dn61ze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1M3HwLqxybu4uLe3t7WxrqupqKmqq6qpqamoqKeoqaqnqKmpqaqoqKanpaOgnpuam5mXlJOQj42Mi4mIh4aFg4OCfn19fHp4eHh4d3Z1dHN2cW5rZl9dX2VobnV8gYKDjY6Oi4eCfXhtbm1pa3N8gYOCgY6Pm5uxcnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTNyMC6ssW8ubi3t7i1sq+uraysq6uqqKqpqKinqKmpp6ioqqmpqKinpqWjoZ6bmZuZl5STkI+NjIuJiIeGhYSDgn5+fXx6eXh4eHd2dXRzc2xmY15WT01PUVZcY2hqa2hoZ2RjZGRjZ2hpanB3f4GDgoKNkpqavnF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzcjAurK/vLm4t7e3tbKwq6ysraqqqamqqaiop6ioqaioqKmqqKenpqako6CdnJuamJaUkpCPjYyLiYiIh4WEg4J/fn59enl5eHh3dnV0c2poZ21ubGhlaWhnZmZkYmFiYV9eX2JkZmhpZ2lweoKDhIKEjJScnctxeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083IwLqyuLy7ubi3t7a0sqqrrKyqqqqqqqqoqKeoqKmnqKqpqqmopqWlpaOgnpyampiWlJKQj42MiomIiIeGhYSDf35+fXt6eXl4eHd1dHRxb2xsa2poaWZlZGVmZmVlYWFiY2NiYGBjY2NlbXqDh4aEh4yYnqHEcHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POyMC6s7O9u7m4tri2tbKtra6tq6qqqqqqqKinqKipp6ipqamop6empaSioZ6bmZmXlpOSkI+NjIqJiIiHhoWEg4B/fn57enl5eHh3dnR0bmxramlpamtoZ2ZlZWRjYmVkZWdnZ2doaGlnaXF7hIWEg4iPmJ2fq3B5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vUz8rBvLWwvru5uLi4trWzrq6traurqqqrqqmop6ioqKmoqampp6enpaWkpKGdm5qZl5WTkpCPjYyKiYmIiIaFhYOAf39+e3p5eXl4d3Z1dHJwbm1sa2lpaGdnZmdnZmVpZmNkZGRnamdpaWtyfIKFhIOHkZieopVweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b1dHLwr22r8C8ubi3uLa1s62sq6uqq6uqq6qpqKeoqKipqKmpqaempqWlo6OgnZuamZeVk5KQj42MiomJiIiHhoWEgH9/fnx6eXl5eHd2dXR0b2ppamxra2loZ2dmZmRjZGJjZWVkZWdqbGtrcHiAg4WEh5KYoKeKcHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dTRzcPAta3Iuru5t7e3trSwrqyqqamqq6urqqqqqqioqKmpp6iop6alpKSioJ2bmZmYl5WSkJCPjIuIiIiHhIODgYB/f358e3p6enl4d3Z1cW9tbGxramlpaGhnZmVlZGVlZWVlZmdnZmdqcHd+hYeJgoqPnaCqcHJ7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3W0s3Dwbaux7q7ube3t7a0sa+sqqmpqqyrq6qqqqqoqKipqKeoqKampaSjo6Cdm5uZmJeVkpCQj4yLiYiIh4SDg4KAf39+fXt6enp5eHd2dXFvbWxsa2ppaWhoZ2ZlZWVlZWVlZWZnZ2Zoa3B3f4WHh4OKkZyesWtye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He2NPOxcG3sMS5urm3t7m3tbGvraqpqaqsq6uqqqqqqKioqaipp6empqSkpKKgnZybmZiXlZKQkI+MjImIiIeEg4OCgIB/fn18enp6eXh3dXVxb25sbGxramlpaGdmZmVlZWVlZWZmZ2doaGtxeH+Fh4eDjZSbnb9qc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnUzsXBuLG/u7u6t7e5t7Wxr62rqamqrKurqqqqqqioqaioqKempaWkpKOin56cmpmYl5WSkJCPjYyJiYiHhYODgoGAgH99fHt6enl4d3V1cW9ubWxsa2ppaWhoZ2ZmZWZmZWZmZ2doaGhscXl/hYeJhY6Vm6DLcXR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1M3Gwriyuby8urm3uLe2sa+tq6mpqqyrq6qqqqqoqKipqainp6akpKSjo6Cem5qZmJeVkpCQj42MiYmIiIWDhIOBgIB/fn17e3p5eHZ1dHFvbm1tbGtramlpaGdnZmZmZmZmZmdoaGlrbXN6goaJiYiPlZyhx3J2foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg2tTNyMK5srO+vbq4trq5t7Gvrauqqaqsq6uqqqqqqKioqamopqalpaOjpKKgnZuamJeXlZKQkZCNjImJiYiFhISDgoGAgH59e3t6eXh2dXRxb25tbW1sa2pqaWloZ2ZmZ2ZmZmdnaGlrbG50eoKGiIeHkZeeoLBvd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4dvVzsrEu7SvwMC8t7W5ubexr62rqqqqrKurqqqqqqioqaioqKilpaWjpaSin56bmZiXl5WSkJGQjYyJiYmIhYSFg4KBgYB+fXt7enl4dnV0cW9ubW1tbGtqamppaGdnZmdnZ2dnaGhpa2xvdHuChoiHiJKXn6OZcniAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHc1s/Mxby1rsHAvLe1uLm3sq+tq6qqq62rq6qqqqqoqKmoqKenpaSkpaSjoqCdm5mYl5eVkpCRkI2MiomJiIWEhYSCgYGAf317e3p5eHZ1dHBvbm1tbWxsa2pqaWhnZ2ZnZ2dnZ2hpaWtsb3V9goeIiImTlqCmjXh4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6/Ivb+6tbq8urOyr66rqqurq6uqqqqqqKinp6inp6alpaOjo6GfnJqZmZiXlpORj46LiomJiIiHhYSDgYCAf318e3p4eHd3dXRxcG9ubW1sbGtqaWlpaGZlZWVnZ2hpbG1qa291f4WHiYqOkJuhqXZxeYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrewxr2/urW6vLuzsq+uq6qrq6urqqqqqqiop6eop6elpaWjo6Khn5yamZmYl5aTkY+OjIuJiYiIh4WEg4GAgH99fHt6eHh3d3V0cXBvbm1tbW1ramppaWhmZWZmZ2doaWxta2tveH+FiImIj5Odna5wcnqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5scO+vru2uby7s7Kvrqyqq6urq6qqqqqoqKeoqKempaSkpKOjoqCdm5qZmJeWk5GPjoyLiomJiIeFhIOBgIB/fXx7enh4d3d1dHFwb25ubW1tbGtqamloZ2VmZmdoaGlsbWtscnmAhYiJiZCTnZ28bXR8hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurK+vr67ubm8vrOyr66sq6urq6uqqqqqqKinqKempqSko6OjoqGfnZuZmZiXlpORj46Mi4qJiYiHhYSDgYCAf318e3p4eHd3dXRxcXBvbm1tbWxrampqaWdmZmZnaGlqbW1rbHJ5gYeIiIyQkZ6gym94fYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry0ur/Au7m5u720s6+urKusrKysq6urq6mpqKeoqKempKSioqKhn52bmZmYl5aTkY+OjYyKiYmIhoWDgoB/f358e3t6eHh3d3V0cnFwb25ubm5sbGtqamlnZmdnaGhpam1ubG9zeoKIiomMkZKeocZwen+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9trjCwb26uLq9tLOwrqyrrKysrKurq6upqaioqKimpaOjo6OioaCdm5qZmJeWk5GPjo2Mi4qJiIaFg4KAf39+fHt7enh4d3d1dHJycXBvbm5ubWxra2pqaGZnZ2hpamtubmxvdXyDiIqIi5KWn56xcHuBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7e1w8G9vLe6vbSzsK+sq6ysrKyrq6urqamoqKinpqWlo6KioqGfnZuamZiXlpORj46OjIuKiYiGhYOCgH9/fnx7e3p4eHd3dXRycnFwb25ubm1sa2tramhnZ2doaWprbm5sb3Z9hIqKiIySmJ+gnXR8g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4tMPBvby2ub20s7CvrKusrKysq6urq6mpqKiop6alpKKioqKhn52bmpmYl5aTkY+Ojo2LiomIhoWDgoB/f358e3t6eHh3d3V0c3JxcG9vbm5tbGxra2poZ2dnaWlqa25vbHB2fYaKioqOkpaepJZ6foWOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7TJw8G9ura9uLazsK2tra2srKysqampqaiop6elpaSkpKSioZ+dmpmamJeVlJORj42MiomIh4aEgoGAgH9+fHt5eHd2dnZ1dHFwcG9vbm5tbW1sa2tqaWlpaWpqbW5vcG9xd36Gi4uMlJObnah/dn6JkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw724x8DAvLu3u7i3s7Ctra2trKysrKmpqamoqKenpaWkpKSkoqGfnZqZmpiXlpWTkY+Mi4qJiIeFhIKBgIB/fnx7eXh3d3d2dXRxcHBvb25ubm1tbGxramlpampqam1ub3Bvcnh/h4uLio6WmZ6wen2Ai5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/u8K+wr27t7q5uLSwra2sraysrKyqqampqKinp6WlpKSkpKGgn52amZmYl5aVk5GPjIuKiYiHhYOCgYB/f358e3l4d3d3dnV0cXFwcG9vbm5ubW1sa2pqampqamtub3Bwb3J5goiMjImQmJqfvHJ8iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbu9vsW+vbm6u7i1sbCtrKysrKysqqqpqaiop6elpaSko6OhoJ6cmpiZmJeWlZORj4uKiomJh4SCgoGAf39+fHp6eXd3d3Z1dHFxcXBvb25ubm5tbWxrampra2trbm9wcW9zeYOKjI2KlJicnLh/fIqQmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO6ur/Gv726vby5t7Kwrqyrra2srKqqqqqpqaenpaWjo6KioJ+enJmYmJiXlpWTkI6JiYiIh4WDgYKBgH9/fnx6enl4d3d3dXRycnFxcG9vb29vbm1sbGtra2trbG9wcXFydHqCiY6OjJaUmqKyd42Ik5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFu7q8wb2+ur29u7ezsa2sq62trayqqqqqqamop6Wko6OioqCfnpyZmJiXlpaUko+NiYmIh4aFg4GBgX9/fn18enp5eHd3d3Z1cnJxcXBwb29vb29ubWxsa2xsbGxvcHFyc3V7hImOj4yPmqC0foSEkZefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx7+8t7m4wLm+vry5tbGtrKmtra2tqqqqqqmpqKelpKOjoaGfn56cmZiXlpaVlJKOjIqIh4aGhIOBgYB/f359e3p6eXh3d3d2dXJycnFxcHBvcHBvbm1tbGxsbGxtcHFycnR4fIWMjo2Kl468fXqDi5Kaoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnFvrKwtsC3vL68ubWxraypra2traqqqqqpqainpaSjo6Ghn5+dnJmYlpaVlZSRjoyKiIeGhYSDgYGAf39+fXt6enl4eHh3dnVzcnJxcXBwb3Bwb25ubWxsbG1tbXBxcnN1eX6HjY6MiKKgc3mBio2ZnKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxL64sqikr8Cytbazsq2krKuura6xr7awqKeop6elo6Genp6dm5mYlZeXlpSUko+MjYqIhoaFg4CEg4GAf358enx6eHh4eHd2cXFwcnJyc3Nrbm9tbG5tamx0b3NxdHF4bnV7goyNoJ9tc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzsrCu7evpJ+gl7C/tK+wqKikqKupq6qpqKalp6empKOioqKgn52YlpSSkZGOjoyJh4mHhIOEgX99fHt6eXl4dnV4d3V1dXV1dHBxcXNycnFwdHV0cnBxcG5wb21yaW5wbXR7fp+6i2ZlcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHMxL26ta2inJaPiZKtvrOsqKinn6OlnJ+lpKSjoaCgn5+fn56cmpmYkpGPjo2MiIeHhYSDgoKAfn5+fX19fHt5dnV0c3Nzc3JxcXFxc3JxcHFxcW9xcnJxbmlmcG9tbnyftYlUXGRpbnZ8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djUz8rDvbawqaWgmJGHfHJ4kbS5u62lpqCppqekoqCenp6cnJqamZeWlpaVkpGQjYuJi4qHhoeFg4KCgYCAgIB+fXt6eXh3d3Z2cnJyc3NycnFra2tra2tsa2pndYCQtJ1cS1BXY2hnc3x7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1s7Mx8C5squmpZuTi4mEe3pvZGZ3nLW6q6mop6Sgn56fmpqYl5aSkZCTkpGPjYuIhIeHhYWFgoGAgYB/f39+fHt8e3p5eHd3d3V1dHNzc3JybW5wdHZ2d3mboX5HQEtLVFJTXWhncXtzgIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnSzcfCvrqzraKfnZaRkIR9e3ZvYmNtqq2npqWhnpycnZmZmJaWlZSTkI6NjIuHhIJ/gIB+fn17eXx7enp6eXd2dnZ1dHNycnN0dXV2dnd4eH6CiI2Oj5OXkUg7SklMWVtYYmNqb3R3goWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b3NXMx8O+uLStpaCZlI6Ghnp7eG9nZb6xqaemoZuZmJmcnJybm5ubmpiXl5WVk5CPiYmKiYiGhYOEg4ODg4OBgIOEhISDg4SGj4+QkY+OjYyMkJabmpygp3JHSE1NUFdaXGlqcXmAfIKLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dfU0M7IwLq4tKmlnpmTioeCe3NycGrOrbCvrKefm5qao6OhoKCenp2lpaWmpKSioZ6fnp6dmpmYnZycnZ6enZyjpKWlpaaoqpmZl5WRioWCfYSMk5Wbo6xXQUlMU1VaYWdrc3x3hYmNkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQiYN+enNxsbCsqaeopJmWlJWVlJORkZGRk5SVlZeYl5ebnJycnJybm52dnJubmpqaj42NjIqKiYmDhYWDgX5+fnmGk5mWnJy9RUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlY+Ig394c5+tq6mmp6OYlJKUlJOSkZCRkpCQkJGRkpGRkJCQkJCPj46MjIuKiYmJiYmIiYeHhoaHhIaFg4F/fn99iZSZlJunykhMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuYjoqFgHiHr62rpaeimJSPkpOTkpCQkZKLi4uLjIyMjImJiYmIiIeGhIOCgYCAf3+FhISDg4SGhYWGhoSCf39/f4mVm5WYprhNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKainpSRiod/erysq6WmpJiTkJGSk5ORkJKTjIyLioqKioqNjY2NjIuKiYqKiIeGhYWFhISDg4SEhoaGiIeEgoCAgICLlZqYnKKPUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqKKal4+MhnvIq62npaWclpKRkpOTkpKSk5GRkI2MjI2NkJCPj46OjYyOjYyLiomIiIWGhIWFhYaGh4mIhYOAgIGFj5iYmKCrdFNXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6noJ6UkYyEx6ytp6ennpaSkZKSkpKSkpGSkZCQjo6OjYqKioqJiIiHiYiHhoWFhISGhoSEhYWGhomKiIaDgYGBhZSdmpifsWJXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezraakmpeQjLessKimqJ6Xk5GQkJGRkpCPkI+PjIyKiYmIiIiIiIeHhoeGhYSEg4ODhoeHhoeHiYiKi4mGg4GBgoWUn5uYnrVYW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t7KrqZ6bko+nrLGopqidlZGRj46QkZGPjY2MjImJh4WEjY6Ojo6NjY2NjYyLioqKiomJiYmJiouMiouJhoSBgoKLlJuZmaK+W15iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u3sqqloJeUmbCsrKSonpOQkJCQkI+PkJCNjYyLiYmJiYmKi4uKiomKiYiIh4eGhoWGhoeHiIqKi42Mi4iGhIOCjpiZm6OlxVxgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/uLStp6KZk5W0qqiipJySjY6OjIyMi4yMjIyKiYmHh4eKi4yMjIuLjIiIiIeHhoaGh4aHh4mKiouNjYuIhoSDgo6XmZqhorRaY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7q4saqlnJSQuaikoKKakIuLi4uLiYmJiYiHh4aFhYWFh4iJiYmJiYqHh4aGhoaFhYeHiIeJioqLjo6MiYeFg4KPmJyZoaKdXGdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS9u7SspqCWj7umopyemJGJiIiIh4aGhoaDg4KCgYGBgYOEhYaGhoeIh4eHh4iIiIiHh4eHiYqMi4+OjYmHhYSDkpecmqOoiWNqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGv7y1rKahmZC4o5+ampWOhoSEg4OBgYGAgYGAgH5+fn5/gIGCgoOEhYWGhoaHh4eHh4aHiImKjI2Pjo2KiIaEg5KXm5ylrXZmbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx7+6tKykoJmQrJ6clZaRiYGBgYCAf35+fn19fXx7fHx8e3x9fn+AgoOCg4OEhIWGhoWGhYeIiouMjo2MiYiGhYSTmZqbpLFoZW52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa+t7GqopyWj52Ymo+RioJ9fHt7enl5eHd4d3d1dXV0dXR1dnd4eXt9fX1+f3+AgYGDhIOFh4mMjI2MjImIhoWElJuXnKS4ZGhxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDvLWwqqCZk42TlJeLjYZ8enJycnFwb29vcHBwb21ubm9vcHJyc3V3eXl6e3x9fn5/gYKChIaIi4yMjIuJh4aFhZSclp2nv2dsdHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jp4dvUzsvFurmyqqagmZORi5SRiYqFdm1wbm1sbnBvbWdoam1ucHBxam9ycW9vdHdwd35+fX9+e319gIGGiYqMjo6MiIaGiImYmp2fn8NlbXV+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn4N7c08rFxMC2raWfmZCGgXmEhH5/fHJuZmVjY2ZmZWNpZ2ZjY2FiYGBcXWVrbm5wbmxtc3Vyc3d7fH6ChYiMjI2Ni4eFhYeJmJmboKbEam13gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497Y0szGxMC6q6KZk42FfXlxf4OAfnl1dWVkY2NlZGNhYmBgXVtaWFhfXFxiYV5eY2hoa2xucXN1eXl7f4OGiYuMjIqIhISGiJmZm6CmumxweoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7W08zHwbu2sKSfmZSOhn9+kKG0wtDc4en6+fj7+/r6+Pj06t3Mva+oeG5kYF5fYWNnamtnaW52enN1eHt+gYWIjIqJh4SEhoqam5ygoadrc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY1s3AuLOvp6GemZabqL7Z7e/1+vv9/Pr69PTz9fX19PP29/n7+vr49/713ruWdWBTXVxgaGtnZmtvcXR4e3+DhomKiYaFhYiKmZyboKSZbHV9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cXDvLOspJ6fsMDZ8Pv9+/v4+Pf4+vz8//z8/Pv8+/r6/f36+Pf19PT5+PXy8u7dzIFyY11dXmJoam1xdXd7gISGhoaFg4SHipmbmaKrk3J3foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe/vrWsqbHG2/n5+Pj5+fv//fn29vf3+fv6+vr5+fn4+PX09fb2+Pn89/n5+fz////216JyWFdjbGRoa3Bydnx+goKCgoGChoqZm5ikrIpzeH+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/uK+pt9bu+f//+/v9/fj19f75+Pj49vf5+Pj49/b4+Pn6+/r6+fb19Pj39vb18/Lz+Pr88MWKWURdYWVpbHB2eX9/gH9/gISJmpyao6d/cHmBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTe2tPNysS4sbLE3vD5+vj4//38+/v6+vn8+vn4+fr5+Pr5+fj6+fj4+vr5+fn5+fn39/j5+Pj39/n29ff467+MU15eZWprcXd5fX19foCEipmdmKGtcnN6g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd1s/Nxrq1ub/h6/b9/Pr49fz7+vr5+fj3+vj39vj39/b4+Pf39/f29vb29vb29vb29/f29/b39fbz9Pf6+fXo1btiU2JfZWt1dnp7e3yAgomYnJihrnJ0eoOMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1M7Lv7Wzt83q9vn7/Pz7+/z6+Pf49/j39vj29vT29vX19fX09PX19PT19fX19fX19fT09Pb19fX09vLz+Pr59vPo24FbZVxrc3B0dnd6fYCHlpqYoa9xdHqEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083GvriyvN34+/r8/Pz7+/v7+fj4+Pf39vX39fX29fb09vT09PX09PT09PT09PT19fX09fX19fX09Pjz8fb6+/j09/Pwm1pfW21tcnJ0d3uAhpSXmKKwcHR7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGt7W2y+36+fj+/Pv7+fj29fn4+Pf49/f2+Pf19fb29vX29fX19fX19fX19fX29vb29vb39/b29fX09vTy8PL3++v68POwXl9dam1vcXV3fYOSlZigsm90fIWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3EvrS11fn/+vb3+vj19fX19vb5+Pf2+Pj39vj39fX29vb18/X19fb19fX09fX19vb29vX29vf39vb28/j27+vs7/Tu8vzv9sxqWGRpa21wdHl/j5KWnrFtdXyFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurPB4Pj7/Pv7/P369/X29/n59vX19PX29fX29fTz9PX08/Pz8vL09PT08vPz8/T09PX09Pb19vX29PH49/Pz8/H08/Xw9vP30WdcYmVnbHB2fo+PlZyxa3V9hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKs7PX59/b9/ff7+ff29vf6+vTz8vLz9PT09PPy8fHy8vHw8PLy8vPz8/Dx8fHy8vPz8fLz8/T08/Pu9vj39fDx9/r08fT999jJWFxgY2hudHyOjpacsGp1foSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+Hc2sy+uLG26f78+/r6+/z7+vj39/j49/f5+fj39vX19PTz8/Lx8fDw8vLy8vLy8vLx8vLz9PT19fLz8vPy8vHx8/T19fX18/L09PP08e/s6LxiV1tjW3CAiYuVlblocHqGkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u3s6eXi4N/e2NbV09LR0M/OzczLycnJycbIy8vLztDS1dbY2tvb29zn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc2M3Htq644vP8+vn4+vr6+ff39fX19vX09fXz8/Lx8vHz8/Py8fHx8PHx8fHx8fHx8PDx8fLy8/Py8vHx8fDx8fLz9PX08/Py8/Ty8/Du6ObMkFRaX2pkf4WIkZO3Z295ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7r6OTj49/Z1NfV0s/OycfFxcTCwMDAwMC9wMHDw8bKy8jLz9XY29rb4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1s7BurWx3vn7+fn49vj3+Pb49/Xz9PTz8vHw8fDw7+/v8/Pz8/Ly8vLx8fHx8fHx8e/v7/Dw8PDw8PHx8fDx8fHx8vP08/Pz8/T08vLv7Obk3sRtWWJrYXWAhI2StGdueoWPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn5+Tg3NbT0M/HxcG/vbu5uLe2tbSzs7S0uLe4tre2trbHxcLEydDW2dnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDFurOy1vn6+/r5+Pf39/b1+Pf18/Tz8vLy8fHx7/Hx8fLy8vLy8vLy8fHx8fHx8fHv7+/v7+/v7/Hx8fLx8fHx8PHy8/Pz9PT08vPx7urk4OPXpWFfVWZpfIGKkLBmb3mFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi397b19LNx8PBure1srCwsLCnp6enpqalpaqrra6vsbKzr7a7vby9xcvQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLwLisxPP++/z6+vj4+fn39/n49PP09PPy8fHy8fHx8/Py8vLy8vLy8vLy8vLy8vLy8fHx8fHx8fHx8vLx8vLz8/Ly8vP09fPz8/Hx8O3o4t7d2NOJUkVjZHp+h46sZm53g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnSysPCw7+7uLCwsrfAzNfe9fX4+Pj39fXw6+Xbz8W8uKmoqauvtbvAxMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbqywOj3//r9+/r59/n3+Pf49vXy8vP09PHx8PDx8fLy8vLy8vLz8/Pz8/Pz8/Pz8/Ly8vHx8fHx8fHx8vPz8/Tx8fLz8/P09PPy8e/s5+Hd1NbfulhLWGl2fIGMpmNrdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSxcHAvrm0tLjP2Obz+/78/PX3+Pn6+Pf2/Pv6+fn39fTZzb6zr66sqrq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72yteP3/Pr49/v5+Pf29vb19vPz8PHz8/Tw8O/x8fHx8fLy8vLx8fHx8/Pz8/Pz8/Px8fHx8fHx8fLy8vLy8vPz8fHx8vHy8vLx8fLw7Ofg3dHY2NaMWExrb3V6hp9fanN9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxr64s7W7yNzt+Pn7/Pv+///5+fv7+vr6+f////79+/n2+Pn15s+6rKaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3rc/u/vv59fP5+Pf09PX08/Pw8O/w8vPz8PDy8fHx8vLw8PDv7+/v7/Ly8vLy8vLy8PDx8fHx8fHw8PDy8vLy8/Dw8fDw8e/v8fDx8Ovn4NzU1dTayF1JaWtwdoGbXWhxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb22s7nP6PX5+Pn6+vf08/Ly+vn5+fn5+Pry8fL09fX18/f5+vz569bGoaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHr5eHayL25r8Pt9vj//f339/b29/f38/H08/Lx8PLy8vLy8vLx8fHx7u7u7+/v7+/w8PHx8vHx8fLy8fHx8fHx8vLy8vLy8vLy8vLy8vLy8vT08ezn4+Dc1tzX0NSkSFVqbHB9k19oc3V9iZGYnqivub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PPu7evq6uno5+jn5+bl5eXl5OTm5+jr7e3o6Onl4OHg2tXWzcbDv7evv9jx+fr8//76+vr5+fz8+/v6+fn6+fr6+Pr5+fj49/n29/j49/f3+OvKqJ+pt7/Aw83X2tre5uzu8PP2+Pr7/P/+/Pv69/Pv6OPf0sW5sq/b8/b3/fr69vf19fb19fPv8/Px8fDy8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vLy8vHx8fHx8fHx8fLy8vLy8vLy8vLy8vLy8vL08vHs5+Pg39fd3dLbvmJPWGBibYFSXGVvd4OOlp2kqLO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro6Obk4uDg397e3d3d3dzc3d3d3N3d4d7f4N3c2NPPycS/uq+y0O/2+ff3/P79+fn4+Pn5+vr4+Pf49/f3+fj3+Pf39vf39fb39/b29vfq49S+qJ6svcHEy9HZ3+Lh6+3x9Pb5+/z+/Pv6+PXw7OTg2crAuK+88Pj0+Pv29/P29fT19PTx7/Lx8fHw8fLz8vLy8vLy8vLz8/Pz8/Pz8/Pz8/Pz8/Py8PDx8fHy8vLy8vLy8vLy8vLy8vLy8vLy8/Lw7Ofk4uDe3uHX4eGLSFdiZm19Uldeb3WAipOdpaqss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6eno5eLh3t3b3Nvb2tra2trY19fW1dTU0tjV1tfUz8zJxryzsrHC5fL5+Pf1+Pv8+fn39vb5+Pj59/b29fb29vb29vX19vX19fX09vb19fX07vj56MKkn6m1usDJ0tzd3Obp7fH09/n7/vz6+ffz7eni3NXFvbe31vf49fr59vbv9/b09fT08e/x8fHw8fHx8/Hx8vLy8vLy8vLy8vLy8vLx8fHx8fHw8PHx8fHy8vLy8vLy8vLy8vLy8vLy8vLy8vLx7uzp5uTi5OHj4OX4u0pTXGFqeE9SWmRqcnyGjpifpa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHk4NvW0tHPzsnIyMfHx8fHz9DR0dLT09LOz8/MxsPCwL+ysbPK7vv/9/r7/Pz5+Pb5+Pj39/j5+Pf29fX29fb29fX19vb29fX19vX19vX08/X4/Pvt0bShpa23wMfP19zh5Oru8fT3+f78+vj28evm39fPw7m0xO/4+fn5+Pj47/n39vT19fLy8PDw8fHx8fLx8fHx8fHx8fDw8PDx8fHx7u7u7u7u7u7v7+/v7+/w8PLy8vLy8vLy8vLy8vLy8vLy8e7s6uno5erl5urp/eFkUVdbZHBLTllfaHR+hIyVm52krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dLPzMjGxMHExMPDwsLCwsLCwsLDxcXFwsbFwL29ubSrrLng9/j8+P////36+Pb3+vr4+Pj5+fj19/b29fb4+Pf39/f39/X19vb19vX29fT68/L6//PZw6OkqbC8xs/V2+Dm6+7x9Pf9/Pr39O/o49zTybyytNX8+fz7+Pf4+PT49vX09fTz8vLx8fHx8fHx8fHx8fDw8PDu7u7t7e3t7Orq6urq6+vs7u7u7u7u7+/y8vLy8vLy8vLy8vLy8vLy8vHu7ezr6uru7Ofw7fbzlEhOUVhiQ0dQXGRtc3h/h46VmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0cjHxMPAvLm2uLe2trW1tLWysrO1trm6urq8uLS1tKykorfl/vz8+vn9+vj4+/r59/r5+Pf4+Pj29vX09fb19vb29vb29fb29fX19vb29vX18vT2+fn18u/AsqOntcPIx9Ta4ebq7fL1/Pv49vLs5eDX0cK3rLro//n69/X3+Pb39vTy8fLz8fHy8vLx8fHx8fHx8fDw7+/u6ejn5uXk4+Lh4eHh4uLj5Onq6uvs7e7u8vLy8vLy8vLy8vLy8vLy8vLx7u3t7Ozs8fTu8fPt8846RUxRXEhISlpgaG5zeX6BkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jCwLy6uLm5uayrqqmop6ensrKwrq2rqamuramoqKOeoMLr/Pn5+/v4+vn4+fr7+fX5+Pb19fb19PL08/Py9PX19fX09fP08/Pz9PX29vb29e/1+Pfy8fX8682wpa+6vr7N09vi5urv8/v69/Xx6+Pe09C/tKnB9v339fLy9/j0+PPx7+/v8fDw8vLz8/Lx8fHx8fHw7+7u7uTj4uDe3Nra2tra2tvc3d7m5ujp6+zt7vLy8vLy8vLy8vLy8vLy8vLw7+7u7e3t7fP58/H35+74hqC4zu3w+fr19/b06trJvJCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9ubi3ucHN1977+vn49vb19e7n3M6/sKegoJ+en5yVmqn49/j2+fz5+fX29vPz9fTz9fX08/P08vHy8vHx8vLz8/Pz8/Py8vLy8/P09fX29vb69e/v8PP08v/kvqmlrLS5x87X3+Tp7vP8+vfy7ung2dHLt6mq8/3y+vf29fb39vP29PHx8fHw7/Lx8fHx8vLy7vDw8e/q5uPh3tfSzMnHxsbExMTIyc7T1tjc4eTn6uvt7u/v8fDx8vLy8vLy8vLy8fHw8PHx8vLz8/Tz8/X29/T29/j49vj3+fr6+Pn5+fj4586xnpmdo7K6vMPT1tHQ2d/g3+Lh3dnY08m/urm4uMrX6PT5+vz8/Pv6+/r5+vn4+Pj29/br37qlkIqHjbry+vn6/Pz6+fj5+fj4+fn5+Pn39fb19vX19fT09PPz8vLz8/Pz8/T19vb09fX08vLy9fX19vb18+/o6uHCpZymv7/I09jj6Ozv+vn18Ozn3tfOx7enuPT98vj29PT29fTz9PTy8PHw8O/x8fHx8fHy8u7v7+7r5eHe2NTNxsC8ubi5trW3u73Dyc/S2Nzi5enr7e7v7/Hx8fLy8vLy8vLy8vHx8fDx8fLy8fLy8/Pz9vfz9Pf39vb39/j5+Pf4+Pj48PLx6djBp5icq7i/xMTJ19jZ19bX1tDOy8G8uLW4zeby9Pf5+Pj6+fr5+Pn49/j39vf39vf59vDv272UhLDr//j5+Pn5+ff2+Pf19vb39vX18/Lx8vPy8fLy8vHx8fDw8fHx8fHy8/Tx8fHy8fHx8fXz8/Lw7Ojk1tTSvaWkqK62xM7V4eDi8fn49O7q5NvTyL+0ps30/fP39vTz9PTy8fPy8vHx8vLv8fHx8fHx8fHu7Ovp5uDZ087JwLiyq6impqWlqaywt73HytHX3uLm6uzt7+/x8fHy8vLy8vLy8vLx8fHx8fHy8vHw8vHz8/X28/T19/b29vX29/f39vb39/b5/f356tbHnKOtsrG0w9TKys3PzMrHwre2s7TH5fb3+vj29vj5+fb3+Pf39vb29vb3+fj49/n6+ff14NDr//L49vj3+Pf18/b18/Pz8/Ly8PHw8PDx7/Dx8fHx8PDw8PHx8fDx8fDx8PHy8/T09PT18u/r6OHb1sO8vbWqqKeotsPHz9zi5e759/Pt6OLZ0Ma5sarj8/v09/X09PX08vHy8vHw8vLy7/Hx8fLx8fHw7ezo5uDY0MvDu7GnoJmWk5OSk5ecoauyu8LL0tng5Ons7e/v8fHx8vLy8vLy8vLy8fHx8fHx8vLv8PHy8fL09fP09vf29fb29/f29fX29vb7+ff5+vn18Mu3op2msru7wsPGxL69u7avq7fb9/78/vv5+fv7+vf09/f49/f19fX49/r7+Pb19/36+/v6+fv69/f39/f29PP39fPy8vLy8fLx7/Dx8vHy8vHx8fHx8PDx8fLy8PDx8fHx8vT19fT18O3n4NjPxcCyqKKipJyZqbK6xNPV3ubq+ffy7Obf1s3Fs6y18fT59fn39fT09fTy8vHx8PHx8e/x8fLy8fHw8Ozp5OHa0ce/tKufk4qEgH17e3+EipGcpLO6xM3V3OPo6+3v8PLx8fLy8vLy8vLy8vLx8fHx8vLz8PDy8vHy8/Tz9fb29/b29vb29vX19vf49/bz8/X19/f72rWdnKerprm5uLOxtLOtrcLi+//6+f3///77+fn39/j39/j39/b4+Pb3+vv49/b3/fv7//v09/n49/f39/b09vX08/Hy8vHz8vHx8fPz8/Pz8vLy8vLy8/Pz8vLy8PDw7+/v7+3r6ePe1MzAtaqjnpCHhouDgpi3vr/N0dri6fj28erk3dPKw6+oyPf29fX6+PX19fT08fLx8fHy8fHv8fHy8vHx8O/q5+Hc08m7tKScjYB3cm1oaWluc3qFj5qqsb3H0dvi5+vs7/Dy8fHy8vLy8vLy8vLy8vHx8fLy8/Lx8vHy8vPz8/T29vf29/f29vX09fb3+PLw7+/v8vX5//rkv6CSmKWsraqprKyoqMrs//r1/v70+vr7+vn5+vr49/j49/f3+Pr39vn7+ff29/z8+fn6+fX4+Pf4+Pf29Pb28/Lz8/Pz8vDx8fLy8/Lz8/Pz8/Pz8/Pz8/Ly8u/v7+7r6Obi3trPyr6zppqPiIR3b2trb3B3i73CyM7f5O339e/o4trQx7+qotv6+fP2+vf29vT19PHy8vHy8vLx7/Hx8vLx8O/u6ePd1cy+sKaWi31wZmFbV1daXmRsd4aRoKm2ws7X4efq7O/w8vLy8vLy8vLy8vLy8vLx8fLy8/Pz8/Py8vHz8/H09Pb29fb39vX09PT19ffz8/T09PLz8vL8++fFoZGaoqGgoKKdprz69vf8/vv4+fj3+vr6+vn59vb39vb39/b39/b4+fb19fXz9fXz9fj29fX29/f39PT08/Hx8PLy8/Px8PDx8fHx8fHx8fHx8vLx8fHy7+/u7u3r5OHb1M7IuLGmmIx+dG1kYF1YV11fZGKxxsrO3ODt9vTu5+DYzsW8pqDo+/vz9/n49fT19PLx9PLz8vLy8e/x8fLy8fDv7uXh2tHGuKidioBvYllTTEpLTFBZYWx7h5ulssDL1uHn6uzv8PLy8vLy8vLy8vLy8vLy8vHy8vPz9fT18/Hy8vPw8vT09PT29PXz8/Lz9fb4+/n29fb29vXz8fD59MqXfpKUj5GUlrbs+/j4+fr6+Pf29PPz9fb29vX19PX19fX18PP19vb09PP08/T19vf29/Pz8/X29fTy8vHv7u/x8/Pz8vHx8vLy8e7u7+/v7+/v8PDu7+7s7Ovo5N7X0Mi+uKOcj4J1aF5ZSE5NSlBNTWOcv7nEzNfd6/fy7efe2M7Ctqex9/H79/X49/f39/Xz8fX08/Lx8fLy7/Dy8vLx7erh2M/EtaWVh3hrWUtGRkVESkdGS1NhdYKKo6q3xdzk4+7w8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLy8/Lz9PX08/T09PX09fX4+Pj39/f39ff49/Xz9PT19fHy9vjsun2Ih46CiLnx//z6+vv7+/r69/b19ff3+Pf49/b19vX19fX19vX29vX19/j4+fj39vX39fX19fT08vPx8PHx8fLy7e3u7u3t7Ozp6ejo6Ojp6u3s7e3r6OTg3NnSy8O3p5qPhHNmW1FKSEFBQUU+Ol+ZqLK9yNLa4en28evl3dbMwLWmt/jx+vf2+Pf29vb08vD19PPy8fHy8u/w8vLy8e3o3dXLwbCejX9nX1JJQjw6Ozg4OTxFVGl6jJ6quMHa4uPu8PLz8/Ly8vLy8vLy8vLy8vLy8vLy8vLx8vLx8/Pz9PPy8/P08/P09vb29fb29PT29vb18/L09Pjz8vb8+dmtc4B6eqHu//b5+fn5+vn49/f29fT19fb29fb19PT09PTz8/Tz8/T09Pb29/f29fTz9vTz9PP08vPy8fHw8PLx8e3t7evq6ejn4uHh4OHh4uPl5efn5OLd2tTRyb6zpZWIeXBgUEhEQ0E8Oz47Q26Xnqq1v8nT2uHp9e/q49rTyLyypML58/j29vb19PX08/Hw9PPy8vHx8vLv8vLy8vDr5drQxrimk4FxWE9IQjs2NDk1Njg7P0tdbI2crrnA1uHj7/Dy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vHx8vLy8vHx8vHy8fLz8/Lz8/Pz8fL08/Py8/T39PP2+//24YVwa47d+/3/+fj4+Pn29fP39vPz8/Lz8vX08/Pz8/P08PDx8vLz8/Tz8/T09PPy8fXz8vHz8/Lx8vLw7/Hx8PDq6ejk4+De3NjY19bX2NnZ3d3e393a1NHLxLqtoJB/c15RRkJBPjo5PT40SXuPkaauuMLL1dvi6fTv6eHY0Ma6sKLP+vX49Pb19fTz9PTy8PPz8vLx8fLy7/Lz8vHu5+LVzL+wnYl1Zk5IQjw5ODs+OTk7OzxBSVCEoba+xNPi5e7v8fLx8PDw8vLy8vLy8vLy8vLy8vLy8vDx8fDx7/Dw8PDx8PHw8fHx8fLy8fLy8vDx8fHw8fL09/Py9Pj+/vfMdHPL+vz3//j5+Pj49/Px9vbz8vLz8vHz8vPz8vPz8+/w8PHw8fLy8vLz8/Py8fHz8fHy8vLy8vPy8fDw7+7t5ePg3NjUz87KycjIyMnLzM/Q09PRzsjFvLSnmYp7a2BJRD88Ozk7QDk5WXyDjJyisbvFztfd4+v07ujh18/EuK2g3Pv29/P19PTz9fXz8e/z8vLy8fLy8vHy8/Lx7ebe0sa6qZWAbV5HQzw4OT9APzw8PD09PDw9aqG6w8zT5urv8fLz8vHw8PLy8vLy8vLy8vLy8vLy8vLw8PDw8PHw8PHx8fLx8fHx8fHy8PHy8fHx8vHx8fL08/b08vLz9Pb19bCy7fz8+vP6+vn5+Pb08fj28/Px8vLy8vHz8vLz8/Pw8PHx8vLy8vPz8/Pz8/Ly8/Hx8fPz9PP08/Hw7ezo59/d1tHMx8O+tra1tLW2uLm+v8LCwry3s6iekIFzY1ZOQEA/PT4+Ozg/Z3x/ipOdrrS+yNHa4Obt8+3n39bNwrasnef6+PXz9vX09PX08/Lw8vLy8vLy8vLx8vLx7+zj3MzBs6ONeWZXRD45NjtCQj9IR0VDQ0I/Ok6PvMrU2Ovu8fL09PPx8fDy8vLy8vLy8vLy8vLy8vLy8PDw8PDy8vLy8vLy8vLy8vLy8fHy8fLy8PHx8vLx8/T38/Hx7+/z8/ns8PH++fX1+vr4+vj29PL39fPy8/Lz8fLy8fHy8vPz8fHy8vLy8/Px8fHx8fHx8fHy8fLy9PPz8/Lw7erm4t/X08zFvreyrKWko6OjpaeorrCxsrGrpaCTiXpsXlJJRUA8PEI/ODxGbXeBh42aqbC6xM3V3uPo7/Ls5t7UzMG1q5zx+/r18/X19PT09PLx7/Hx8vLy8vLy8fLy8O/q4djJvK6ch3JfUEU8OD1CRERGT1FQTk1MSUU9dcHX3OLt9PHz9PTz8fDw8vLy8vLy8vLy8vLy8vLy8vDw8vLy8vLz8fHx8fLy8vLz8/Ly8/Hx8fLy8vHw8fL08vL08/Lx9fb7+fb8+P/29Pj39/f29vT09fXy8fPz8vPx8PDv8fHy8vPz8vLz8fHx8PDw8PDw8PHx8PDw8/Py8vLw7erl4drXzsi+tq2knZeUk5GRkZOVl52dn6CemJCLfHJkWU9HQ0JDPz89NDZQcXV/iJCao7C+wcrT2uLm6/Hx6+Xd08vAtK2b9vn69PP19PPz8/Pz8fDx8fHy8vLy8fHy8vDv6uHXx7mqmYNuW01IPTlBR0ZJU1NXWllYWVdWOWPF4eHq7/Xy8/X18/Lx8PLy8vLy8vLy8vLy8vLy8vLw8vLy8vPz8/Hx8fLy8vLz8/Pz8vLy8PDy8/Lx8PDx8u3x9vj39vn78PX+9vX6+/f29fT19fTz8vTz8PDx8fPz7+/v7+/x8fHy8vLy8fHx8fDw8PDw8PDw8PDv7/Ly8fDx7+zn4tzX0cW+tKugmI+JgoGAgICChIaLjY6QjYaAemlfU0pEQD9BOz87NkFbb3J3g46apbC5wsbP197k6Ozy8evk3NLJvbGfu/D68/P28/b09PP08/Hw8vLy8vLy8vLy8vHu7Obc1MO1pZB8aVhMSDU9Q0tSVFpZW1xcW1pVUVBLreXs8+vz8/Pz8vLy8vHy8vLy8vLy8vLy8vLy8vLy8fHy8vLy8vHz8/Ly8/Py8u3u7u7v7+7u8fLz8fDx8fLz8/T19fX29/T29fb39vf29fTz8/X09PT29fTy7+/v7/Hx8fHx8fHx7+/v7/Hx8fHy8vLy8vLy8vHx8fLx8fDw7u7r5+Da0cnCs6GWjoV4b25ta2hpbXBydXd5d3VyamVUS0RAOzxAP0U2MURgb3V9iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wn7zw+vTz9/P29fT09PLw8PLy8vLy8vLy8vLx7uzm3NTBtKSPe2hYTEY4Q0dQWFpeYWNkZGNiXVhWTqXm7vXt8vT08/Py8vLx8vLy8vLy8vLy8vLy8vLy8vHx8vLy8vHx8/Lx8PHx8O/t7e3u7e3t7e/w8e/w8PHz8fP08/T09vbz9fT19fX19PHw8PDy8vLw9fTz8e7u7u3t7e3t7vDw8O/v7+/x8fHx8vLy8vLy8vLx8fHy8fHw8O7t6uPe1cvCt6mXin9zaF9fWldXWFleYmJjZWNhXVVNS0RCQDs4PEE1QlNlcnmCi5Wcp7C3vsfO1dng5uru8vTw6uPa0Me7r5+88Pnz9fb09fT09PPy8PDy8vLy8vLy8vLy8e7s5tvTvrGfjXloWUxFPEpOVl5iY2ZoaWloZmJdW1Ka5/H57vL19PLy8vHy8vLy8vLy8vLy8vLy8vLy8vLx8fLy8vHx8fHw7+/t7ezr6urp6ejo6Ojq6+zt7e7w8vDx8/Ly8/X18/Py8vLy8vLz9PLz9PLz8e/u7Ovp6Ojp6Ojp6uvs7O3u7u7v8fHx8fLy8vLy8vLy8fHx8vHx8PDu6+jf183BuKibh3dsYldOT0lGSUpHS1JSU1NTUU1FQD9BPz5APjk1Q1tyeX2DjZihp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6evvD59fX28/Tz8/P08/Dv8vLy8vLy8vLy8vHu7OXa0ryvnox4Z1lMQz9QUFtkaGpsbnBvbm1oY2BXjerz9/Dz8/Pz8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vLx8fDx7uzq6ufm5ePi4eDf39/f4+bn6evs7/Lv8fLz8/Hz9PT08/Py8vLy9vT08/Py8e/o5ePh4N/f4ODh4+Xl6Ors7e3u7/Hx8vHy8vLy8vLy8vHx8fLx8fDw7Orj29DGua2bjHdmXVVNQ0I+PUBAPj9DSElKSUZCPjs+PT5DQjc4SmVyen2Ejpihq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtn8Dy+fT19fP19fPy8/Lx8PLy8vLy8vLy8fLx7uvl2dG5rJyLeGdaTkNDUlJcaG1vcnV2dnVzbmhiWn7t8vTw9PT08vPy8vPy8vLy8vLy8vLy8vLy8vLy8vHx8fLx8fDw7u3q5uTj4N7a2djW1dXW1tzd4OPn6e3x8PHy8/P08/T19vP08/Lz8vTy8PDu7Ono393Z19bV1tbX2d7f4uTp6uzt7u/x8vLy8vLy8vLy8vLx8fHy8fHw8Ovm4NbLvq+jjn1nWFBKQTg9PTs3Nzs+PkBCRUZCPzs7PEBAPTk6UXJ2e4CIlJ+mrLa8xMvR197i5unu8vT2+fvu6OHYzcS4rJ/B8/j19vbz9PT08/Py8fDy8vLy8vLy8vHy8e7r5NjPuKybi3hqXFBFRlZVYGtxcnd5e3t6d3JtZV9y8fHx8PT09PLy8vPz8vLy8vLy8vLy8vLy8vLy8vLx8fHx8fDw7+zq5uLf29fW0c/NzMvLzM3Q09fb4OTq7e/x8vTz8/P09fX08/Lz8/P08u/t6OXh3dPRz83Ly8zNztDW2d3g5efr7O3v8vLy8vLy8vLy8vLy8fHx8vHx8PDo5d3QxLakmIJwW05GQDczOEJMTU5ORjw9PD5AQUE/Pjo7NDRFYHN6eYGMlqGnr7m/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKufwvP49vb28/Pz8/Ly8/Hv8vLy8vLy8vLx8vHu6+TYz7iqnIt5bF9URUhYWWZxdHh6fX9+fXt1b2lhZ/Pz8vH19PT08vLy8fLy8vLy8vLy8vLy8vLy8vLy8fHx8fHw7+/q5uLe2dXQzcPCwL69vr/AxsnO09ng5erw8vLz8vLz8/Py8fLx8PDy8vDs5+Pd19THxcPBvr6/wMXJztTX3OHl6uvt7/Ly8vLy8vLy8vLy8vHx8fLx8fDw6OPZzL+unI56aFRIQDs7QVBRUlFTWFpaTUE3Njo8PDtANDhRbHt/fYSQm6GqsLjDyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirnsL19/X39vTz8/Py9PLy7/Ly8vLy8vLy8fLx7uvj1864q5yMem1hVUZJWlxrdHd7gIOFhYSBe3VrY2Dy9fLz8/T08/Lz8vHy8vLy8vLy8vLy8vLy8vLy8vHx8fHx8O/v5+Tg29XPy8m5t7Wzs7S2t8DCyc/W3eLm7/Dz9PLy8vHy8e/v7u/w8O3q5eHc1M/Kvru4trW0tbXBxcrP1Nrg4+rr7e/y8vLy8vLy8vLy8vLx8fHy8fHw8Ojj2Mu7qpaHdGNQRDw8SFdQUVJXWlteX2xUPTQ4PDw6OkJfeXx5g5GSnaWrtb/EyNLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qp3A8/b09vX08vPz8vPy8vPy8vLy8vLy8vHy8u7o4dbMtqqdjnxuY1hOS1hibnB2gYKEhoaEgXt1cmdf7vXv9fH19PPy8fPy8vLy8vLy8vLy8vLy8vLy8vLv8fPy8fDt6+Te2tPLxL23rqymoqClrLK1u8bL0dbe8uvt7/Hx8fHx8vLx8fPz8fDp5t/X0MfAurOvqKalpamvsrrBydPW1djq7O/w8O/x8fLy8vLy8vLy8vLx8vLy7u3n4NTFsqGPfmZeUEQ3QFFRWF1jZmlsbm1uc2M3PkM9NzdmgX+FjZKaoKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mdwPP29Pb19PLz8/Lz8vLz8vLy8vLy8vLx8vLu6OHWy7erno5+cGRaUU1bY3ByeIODhoiIhoN9d3RpYO/18PXy9vXz8/L08vHy8vLy8vLy8vLy8vLy8vLy7/Hz8vHw7eri3NXOxL21r6OemZWVm6Gmr7bFyM/V2+br7e/x8fHw8fHw8PDy8fDu5uLa0svCubOoopuYlZaanqqyusPN1dzj6evv8PDv8fHy8vLy8vLy8vLy8fLy8e7s5t3Tw7CfjHxmW09CPk1aW2JobnF0eHp6fHp7WTk2O1+AiYiIk5qfqKuyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epncDy9vT29fTy8/Py8/Ly8/Ly8vLy8vLy8vPy7ujh1su3q56Rf3RnXlVPXGVyc3qFhomLiomGf3l1a2Lx9/H28/X09PPz8vLy8vLy8vLy8vLy8vLy8vLy8u/z8/Lx8Ovm3tbPxbuxqaKbk4yKi46VnKexv8XL1d7m6+3v8fHw8PDw7+/v8fDu7OLd1MvCuK+pmpSNi4qLkJWhrLW9yNHe6Onr7vDw8PLy8vLy8vLy8vLz8vHy8vHu7OPbzr+snIl3YlJKPEJXX2Fscnl9gISGh4iMjn43Q3KSkZCSmqSmqrG3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZ3A8vb09vXz8vPz8vPy8vPy8vLy8vLy8vLz8+7o4dbLt62gkoR2a2FaUlxlc3R8h4iLjYyLiIJ8d2xh8fXy9/T29fPz8/Py8vLy8vLy8vLy8vLy8vLy8vLv8vPy8O3n49nQyL2xpp2TiYF7fX+EjZWhrL3Fx8/c5uzu8PHx8PDw8fHx8e/t6+nf2M7Dua6hm46IgX19f4WLmqixucLO2+fp6+/w8fDy8vLy8vLy8vLy8/Lx8fLx7ezi2M29qpeEdWBPSDhFXWJldHuCh4qOkpOYkJmUa42emZecoqWnrra6wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmdv/L18/b18/Lz8/Lz8vLz8vLy8vLy8vLx8/Lu6OHWy7iuopSGeXFmYFRbY3J1fYiJjI6NjImCfHZrYfH18PXy9vX09PLz8vDy8vLy8vLy8vLy8vLy8vLy8fLz8vDs5t/WzcG0p5mPhX11cXJ0eYONlaG0w8jO2+Xt7/Hx8fDw8PPz8fHv7enn3NXIvLCjl459eHJwcnZ/h5OirLS9ydjl6uzw8fHx8vLy8vLy8vLy8vPy8fHx8e3r4djLuqeVg3NgUUo4TmNobnyEjJGVmp6gpKKfpKWyo5qqrbCvsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apnL/y9fP19PPy8/Py8/Ly8/Ly8vLy8vLy8fLy7uji1sy5sKSZioB2bmVXW2NxcnuKiIuNjYuIgnx1a2Hx9vH18/b09PLz8vLw8vLy8vLy8vLy8vLy8vLy8vHy8/Du6+Pd0sa5q5yPg3drZWFgYmhzfo2dq7zJ0d7o7vDy8vHw8PDz8/Py7+zp5tnQwrOlmYuCcWtkYmNmbXSCmau0usbV4uvt8fPy8fLy8vLy8vLy8vLz8vHx8fDs69/WybillIJyX1NHN1Rnb3eCi5SZnqOoq660rKywrK+vsLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZy/8vXz9fTz8vPz8vPy8vPy8vLy8vLy8vDx8u7o4tfNu7KonZCGfHRtXF1ibnB6iIeKjIuKhoB6dGth8/fy9vP29fPy8vLx8PLy8vLy8vLy8vLy8vLy8vLx8vPw7unh2s3BsqKThXdsaF9URjw4PEF7nK68ytTh6+/x8vPy8fDw9PPz8u/r6OPUy7usno6AdmtjWlFKRkZJY4amuL/J2Ofs7/L08/Ly8vLy8vLy8vLy8/Lx8fHw7Ore1ci3pJJ/cWBTQzlebHd+ipOdoqetsra9tbq4t8HAvL/BxMfJydDb297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqicv/L18/X08/Lz8/Lz8vLz8vLy8vLy8vLw8fHu6eLXzby0qp+TiYF4cmBeYm5veIeGiYqKiYV/eXRrYvT48/fy9vXz8vLy8O/y8vLy8vLy8vLy8vLy8vLy8fLy8O7p4djIu62djX1xZF1WRjMiHB0hU4utwM/a5/Hw8fPz8/Hw8PPz8vHu6uXi0se3ppmJenBmXlNJPjY0NEFvobvGz+Dw7e/z9fTy8vLy8vLy8vLy8vPy8fHx8Ozq3NLHtqORf29mWUM9Z3J/hJKcpqywt73AycS+ysnLzMrHzMzO1djY2+Pm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHx7+vh19HDu7CmnZSKhYBlV2JrcXqFg4eJiIaDfnl0aV309fL49ff18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vP08/Lu5tzTxbeoloN1amJeRysXIiUmIzJrvsvc2ebz8/Hx8PDx8fLy8vLw7+zj282+sJ+NfnVrYFJMQjw9PkFAR5vM1Nrm7/Lx8fHx8vHy8vLy8vLy8vLy8vLy8O/s6tvPwrOhkoN5ZlZLSWR2f4qWoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8e/r4tjRxb2yq6KZkIuIaFZgaW13goKGiIeFgn14c2hc9Pbz+fX39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLz8/Pw7ebb08O1pZOBc2lgXEctGSMnKSUuYMTT4uHp9fTy8fHw8fHy8vLy8e7s49vLva6di31zaV1RS0M9QEFEQkiXz9vf6/Dz8fHx8PLx8vLy8vLy8vLy8vLy8vDv7Orb0cO0opSHe2lbT05neIKNm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fHx6+Pa1cfCubCqo5yXlG5WXGZqdH9+goSDgn96dnBnW/X39Pr19/Xz8vLz8vLy8vLy8vLy8vLy8vLy8vLy8vPz8Ozl2tDAsaKQfnBnX1xIMBwjKy4pKU/L3evs7PTz8vHx8PDx8vLy8vHu6+Layrusm4h6cWdeUEpEQUZGSUZJktTj5fLx8vLx8fHw8vLy8vLy8vLy8vLy8vLw7+zq3dHFtqaXi4FxZFlYanuGkp+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy7/Hx8ezl3djMyL+4sqynoqF0VFllaHB7e36BgH99eHRwZFr2+PP48/f18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vLz8vDs5djOvK+ejHxvZl5bSDEiJC0xLCk/0+bw9e/08/Py8vDw8fLx8vLw7uvh2ce6qpmGeXBnXlBJRUVKTE1ITpHb6uj39PLy8/Lx8fLz8vLy8vLy8vLy8vLy8O/s6t3Rx7monJGGfHFmY2x7h5Ohrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vDx8fDs5uDc0MzHwLu4s6+weVJWY2hud3d6fHx7eXVxbWNa+Pnz9fL39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLx8vHu6+PXzbqtm4t5b2ZfW0YyJyYvMy8tNdzr8/fw8vPz8fHx8fLy8fLy8O7q4NjGuKeWhnhvZ2FTSkdKUFBQSlOU4+7r9/Xy8vLy8vLz8/Ly8vLy8vLy8vLy8vDv7Orc08i7raGWjoR7c29te4eVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLw7/Hw7eni39PRzMnFw8C/wIBPUGBmaG9ydXh4d3VybmpgWPj58vXx9/Xz8vLz8vLy8vLy8vLy8vLy8vLy8vLy8fHx7uni1su4q5uJeW9nYFtHNC8pMTQxNDXk7vL28PLz8/Dx8PHy8/Hy8vDu6d/WxbemlYN5cGlnVk5KT1ZWVVFZm+vx7vT08/Px8vHz8/Py8vLy8vLy8vLy8vLw7+zq39TKv7GnnpWMhYF7bXqHl6GtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8PDx8O/q5ODY19LRz87NzM+HTEpaYWNoa29xcXFwbGlmXlb4+vL28ff18/Ly8/Ly8vLy8vLy8vLy8vLy8vLy8vDx8e3o4dXKtqiYiHlvaGNeSDc3LTI1Njk56+/y9PLx8/Ly8PHx8fPx8vLw7ene1sO2pZSDeXFqbVpRT1VdXFxYX6Lw9PLy8fPz8vHy8vL08vLy8vLy8vLy8vLy8O/s6uDWzMK1raWdlZCNhW51hJefq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8u/w8fDv6+bi29nY19XV1dXZi0pGV1xeYWlsbm9ubWpnZVtW+Pvz9vL39fPy8vPy8vLy8vLy8vLy8vLy8vLy8vLw8fHt6OHTybWnmIh4b2tjYUg6PDAzNTc+PO7x8/T08/Ly8fDx8fHz8fLy8O3p3tXCtaOTgnhxanBdU1FYYWFfYGKn8fb28O/y8vLy8vLz9PLy8vLy8vLy8vLy8vDv7Orh187FurKooZyal4ptc4GUnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLv7+/v7evp6OLi4eLl5+jp0pFTQE1aX2NdXWJue09mZWNaT/r49Pby9vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZiJe3JsaWVNOjo5MzU/OTrv6/jz9fTz8/Ly8/Ly8fHy8/Dt593SwrSklYd6c29ucE9UXGRiZGJjpu7w8PPx8vLy8vPz8vHy8vLy8vLy8vLx8fHx8e/t4tzSysG7tLCtpaSlZXKChp6nsbnDzdTd4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8e/v7+7r6ejm5eXm6evt7v/56uzz8/Du//bw6sxpX1xfVkz59/T48vb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtamYiX50bW1pSTY+QTUzPj0+8+738vb28/Ty8/Py8vDx8vPw7efd0sK0pJWIe3RxcXNRV19mZGZkZajw8vL08/Py8vPz8/Pw8vLy8vLy8vLy8fHx8vHv7ePd1MzFv7q2rKynqmFvfIaQm6Stt7/J0tzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx7+/u7Orp6Ojp6u3v8fLu7Ozx9/jy7f739vnTZFxfWlNI+fb0+PP29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLx8fDs5+DUybWpmYp/dXBwck45Qkc7NDk9QPfy+fD09fT08/P08/Hw8fLz8O3n3dLAtKSWiX93dXV4VVxiamhpZ2ep8vXy9vT08/Pz9PTx8fLy8vLy8vLy8vHx8vLx7+7k39jRzcjEwL/Ew8FkbHmIkJumr7nBytPW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fHv7u3s6uvr7O3t7/Hy+PTu7vX49e7x7evsyF5YWlZPRvj29ff19vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZmMgXh1cnNVPkBJRDs6PD/48vry8vH08/T09PPy8PHy8/Dt593SwLWllouAe3l5e1heZWpobGhqq/T19Pb18/P09PX08vHy8vLy8vLy8vLx8fLy8fDu5OLd2NPQzs3NzcrLX2dxeoSPnKavtbzG0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vHx8fDu7e3t7e3v7/Hy8/by7u3t7u/v9PPx78hXT0lVTEX49/X39Pb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtKmajYN7d3dzVT4+R0RBQEBB9/H78vHt9fTz8/Pz8vHx8vPw7efd0sG1pZmMg358fX1bYWdsam5paazz9fT29PP08/P08/Lx8vLy8vLy8vLy8fHy8vLw7+bk4N3a2tjY19jd2FpdbXh+i5eirLK5wczS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8fHx8O7u7/Dx8vHy9PX28/Hz8/Hx9O3w8fLGUEhJUUpC+Pf09vT29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLx8fDs5+DUybSpmo2Efnl4e1Y9QEY+OT9FQ/bw+vLy8PX09PPz8vDv8fLz8O3n3dLBtaWZjYWAf3+AW2FnbWtuamqs9Pby9vP09PP09PPx7/Ly8vLy8vLy8vHx8vPy8O/n5eTi4eHi4u7p59thXWFkeYSRnKeusrrEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLx8fHx7/Lw8vLy8/T07fDz9/r48+/w9vb3ylFOUE1GP/b29PX09vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8fHw7Ofg1Mm1qZqOhn56en5ZP0FFPDc7QUH18Pry9PP18/Tz8/Lw7/Hy8/Dt593SwLSlmY2FgYCAg15iaG1sb2lrrfT18/X09PLz9PTz8O/y8vLy8vLy8vHx8fLz8vHv6Ofo5+fo6uvx6+//2PP59uzy9vf28Ovru8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vHx8fHx8fHx8fLy8u/09e7p5+jp5O7t7MFMSEJKQz319fP19Pb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vHx8Ozn4NTJtambjoZ+fHx5W0JAR0Q8ODY69PH68fPz8/Pz8/Py7+/x8vPw7efd0sG0pZmNhYGAg4NfZGlubXBqbK719fT19PPy8/P08/Du8vLy8vLy8vLx8fHy8/Lx8Ovr6urq7O3v9PPx/+b59vXt8vPz8erj4bS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fHx8PHx8vHw8fHu6OHd2t7d39+6UEVER0E+9/fz9fH19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flJARkZHRDYzLvjz8vP09fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLw8O3s7e/w8fT29fHw7/Hw8/Lx7uzj0curtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vDx8fDx8vLy8fHw6uLb1dLV09XVsklBP0Q/PPX28vTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5SQEZGR0U3My748/Lz9PX09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8PDt7e7w8fLz9fTx8PDx8fPu7Ofj18W/prG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLw8fHy8fHx8vPx7OPaz8nFx8XIxqhBOzxCPDv09vHz8vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+U0JHRUdGOjQu+PPy8/T19PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vDw7u7v8fLz8fTz8vDy8vH17ejg2cq3sp+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8PDx8fLw8fH07uXbzcO8t7q5uruePTo9Pzw58/bx8/L19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flNDSEVHRzw0L/jz8fP09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLw8O7v8PLz9PDx8vHz8/Ty8+rh1sy8qaWYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8u/w8fHy8vHw8Ojd0MO4sa2vrq+wljg5PEA7OfP28/b09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5UQ0hFR0g9NS/48/Hy9Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHv8PHz8/Tw8fLy8/Tz8u3g1cm+rZuYkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLv7/Dx8fPy8uri1ca7saqnpaSmpo41ODxAOjr09vP29PX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+VERJRkdHPDYw+fPx8vT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8PDy8/P08vLz8fLy8O3k1ci7saCOjo2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy7u/y8vLy8fHm3s/AtKulo6CgoaGLNTo9Pzs58/Xy9fP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+f1RESUdHRzs2MPnz8fL09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLy8vDx8vPz8/P08/Hv7erl2Mq7rqSUhIWJlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8u7x8vLy8vHw5NrLu7Goo6Cgn5+gizY7Pj46OPP18fTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn9URElHR0Y5NzD58/Hy9Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8vLw8fLz8vP09fPw7erk4M6+r6Oaint8hZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLw8PDx8vHw7+TbzL6ypZ6dnJmdnYo3Nz09Ojf09vH38vX08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6CUD9LRj8+Ojw28/P19/Xw9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fLz9PT07vHz8e3k2M3AsqOUjH5xc4GPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fHx8fLy8O/l3M2/s6egnpyZnZ2JNjY8PTo39Pbx9/L19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gVA9SEU/QDw+N/Pz9ff18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHy8vPz9PDy8u/p39HFuKmajYR2aWyAjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vHx8fLy8vDv5dvOwLKnoJ6cmZ2ciTU2Oz06N/P28ffy9fTz8vLy8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foBPOkZDQEI/Qjr08vT39fH09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHx8fLy8vLx9PLr49bGu66fkIN7bmJkfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLy8fHy8vLw7+Tazb+xpp6dnJmdnYk1Njs8OTbz9vH38vX08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6ATThEQ0FFREc99fL09vXx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fHx8fHx8/Pw6N7Rv7OomYp9dWldX3uJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8vHx8vLx8O7k2sy+saSenJyZnZ2JNjY8PDk28/bx9/L19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gU85RERDSklLQPby8/b18vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHx8fHx8fLy7+fdzr2xpZWHenNmWl56iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLy8vLy8vLy8vHx8fHx8e/t49nMvrCln5ybmJyciTY3PDs5NvP28ffy9fTz8vLy8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foNRO0dIR05MTUH38vP29fL09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAh1xkam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fHx8fHx8fHw8O7n3c6+saSUhXlxZFldeoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8vLy8vLy8vLx8fDx8fDu7eHXyryuopuamZebm4g1Njw7ODXy9fH38/X08/Ly8vHy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6FUz9MS0xSUU5C9/Lz9/Xx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgIdcZGptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHx8fHx8fHx7u/s5t3Pv7KklIV4cWZbXXqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vLy8vLy8vLy8fDw8PHw7uze1MW5qp+Yl5iVmZqHNDU7Ozg18vXx9/P19PPy8vLx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+hlVBTk9OVFNOQvfy8/f18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICHXGRqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8fHx8vLy8uzu6+bdzr+zp5iIe3NnXF97iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8vLy8PDv7+3u8O7r6uTg1cu7rJ+TjY2MioySfzM0ODs4N/P59vT09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foBZR09NU1dNT0P18/T09fD09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8/Pz8vLy8vLv7ejh1se6sKOTgndvYlVee4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8vDv7+/r7ezq5+Tf2c7Ds6WVioWDgoKGjH00Njo6ODbz+fb09PX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6BV0dNTVFVTE9D9fP09PXx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vLx8fDw8PDw7uzl3tLEtaycjX1zbV9TW3uImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8vLw7+7u6uro5eHd1c7AtaaXiH54dnZ4fYV3MTU6Ojg28vj19PP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gVhHTU1RVUxPQ/Xz9PT18fT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHW2NqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLx8PDv7ezs6+nn4NfMvK2jkYN2a2VaUFh6iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fLy7+7t7ebm5N/Z08zDs6aXiHxxa2prbXN8czI1Ojs5N/L29PTz9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5WRkxNUFRLTkP18/T09fH09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy8fDt7Ovq5uXh3tbNwLCflYZ4amFdU0lTeoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8u/u7Ovl4+DZ0srAt6WZiHlsY15cXV5oc243O0A+PTry9fT08/X08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH58VUVNTVFUS05C9fP09Pbx9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8vHu7Orn5eLf2dTMwbKhkYd3a15XVEtETnuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5zA8Pb09PXy9fX08/Px8fDy8vLy8vLy8vHx8vLv7evq4uHc08vBtKuai3lrX1RPTlNUYGxsO0BFREM+8/Xz8/P19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+fFVFTU9SVUxOQvXz9fT28vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHW2NqbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLy8vLy8vLv7erm5ODb2M/JwbSjk4J3aV1TTEtEP0t9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaecwPD29PT18vX19PPz8fHw8vLy8vLy8vLx8fLy7+3r6d/d1szCt6idi31rXVJJRUJKS1llaT1ESkpIQfT08/Pz9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn1VR05OUVJITkL18/X19vL09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1tjam10cnBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8vLy8vLy7uvo4+Db1dHDvbKllYNzaFxSSURGQD1Lf42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnnMDw9vT09fL19fTz8/Hx8PLy8vLy8vLy8fHy8u/s6une29LIvK+glX5xX1NKRD8/Q0JSYWlBSlFOTET19PLz8/X08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5+VkhQT1FRR05C9fP19fby9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdbY2ptdHJwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vLy8vLy8u3q5OHe19LMurWomop4Zl5VS0I/Qj88SoGOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vDy8fHx7ejh2tLJv6+fj4BvXEtDQT06Nj06RlxfUUpPTUxO7vb09PH19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+g1ZFT0tGSENMRPDx8fL68vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIKHWmJpbXRycG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vHx8vLy8fDp5+Xg1s/GvbSpmox4ZVdMREM9PTs9PVCEk6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLv8vHx8O3n4NfNxbinloZ4YlFBPT8/PDxBPEZYXlRNUVJPT+/19PTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foVWQEpHRkpITkXz8vPy+vD09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBh1piaW10cXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLx8fLy8vHw6OXj3NPLwLekmIl7aFhLQ0A/PD05OjpOh5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmm7/y9vP19PP19fTz8/Hx8PLy8vLy8vLy7/Lx8e/s5N7Qx7uvnYt5a15OPz0/QD89SUJIWF9WUFJXU1Hv9fP08vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6FUTtCREVPT09H9fT08vfv9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYdaYmltdHFwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8fHy8vLx8Ofk39fLwresmYx7a1lKQjw7Ozg7OTc4Toyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vHy8/Dv6uLbyr+zpZF/bF5PQDUzNjg4Njk3Pk9XVFNYWVRS7/Xz9PL19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+g043QURIU1RQSPj19PL37/T09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGHWmJpbXNxcG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLx8fLx8O/m4dzTxrquoYx/bV9RR0FAPz48Pjs7PFSQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLx8vPw7eff18W7rZ2JdWNTQzoyNDtCRUZLS1JaW1VTV1dUUvD29PTy9fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58foNNOEVJS1JRTkj49fTy9/D09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhllhaG1zcXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8fHy8fDv5d/Yzb+xo5SCc2FSSEA7PD48Oz48PD9WlaOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmm7/y9vP19PP19fTz8/Hx8PLy8vLy8vLy8PLz8O3m3NTDt6iZhXBeTzs2MTM7RElLTE9XW1hTVVpWU1Lw9vT08vX08/Ly8/Hy8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6DTjxMTUlNS0tF9fT08vjw9PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYZZYWhsc3Fwb67z9PL29PP08/P08/Dv8vLy8vLy8vLy8vHx8fHv7uTe1cm5qpmKfW5YSEA7ODk4Ojg5Njg5S5yptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0ppu/8vbz9fTz9fX08/Px8fDy8vLy8vLy8vDz8/Ds5dvRwrWml4FuXE09OjY3PENJTEpQV1pZVlpgV1RT8fb19fP19PPy8vPx8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+glA/Tk5JSUZIQvLy8/H68vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWWFobHNxcG+u8/Ty9vTz9PPz9PPw7/Ly8vLy8vLy8vLx8fHx7+7j3NDEs6ORgW9gSj9AQkVJUVleZWt2eYujsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKabv/L28/X08/X19PPz8fHw8vLy8vLy8vLx8/Pw6+TZ0MC1pZWAbVtNPz08PUFLUlVYXGFhXl1fZFlVU/H29fb09fTz8vLz8fLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn9OP05OSElGRUHw8fHx+vX09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCAhllhaGxzcXBvrvP08vb08/Tz8/Tz8O/y8vLy8vLy8vLy8fHx8O/u4NjOwbGgjn1mV0I5QEdNVF5ob3iAjI+dqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Ovj186+saKQe2lZTEI0Nz5KTFFbX2BkZWVkYV1fVlHw+PPz7vb18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH6CVD5DRUtORkI8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgoZZYGdsc3Jvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6uLXyryqmYp8ZFJJPUVLVl1mcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDr49fOvrGhkHppWUxGODtBTU9VX19jZmdnaWdjYlxW8/n09fL29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gFQ+RERKTUNCPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWWBnbHNxb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Orh1sq7qZiIe2RSSj5JUFxkb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeav/D28/P18vX19PPz8fHw8vLy8vLy8vLy8/Lw6+PXzbyvno96a1tOQTQ5QlFTWWJiZmlqaWlnZGBbVfD19Pb09vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5UQEVER0o/Qjz49PH09Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhlhgZ2xzcW9urvL08vb18/Tz8/Tz8O/y8vLy8vLy8vLy8vLw7+zq4NTIuKeWh3ljUks/T1dlbXiBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Orj1s25rp2MfGtbUUY2ODxJTVdkXmNoaWtrZ2NcWFPu9PP18/b18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH59UkBDQURIPkI8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYZYYGdrc3Fvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6t/Ux7aklIN3Y1FKP1RdbHR/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDq4tbNuKydjHxsX1NMQENJU1BSWltfZGZlZWNgW1ZU7/bz9fP29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+flI9QD5DRz5CPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgIGGWF9ma3Nxb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Ord08S1o5GCdWNQSj5ZYXJ6h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeav/D28/P18vX19PPz8fHw8vLy8vLy8vLy8/Lw6uLWzLeqnI19bmJWS0RPWGRfXWJbXmBhYGFhX1dRT+739PTz9vXz8vPz8vLy8vLy8vLy8vLy8vLy8vLy8vLx7Ofg1Mi4rJyPhH58fn5TPD4+Qkc+Qjz49PH09Pb09PTz8/Ly8PHy8vDt593TwbWnmo6GgYCBhlhfZmtycW9urvL08vb18/Tz8/Tz8O/y8vLy8vLy8vLy8vLw7+zq3NDEtKKRg3VlUUs+XmZ4f42Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmr/w9vPz9fL19fTz8/Hx8PLy8vLy8vLy8vPy8Ori1cy4q52OfnBkWFFHT1lnanF8dndzbmljXllZT03v+fT08/b18/Lz8/Ly8vLy8vLy8vLy8vLy8vLy8vLy8ezn4NTIuKycj4R+fH5/UjxAQERJP0I8+PTx9PT29PT08/Py8vDx8vLw7efd08G1p5qOhoGAgYVYX2ZrcnFvbq7y9PL29fP08/P08/Dv8vLy8vLy8vLy8vLy8O/s6tzQxLShkoJ2Z1JNP2Rsf4aTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5q/8Pbz8/Xy9fX08/Px8fDy8vLy8vLy8vLz8vDq4tXLt6udjn9xZVtQSVVhbm5ye36ChIOAfHVwZFhT9Pvz8fL29fPy8/Py8vLy8vLy8vLy8vLy8vLy8vLy8vHs5+DUyLisnI+Efnx+gFM8QUJITEFCPPj08fT09vT09PPz8vLw8fLy8O3n3dPBtaeajoaBgICFWF9ma3Jwb26u8vTy9vXz9PPz9PPw7/Ly8vLy8vLy8vLy8vDv7Orc0MO0opKDdmhUTkFncIOLm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6Wav/D28/X08vTz8vHw8PDu8vLy8vLy8vLw8fHt5+HVy7eqnZGAdWheW1FWXWpudX6DhIWEhYN+eHVqYfH28ff09PX09fX08vHx8fDw8PDw8PLy8vLy8vLy7vHv7Obf0smzqZuPhH57e4JMN0REQEZGQz368/Hz9PT09PTz8vLv7/Ly8u/t59zTv7Sjl42Efn19hFdgZ2txbm1trvLy8fX09fX19PX08/Lw8PDw8PDw8PPy8/Px8O3r28/Cs6GShHduXlJMbHuFkJ2qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmb7y9fP19PP19PPx8fHx7/Hx8fHx8fHx8PPy8Ori1sy5rZ+Sg3drYltSWF9tcHiChIaGhoaFf3l4bGLy9vH28/X09fb29vLw8vHx8PDw8PHx8fHx8fHx8fDy8e3n39TJtaudkYd/e3yBSzdEREFHR0M9+fLx8/Pz9vT08/Py8O/y8vLx7ujc1MC1ppiNhICAfoVYYGdrcW5sbK3y8vL19Pb19fX19fLx8fHx8fHx8fHy8vHx8e7r6tvQw7SklYh7bl9TTm19h5SgrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZm98fXy9fTz9fPz8fPx8fDz8/Pz8/Pz8/Hy8u/p4dbMuK6hlIZ5bmRcU1phcHR8hoaIiYmJh4F7em5k8/bx9vP09PT19PTx7/Tz8/Ly8vLy8/Pz8/Pz8/Px8vLu6ODTyrasnpKHf3x9gUs3Q0NBR0hCPPj08PPz9vb19PPz8u/v8vPy8e3n3tTBtqeajoaBgH+FWGBna3FvbGut8vPy9PT09PP09PPw7/Pz8/Pz8/Pz8/Pz8/Lx7uzb0cO1ppeJfm9hVlFwgIuYpbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WZv/H38/X08/Xz8/Pz8vHw8/Pz8/Pz8/Px8vLv6uHWzbquoZWFem9jXVRbY3J2foeIioyMi4iDfXxvZfP38ff08fLz8vPy8O708/Py8vLz8/Pz8/Pz8/Pz8fLx7ujg08m2rJ2Rhn59fIJMN0NDQEdIQzz49PHz9fb19PPy8vHw7/Ly8vHt593Uw7emmo+GgH9/hlhgZ2txb25srfL08vX18vLy8vPw7+7z8/Pz8/Pz8/Tz8/Py8e/t3dHFtqWXin5wY1lUcoKOnKm2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOlmsDz9/X29vX29vT09PLy8PHx8fHx8fHx8fPy8Ori1s27rqKThXhtY15VXGRzdn6HiYyOjo2KhH98b2Xz9/H39fPy8/Tz8vDu8/Ly8fHx8fLx8fHx8fHx8fHy8e3n4NTJtqydkod/fX2CTDdEQ0BGRkQ++/Tx9fX29vX19fXz8fDy8vLx7ujc08G1p5qOhoGAfoVYYGdrcW5ubq709PP39fTz8/T08/Du8vLy8vLy8vLy8vHx8e7r6d3SxrWml4t/cmVaVXSEkJ6ruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZzA8/f19fX09/f19PXy8vLv7+/v7+/v7+/w8O3o39TKuK6gk4N3a2JdVVxkc3d+h4uOkI+NioWAfG9k8/bx9vT09fT19fXx7/Ly8fHw8fHx7+/v7+/v7+/v8O/s5t3RyLWqnZGHf3x9gkw4RERARkZFPvr08fT09/f39fX18/Lw7/Dv7url29G/tKWYjYSAgH2EV2Bna3Fub26u9PTz9vT39vb19fTx8PHx8fHx8fHx7+/v8O7t6+nc0MK0pJaKfnFkWlV1hpKfrbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6Wcv/L38/Tz8vb08vLx8e7u6+vr6+vr6+vp6ujm4dnNxLOonI6Ac2hdXFRbZHR4gImMj5CPjYqGgX1wZPL17/Xy9PT09PTz8u/s6+vq6urr6+vr6+vr6+vr5+jo5N7Wy8GuppiLgnt4eX9KN0VFQkdHRD768/Hz9PX09PLy8vDw7efo6ufl39TKua+gk4mAe3p7gldgZ2twbW5urvPz8fT09fb09PTy8e7r6+vr6+vr6+vr6enp6OXj1cq8r56QhHlvYVdUdoeToK67x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOlm8Dx9vLy8vDy8O7t7ezp6eDg4ODg4ODg4OPh39rSxr2to5aJem9lWltTW2V0eYGKjI+Rj4yKhoJ+cWTy9O7z8PLy8vLz8fDt4uLh4eHh4eHg4ODg4ODg4ODh4d7Xz8S5qp+Shn12dHV9STZFRkNISEU9+fLw8fPz8PDu7u7s7Ovh4eHg3tjMw7OomoyCenZ1eYFWYGhrcG1vba3y8u/z8vPz8fHx8O/s4eHh4eHh4eHh4eDh4d7c2s7CtaeZi391bV9VU3aIlaGvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzppfA8vj08PPx+PPu6OLb19PPz8/Pz8/Pz9DQzs3IwLSumpGGeXBmXFZOTVpldHeBiYqNj4+Oi4V/d3Bj+fP48/P29fXz8Ojf19LQz8/Q0NDPzs7Ozs7Ozs7Qz87LxbyvqJiOg3lxbGpsalM8P0VESUtGQPnz9fT08/f28u7p4NjR0tDPzsrDuLCil4uAdnBtbG5zXV1maG90bnCy9fny+PD39fTx6+LY09PT0tLS0tLSz8/Oz87LyMa3rqKWjH50bFxUTkp6h5aesLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaeZwPL38e7w7uzo4dnQysTBvb29vb29vb2+vby6tq6jm42FeG9kW1NNSklaZnN4foiKjY+PjouFf3lzZPjy9/Hw8e7q5uDWzMS/vr29vb69vbu7u7u7u7u7vb26ubSrn5iKg3dtZmFiZGZSPD9FRElLRD/38fLx7+zu6+Xg2c7Evb++vby5saeflYp+dGtlY2Robl1fampwdW5vsPP28Pfv7+3o4trRxr+/vr69vb29vr29u7y8ube1qaGUiH5zaWFWUEpHe4aXoLC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapmsDw9u/r6+ff2dDHvbKsqKampqampqamp6ampaCYjod6c2hfV1BKRUZHWmd0eH6Hi42Pj46MhoB6dGb28PXu6+nl3tbMwbatqKelpaampqWmpqampqampqalpaSeloyFd3FmX1hUVVhfTjw/RkRHSUVB9vP18uvn497VzMK4raaop6elpJ2Ti4B2bWNdWFZYX2RfYWxscnRxc6/t8uzy6eXh2tHHvLGppaSko6Ojo6SnpqampqWinpSMgnVsY1tUTUhGQnuHmKCwvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qpzC7/Tr5OHdzMa9saaelZCPj4+Pj4+Pj4+Pko+Mg3p1Z2JaUkxHQz9DR1pmdXl/iIuOkJCPjIeBfHVq8/Dx6OTd1s3CuKufmpGQj4+PkI+Pj4+Pj4+Pj4+Pj4+OioJ5dGVgV1FNS01QVkw9QEdFR0lFRPHx8uzj3NHLwberoZeQj5GRkY6Jf3htZFxVUE5NUFVbX2NtbnN1c3ev5+vl6N7X0ci9saeclZCQj4+Ojo+PkpKQkJCOjIp9d29jXVVOSkdBQT58h5qhsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKyfwe3u5dnTzLevpZqOhX55eHh4eHh4eHh3d3l4dW1mYlhTTUhFQT49QkdcaHR5gImNj5GRkI2Ignt3b/Hs697XysK3qZ6SiYJ7enh4eXl5eHh4eHh4eHh4eXl4d3FsZF5XUUtHRUNGSE9JP0JJR0hLQ0Tn5+be08u9t6uekYd/eXl4eHh2cWhjXFZOSUZFRkdMUmFlb3B1d3V6rd/h29rQxb2xpJqNhH97enp5eXl5enl4eHh4d3V0aWRdVU9LRUNDPT47f4mbobK/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquob3k5djKv7SinJGFenBoZWRkZGRkZGRkYWNkZGFbVVFLSURBPj07OkBIXmp2e4KKjpGSkpGOiYR9eW/p4d7MxLiwoZKGfHNuZmVkZGVlZWRkZGRkZGRkZGRlZWNfWVJPSkVAPz4+P0NGR0BFTUpKTEdF29jUysC3q6KVh3xyamZkY2RkY11YU01HQ0A/Pj9BRktkaHN1eHt1e6fS08vIvrKpnI2Cd29raGhnZ2dnZ2dlZGRkY2NhYFVSTUlEQD08QDo9OoGKnqO1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKO62dTHtKebjYZ7cWZfWVVTU1NTU1NTU1JTVFNSTklHQ0E+PTw7Ojk/SWJueX6Ei5CSk5ORj4qFfnxx4dTLt6+jm4x9cWhhXVVUU1NTVFRTVVVVVVVVVVVUVFZVUUxIRkA+PDw7OzxAQkhDR1BMS01OR87Fv7SrpZaMgHJoYFtYU1NVVVNQTEhEPzw8PDs8Pj5FaG16e32Aen6jxMG3s6idlIV4bGRfW1dWVlVVVVVVVlVVU1RTUlBKRkRBPjw6OT85PDmFjaGmt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKittLKuaaXi3p1bGJZUk1LSUlJSUlJSUlHR0lKR0RBPj8+PT08PDw6P0pkb3x/hIiQk5STkpCLhoB9cNvLvqqgkoh5bGFZU1BKSUhISElISEpKSkpKSkpKSEpKSUhDQT0/PDs8PDs8QEBHRUlRTkxOTkbDta2jnJeEem5hWFJOTkZISUpKSENAQDw6Ojo7PD46Q2pxf3+Bg4CDoby1qaOYiYBzZVxXUk9HR0ZGRUZGRkxKSUpKSUhHQ0I/Pjw7Ojo8OTw6h4+kqbjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2p7bEu6CPg3dmYFZPSUZDQUNDQ0NDQ0NDQkFBQEBAQEA5ODs+Pjw/QjtPbGx7iIqNkpWXlpWTjol/gnC9ubKal310Z1xTSkRBQUBAPz9AQEE/Pz8+Pj4+Pj4+Pj49PTw8Ozo6Ozs6PEA+UUdFTVFYSkVUqLOgmYB7cmpfVkxGQT5DQ0JBQUA/Pzs7Ozs7Ozs7QD9/d39+hYmDjZahrKSQiHVuY1lPSkNAQkJCQkJCQkJCQkJCQkJCQj08Ozs7PD09PEE7NJCUna29xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7EuayyuKyRfXVuVE5HQT89Ojk6Ojo5ODg3Nzo6OTg4ODg4Ozo5OTs8PTxCVnNygIyNjpOWl5eWlI+Kg4h1uK6hh35rY1hQSUI8Ojw8PDw8PDw8PDw8Ozs8PDw7Ozs7Ojo6Ojw8PT9APz07OU5JR1FVV1VYXqKjjolzcllVTUVAPDk2OTk5OTk5OTk9PT09PT4+PkI6gn2DiIyNhI6Qj5WOfXBgWlBIQj87OTk5OTk5OTk5OTk5OTk5OTk9PTw8PDs7O0FEPzWcnai1wMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL23rKKXgm9iVk5KRUFAPTs6PT09PT4+Pj48PDw8PD0+Pj1AQD45Nzk7O1d4eIGMi4yTlZeWlpSQi4CHeKqfkHdqWFBKRkRBPj09PT09PT09PT49PTw8PT0+PT09PT09PT0+QUE8Ozs7PTNRVU5XYGJqSk2Jj314ZmJQTklFQkA+PT09PT08PDw8PDw8PDw8PD04N4qLiI+TmJOZkoaCfmtcV1FLRkRBPzw8PDw8PDw8PD09PT09PT09PD09Pj4+Pj4+QT03oqexvsTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBvqyXhHRnXVJCPzs5ODo5ODs6Ojo6Ojo5PDw7Ozs7OzxFQD1AQT44NS5Oc3mDiI2SkZSVlZWTj4qFinuViHtnXEpEPz49PDw8Pj4+PT0+Pj49PTw8PD09Pj09PT09PT4+Pj07Oj06ODkwRldZbHNUPVNTf4Bwa1xTQD89Ozs5Ojo7Ozw8PDw8PTQ1NTU0NDQ0Mj2Fj5OXmJykpZN9cmxeUkNAPTs8PT08Ojo6Ojo6Ojo7Ozs7Ozs7OzY2NjU0NDQ1NjY3PpyptLzIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxauvr6SXjYV6fHdvaWRhXVtaWFZVU1JPTkhGREE/PDs6NjQ8S1VZXmRsbnR1goeLio+Sk5OSkY2IgIF0fXRqYVdVUExJR0RCQkFAPj09PkBBPj49PT09Pj48PDw8PD0+Pz9DREhJRUhSZmtwW0pKSEdENkxGPkBCPkJCQkRFSElKSkxOUFJUV1hkZ21zeX+EiJCMm5acn6KllZudnZ2XjIGDf3p1dHFubGlpaWlpaWlpaWlpaWlpaWltb3J1eX6Dh4yXnpqsq7fGzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1Mq3u7WjmZiRhoN/eXJvbGlnZmNgXl1bWFVUU1BMSUZEQkRBQD8+Rl10bXF3eYaLj4+PkZKRkZCMh4eHfHNsZWFYXllTUU5KSUlJSUdGRkdJSUhISEhHR0dHRENDREVGR0hHSUhKUlNXYnVXTEhHT1FTV0VNSENJTkhHSEpKTU5QUVRXWlxeYWRmaW1zeH2Ch4uVmpmcp6iqq6eop6ajnZWSiYaBgH58enh2dnZ2dnZ2dnV1dXV1dXV1eHp7fX+DiY2NlqKmqK67xtHX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQy8e5qaaqoI+Tj4qEgX15d3d0cXBvbWpoYWBdWldVU1JRTkpHRkVHS1l0jY2OhouMj5CRkI+OioaCgn9xcmtsY2FdWVdUUU9QTk5NTU1NTk5NTk5OTUxLSkpKSkpLTU9QT1NVXm1oU0RNR05ZWVVVVldJT1FTVVlLWltcXFxdX2FkZ2psbW9ydXd7gYWJjpOXnaKora6xs7exsLCtqqWfnJ2ZlZGPjYqHhoaGhoaGhoaGhoaGhoaGhoKEh4mLj5SYl6GssbO5xtDW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1dPOwLGus6+km5iUkY+Lh4SCf3x5eHVxbmxraGRgXVtaW1taVlRWVFFTXGFje5CblJCSkpGQj4uGgoGEdHdsbWFrZ2JgXVlVVlVWV1dXV1ZVVFVVVVRTUVBUVFRUVVdZWm5xZVFKT1NWUVhYWVpZWVdkVVZZXWBnWGBhY2VkZmlsbHB0dnh7f4KFiY6TlpugpKelrbWzvbu9uru3s6+tqaWmop6cmpiTkZGRkZGRkZGRkpKSkpKSkpKSlZiZmp2hpaWsuLnCxNLa2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOVqKyfmZOHgYV/eXZzbmloaWZiX11dXFpcW1tbW1xeX1xcWVZZX2BeY2JqdHZrWVBSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsbHt+eoCKmqqjmY6IhYF9enVzcG9tbGtraGhqbG1tbGxtcXV3en97dmtiV1VXVVdZW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWx0dnVzc36Ngnt1d3+Fh4iSkJCRkIyLjo6Ni4mFf3dycG5nYV9hYl9jXVteX15cXFxcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHNwcW5sbWlpb3dzb3F2eXp6b21ucW9qaW1sbGxubmxmYmlraWdpa21qZGNiZGNdWFZZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357dnRwbG9va2pqamloaWpqa21rbG9tZ2ZpcG5sa2toZGFaXmJmaGloZGNfXVpWVFNUXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhH6Cgn5/fnl0a2tqZmNjZGVlY2NkYl5cXmZjYV9eXVtZVldYWlxfYWJaWlpcXV1eX2VmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiNjYqEgoGAf3Z2c25ramppaWdmZWRiYWFgYF9fX2BgYF9gYWJhYGBfZGRkZmdqbG5wcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWkY6Mi4iFgoB/f316eHh1cXBvbWtra2poampramppaWhtbWtsbW1ub3FxcXR1eHl5eXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/b19fXz8O/s6+7u7ezr7O3u6vDt8O3w7fTy8/T09fX19fX19fT08/Ly8vDu7e3t6ujm5eTj4uHg4N7e3dzb29ra3t7e3N3d3dzd3d3c3Nzc3ODd3eLg3+Lg6OTn5ebo6+jq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vPx8O/v8fHt6+nq7e3q5+3t6O3t8u7v8PDx8vLz8/Ly8vLy8fDw7+zs7e3r6ejn5OPi4d/e3dzb29ra2djX19LS0dHS09TU1dbW1tfY19jd29vd3N7h4d3c4OHi5Ofm5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vHx7u3s7Ovs6uno6Ojp6urr6+jr5+vq6uzs7e7v7+/v7+/v7u7t7Ovo5+fn5uHg4dzc2tnX1dTU1NPT0tHQz8/Pzs3MzM3Oz9HR0NDQ0M/P1dbV1dbX2NrZ293e3N7h4eLk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/t7Ovs6unn5+Pi4ODh4eLi39/j5OLl6Ono6err6+zs7Ozs7Ovr6uno6+Xi4uHc297Y2NfW1NPS0tDQ0M/Pzs7O0M/OzcvMzMzKy8vMzc3OzsrMz83S1NHT1dnX29fa3N7e3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6efl4+Ti397h3t3d39/b19/d3+Di4+Pg5eXm5+jp6enp6eno6Ofm5ePUxcG7sa2vra2traysq6uqqqqrrKytramqrK6wsbGxtLa5vsHFysvRzs/MztDLzc7TztnX19fZ2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4+Hh4ODf29zc2dbX3ODU2Nza3dre4uDh4uPk5eXl5OTk5OPj4uHj0MLCwbm4vLu7u7u8vLy8vb6/wMHCw8PGxsXFwr+8uru6uLa0s7GwsaWmpKSqqKutsrDK0NLR09TV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efl4+Lh4d7a2NTV0ci8t73D09fX0dzZ2t7b29ze39/g4N/f39/e3d3c28q/w8O8vMS/v8DAwcHCwsXGxsfIycrKz8/Q0dHQ0NHR0dDOzMrJybWfnpqUl5OUi46Ms8PJyc7Oz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl4d/b19DGvLOvrKuutbe0sKeinKLJ09HO19fY2tvc3Nzb3Nvb29rZ2NXGv8XEvLzGvb29vr6/v7/DxMTFxsbHx8vMzM3Nzc7Ozc3NzMvMzMyqkZSWkpeWl5eWjbTDxsPIycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PLs7e3q6ubk3s7Etq+vsbKxsbS3s6mdjoJ/gX1+ts7HzdDS09XV1dfX2NjY2NfV1NPPxsPAwL3Bu76/wMDAwMHCxMTFxsnKy8vNzs/Pz8/Pz9DMz8rNy87KoJaTlpWVlpaVjYukwr3Bw8LCxcfGyc7Nz9HR0tDS1Nfd29vf4uXk5enr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx8ezr6uHTwK2zsbCxs7SzsrewnoVxa290en6GgpTMw8jJyszO0NLT1NHR0dHQzs3MzcLCwMC9wbq+v8DAwMDBwsTExcbIycrLzc7Pz8/Pz8/PzM/KzczOx5yVk5aVlZaVlIyJpLm1vLa5u8PN0NDLw7+9ubSxsLK01NXg3tri5evn6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7/Du8OG/sLKysrO0tbSzsrO0lXNlZ2xxd3x8hYSBzMDBxsfIycvMzMzLzMzLysnHxsq+wsC/vcC7vr/AwMDAwcLDxMXGyMnKys3Oz8/Pz8/Pz8zOzM3NzcCWk5SVlZWVk5OLiKGsqLGntLi/vrStraytrq2urq+xsrC22d3Z4+Di5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7q5ufXsa23t7OzsrGvrrCyq4lqaW9qaXN7e3+Fgbe5ub29vsDDw8TExsbGxsXDwsHLvcLAv7u/u76/wMDAwMHCw8PExcjJysrNzs/Pz8/Pz8/Mzs3Nzcy3kZOUlZSVlJKPjIigqKKtqqiuur22sbCura6ur7CwsLCvqdHV1OHc3+Lk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t6uPg0aqss6iop6enqKWjop+Kc2xtampydXt/hIKQuLG4uLq7vL2+vb6+vr69vLq5z77CwLy8v7u+v8DAwMDBwsPDxMXIycrKzc7Pz8/Pz8/PzM7Nzc3KrZCUlpSUlZOQjoyFmaCan6eirru7r6issbCwr7CvsLCwrZ7Izc/b2d/f4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt6+nm4s+hoqqmpqSioqGgnpyjmX5qbHVzb3d5fX+Eg8GrsLK0tba1t7i4uLi4t7W0s9S+w768vL+7vr/AwMDAwcLDxMXGyMnKys3Oz8/Pz8/PzszOzczNyKOQlZWUlJSRj4yMhZKboJ6qx765tbCwsq+wsrS0s6+rqY2JvsnQ1dPY3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onn4d7VqaeopKelo6Gio6OimpyIbWhxdXZ8eXt+iYi4qaaprK2trbCysrKysrGvrq3WvcG+vL2+u76/wMDAwMHCxMTFxsjJysvNzs/Pz8/Pz87Mzs3LzMaak5aVk5SSj46MiIiQn7u5vrSysbKwsrKwrq6tp56UjIiGirzEzdHS1Nnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero6uDZ06ukp6mjpKSkop+enp6fjXNoZ2x1en5/gYiGn6u1t7e0rampqqqrq6qpqKal1bvAvby9vrq+v8DAwMDBwsTExcbJysvLzc7Pz8/Pz8/OzM3Ny8vFlpWWlJOVko2OjoaJjZzIxL/Bvr6/vLeyqqGel46FgH+AhJC8wM3Q0cvW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5eDg1M+3qKqpp6akoqKhoJ6coJaJjIuTlKSlp6qtsbO0sbKytbe8vsDKzc/OysTBwL69urazs7a4urq7u7y9vr6+v8DCxMXIyMrMz9DQz9DQzc7KzcvQuZOUlJSTkY+Ni46FhY7BysbHx8jIysjJqJGQkY6Ffn6ChX+ftr6/xcnL0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Tf3tXPvKisqqimpKOioaCfn52ersvPzsnFxMTCwL69vLi2tbSysa+vqqysrKurrK63trSysbGysrOzs7S0tbW1tbW2tre4ubm7v8PGyc3Q0s7Py87MzK+QlZWVlJKQjYuHiYOIvMfGyMfIysnJyKORkJGOhX9+g4aBqLO6u8LGyc/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj39rXzsKorauop6ako6KhoJ+ZmrPT0s/Ozs7PztDR09PV1tbX19bV1NHPzMjEwsC/v728ube2tLO2trW1tbS0tLOys7KysrGxsbKztbe5vL7Rz8zLzMmlkpSUlJSSkI6MgIZ9jMLHxcfHx8vIy8abkZGSjIV+f4OGg7SvtbW+wcfMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4t7X18zFqKyqqaimpaSjoqGfmpqxz83O1c3Nzs/S1dja4eTo7fH19fb49vLv6+Xh3tDNycbEwLy5t7a1tLOysbGvr66urKurqqqpqKelpKSlys3LyszEnZKUlJORj4yKiIF/eJnKxcXGyMfNx8zBlJKQkYyEf3+EhoS6qbCxu73EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Dd1dXJxampqKqopqakpKOjoZyasNLQy8rOzc7O0NPV2N/i5enu8vT29fTz8O7r5uHY1M7Lx8S/u7i3trSzsbCwrKysq6mpqKempaWlpKOiocjPzcvMwJuWmZudn6CioqKel5OvycLHxcnHzcjMuZCSkZGMhH+AhYeGuKSsrre6wcbKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf29TRyMOsp6iqqKempaSko52cm67S1M7Ly8zMzdHV19ri4+bq7vL29/b18e3q5+He2NTOysXCvry6ubi2tLOysa6ura2sq6uqqKiop6elo6LAy8bHzMq8vrq6ube0srCvsbO3w8fFysLJyMzJy6+Pk5KSi4R/gYWHia2fqKuzuL7EyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3tnUzse/saioqamnpqSlpKOfoZ2sy83Lzs3NzM/R1NfY3d7j6e3z9ff19PHt6eXi39jUz8rGw7+9uLe2tbOysbCurq2trKuqqauqqainpaOgxNXJx8jJyszHxsXDwL68u7K4vsTFyMjEysnKy8mmkZSTkYuDf4GFh4ygmqSorba7wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3Y1M3GvbSoqqqpp6alpaSjoJ+aq8/RzdDOzs7R09XY2dve4ujr7/Hx8/Px7+vn4uDY1tDMx8O/vbm5uLa1tLOyr6+vrq2srKuop6enqKelpLbQyMrKyMrFysrJysrKycnGxMHCx8fCx8rJyc3HoJOVkpGLg3+BhoiQmJihpKm0uL/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c29XKxbi5o62pqKmpqKalo6ShoazRztDMz87Nzc/S1tnd4OTp7PDz9PTz8O3p5eLf2NXQzMbCvry5uLa1tbSysbCvrq2trKuqqKiop6elo6Gz0czHx8jHyMvMzMvKyMjJzMjEw8TGxsXJysjNxZiVkZOTjYN/hIiJnIuTnaOntba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29rRysW8waatqqmopqWko6Ohnp+qzs3Qzc/Ozc3P0tbZ3eDj5+zw8vT08u/s6eXh39fU0MzGwr68ubi2tbW0srGwr66trayrqqmoqKenpaOhsdDMyMfIyMnKysrKysnJyszJxsXFxsfGysjJzr+WlZKTkoyDf4SHiKWIj5mfpbCzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vXzsrDvsWnqaimpqSkoqKioqKjrs3Mz87Pzs3Nz9LW2N3e4+fs7/Ly8/Hv7Onl4d7X1M/LxsK+vLm4t7a1tLKxsK+ura2sq6upqainp6akoqvNy8jHycrLy8vLysjHyMnKyMXFxsjIyMrHys+2lJWTk5KKgoGFhoayhoyWnKOrsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b1cvKwLvCpqeop6ipqamop6usrLXNzc7N0M7Nzc/S1tjb3uLn6+7w8fLw7uvn5N/d1tPPysbCvr26uLe2tbSysbCwr66trKurqqmoqKempKKqzM7NycvNzszMy8nIyMjJycfFxMXGx8fKxs3QrpOVlJSQiYOBhYaGvIaKlJujqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tLMyr+5vKmsrq+wsLCxsbGytLO8zs7PzdDPzc3P0tbY297h5ent7/Dx8O3q5+Lf3NXTzsrGwr69urm3trW0s7GwsK+urayrq6uqqKinpqWjqMrOzsnKzMvMzMvKyMjKy8jHxcXGxsXFysfPz6aWlpWUj4iDg4aHhrmEiJGZoqextb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trSzsrBubexsrS0s7Ozs7S1tLa0vcvOz8zQz83Nz9LV2Nvc4eTp6+7u8e7s6Obi3tvV0s7KxcK+vLq5t7a1tLOysLCvrq6trKurqqmop6elpKLEy8zIyszKzMvKyMXExMTBwcLDxMbHx8jIzsuemZWVlI+Ig4SHiYmngIaOl5+lrrS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493Z0tHIwbqytbO0tbe4uLe2tbK1s77Kz9DN0M/Nzc/S1dfa3N/k6Ovt7u/u7Ojl4d3a1NLOyMXBvry6ube2trWzsrGwr66urayrrKqpqKinpaSgwsnMyMrLx8XFxMC9u7q5t7i7vcDCxcbHyczEl5uVlZOPh4SEhoqMkH6FjJacpayzu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2dTRxMK5rLSxtLe8wMG/u7iztrO+ytDQzdHPzc3P0dXX2dzf5Ofq7O3v7uzo5OHd2tTSzcjFwb28urm3tra1s7KxsK+urq2sq6yrqaiop6alnbzCxL29vLe3uLi3trW1tbS1t7m5ury9xsrKvpKclJWUjoiEg4eLjoN9hYuXnKers7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTzMe/uq/Dq7S3usHHysvKxsTDxsvPz83Nzc7O0NHU1dnb3uLm6Orr6uro5ePe29nT0MzJxsO/vLu6uLe2tbOysrCwr6+uraysrKyrqqmop6Kgnp+bl5yjpaerr7Kzsa+ytbe2tre2tLi2r6ObmJmalo6Bh4KLiZ1ze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1M3HwLuwway0t7rBx8rLyszKycrOz87Nzc3OztDR1NXZ2t7i5ejp6+rq5+Xi3tvZ09DMycbDv7y7uri3trW0srKxsK+vrq6srKysq6qpqKeil4qCeXV3fISHjZWcoaOkrq+vrKmkn5qUl5iXlpeZmZSLg4WCiYWicnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTNyL+7sr6utbe6wcfKzMvPzs3Nz8/OzM7Nzs7Q0dTU2drd4eXn6enq6efl4d7a2NPQzMnGw7+8u7q4t7a1tLOysbCwr66uraysrKuqqainpZmMg3x2dHR3eX6FjJGTlZaWlZKSk5OSkZWYmJmZmJWUi4SFhYiFsHF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzci/u7K5r7W3ur/GyszMzM3Nzs7Ozc3Ozc7O0NHT1Nja3eDj5ujo6ejm4+Dd2djSz8vJxcO/vLu6uLe3trSzsrGxsLCvrq2trKyrqqmop6KcmJqbmZeXmpmYl5eWlJOXlpSTlJeZm5eYmZiZmpaUlYuGhIeJiLxxeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083Hv7uysrC1trm/xsnLzMzNzs7Ozs7Ozs7OztDR09TX2Nzg4+Xm5+fn5ePg29nW0s/LycXDv7y7ubi3t7a1tLOysbCwr6+ura2srKupqKiqpaKgn56en5mYmJmampmZlZWWl5eWlJSUlZWUlpiXlZSKhoSJioq3cHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POx7+7tK6ytba5vsTJzMzPz9DPz87Ozs7Ozs7Q0dPU19jb3uLk5eXn5uTi3tvX1dHOy8jFw7+8u7m4t7e2tbSzsrKxsLCvrq2trKyrqqioo6Ggn56en6CdnJybm5qZmJWUlZeWlpaXl5iZmJqbmJaSiIaGiYiJoHB5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vUz8nAvbass7W2ub3EyczN0NDPz8/Pzs7Pzs/O0NHT09bY297g4+Xl5uXk4d7a19XRzsrIxcO/vLu5uLi3t7W0tLKysbGwr66tra2sq6qpqKOjoaKhoJ2cnJubmpubmpmZlpOTk5OWmZSWmJmbnJuXkYiFiImJjIpweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b1dHKwb63q7a2trm8xMnMzc/Ozc3Oz8/Oz87PztDR09PW2Nve4OPk5Obl4+Dd2tbV0c7KyMXDv7y7ubi4t7e2tbSzsrGxsLCura2trKuqqaikop+eoKCfnZuamZmYmJaVlpSVl5eWlpiUl5mZmZqZl5KJhYqJi5F/cHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dXQzcPAtqu/srW3usDHy8zMzM7Oz8/Ozc/P0NDQ0NHR1dbZ3N7h4uPi4eHf29jV087NysjFw8C/vLu6urq5uLe1s7KxsbCura6urq2sq6qppaOhoKCfnp2dnJybmpmZmJeXl5eXmJmZmZmZm5uamZeShYaGjY2ZbnJ7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3X0c3DwbesvrK1t7rAx8vMzc3Ozs/Pzs7Pz9DQ0NDR0dXW2Nve4eHj4uHg39vY1dLOzcrIxcPAv7y7u7q6ubi3tbSysbGwr62urq6trKuqqaWjoaCgn56dnZycm5qZmZmXl5eXl5iZmZmampubm5mXkISGiIyLoWlye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He2NLOxcC4r7yxtLe6wMjLy83Nz87Pz87Oz8/Q0NDQ0dHV1tjb3d/h4eHh4N7b2NTSzs3KyMXDwL+8vLu6urm4t7W0srKxsK+urq6urayrqamlo6KgoKCfnp2dnJuampmZl5eXl5iYmZmampqcnJuZl4+Eh4iKirBoc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnTz8bAubC4sbO2usDIy8vNzc/Pz8/Ozs/P0NDQ0NHR1NXY2tze4ODh397d2tbU0c7NysjFw8C/vby7u7q5ube1tLOysrGvrq+urq2sq6mppaOioaCgn56dnZycm5qamZiYl5iYmZmampqbnJubmZeRhoiKioy+bHR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1M7HwbiytLK0trm/x8vMzc3Pz8/Pzs7Pz9DQ0NDR0dPU1tnb3d7f39/e3NjW0s/OzcrIxcPAv728u7u6urm3trWzsrKxsK+vr66trKqpqKWjoqGhoJ+fnp2dnJubmpqYmJiYmJmampuam5ycm5iXjoaIioqNuW12foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg2tTOycG5s6+0tba4vsbKy83Nz8/Qz87Oz8/Q0NDQ0dHT1NbY2tzd3d7e3dvY1dDPzczKyMXDwcC9vLu7u7q5uLa1tLOysrCvr6+urayqqailo6KhoaGgn56enZ2cm5qamZiYmJmZmpuam5ydnJuYloyFiYuLjaRrd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4drV0MvDu7WstLa2t73FysvNzc/P0NDOzs/P0NDQ0NHR0tPV2Nrb3d3e3dza19TQzs3MysjFw8HAvby7u7u6ubi3tbSzs7Kwr6+vrq2sqqmopaOioaGhoJ+enp6dnJubmpmZmZmZmpqbmpudnZ2bmJaLhoqLjI6ObHiAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHb1tHNw7y2rLW2tre9xMrLzs3Pz9DQz8/Pz9DQ0NDR0dLT1dfY29zc3dzb2tbT0M7NzMrIxcPBwL28vLu7urm4t7a0s7Oysa+vr66trKqpqKSjoqGhoaCgn56enZybm5qZmZmZmZqbm5qbnZydm5iWjIeLio2Rg3J4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6+/sba6uMLJyc3Oz9DP0M/Pz8/Q0NDQ0dHS1NXX2drb29vb29nX1NLRzMvKycbEwsG9vLu7urq5t7i3tbS0s7Gwr66srKurqailpKOioaGgoJ+enZ2dnJqZmZmZmZqbm5yfnZycnZyZloqJho2OmHJweYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrewvrG2urjCycrNzs/Qz9DPz8/P0NDQ0NHR0tTV19jZ29vb29rZ19TS0MzLysnGxMLBvr27u7q6ube4t7W0tLOxsK+urKyrq6mopaSjoqGhoaGfnp6dnZyamZqamZmam5ucnp2cnJ2cmJaIiomPip9scXqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5sbqxtbm5wcnKzc7P0NDQz8/Pz9DQ0NDR0dLT1dfX2dra2tnZ2NbT0M/My8rJxsTCwb69vLu7urm3uLe1tLSzsbCvrqysq6upqKWko6KioaGhoJ+enp2cm5mampmampubnJ6enZ2enJiWiYqKj4quaXN8hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurK2sra5ucDHy83Oz9DQ0c/Pz8/Q0NDQ0dHS09TW19jY2dnZ2NfV0tDOzMvKycbEwsG/vr28vLu6uLi3tbS0s7Gwr66srKurqailpaSjoqGhoaCfnp6enZuampqZmpucnJyenp2dnZuYlIuKiJCOvmx3fYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry0s7S1ubm+xsrOz8/Q0NHQ0NDQ0dHR0dLS0dLT1dbX2NjY2NjW1NLQzszLysnGxMLBwL+9vLy7ubi5uLa1tbSysa+urKyrq6mopqWko6KioqKgoJ+enp2bmpubmpqbnJydnp6enp6cl5OLi4mQj7tueX+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9tq+2t7i6vcXKzs/Q0NDR0NDQ0NHR0dHS0tHR09XV1tfX19fW1dTRzs3My8rJxsTCwcC/vr28u7m4ubi2tbW0srGvrqysq6upqKampaSjoqKioaCfn56enJqbm5qbnJ2dnZ6enp6enJaSioyOkY2obnqBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7ett7e4urvDyM7P0NHQ0dDQ0NDR0dHR0tLR0dPU1dbW19bW1tXT0M7NzMvKycbEwsHBv769vLu5uLm4trW1tLKxr66srKurqaimpqWko6KioqGgn5+fnpybm5uam5ydnZ2enp+fn5yWkouLkJGPlXN7g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4rLi3uLq6wsjOz9DR0NHQ0NDQ0dHR0dLS0dHT09XW1dbW1tbV0tDOzczLysnGxMLBwcC+vby7ubi5uLa1tbSysa+urKyrq6mop6alpKOjoqKhoKCfn56cm5ubm5ucnZ2enp6fn5+clpGNi46Qk495fYWOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7K+tLW7vb/Kzs3P0NLS0tLS0tLS0tLS0tPT1NTU1NXV1dXW1dLQz87Ny8rIx8bEwsHAvr28u7q4uLe2trW0srGvrq2srKyrqqempqWlpKSjoaGgn5+enZ2bm5ycnJ2en6Ggn6CgnJaRjIuNi5p6d36JkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw722vbK2u7y/yM7Oz9DS0tLS0tLS0tLS0tLT09TU1NTV1dXV1tXS0M/OzcvKycjGxMLAv769vLu5uLi3tra1tLKxr66tra2sq6qnpqalpaSkpKGhoKCfnp2dnJycnJydnp+hoaChoZyWjoeOi42jdX6Ai5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/u7uyubq8v8XNztDQ0tLS0tLS0tLT0tLS09PU1NTU1dXV1dXU0tDPzszLysnIxsTCwL++vby7ube4t7a1tbSysa+ura2trKuqp6empqWlpKSioaGgn56enpycnJ2dnp+foaGhoqGdlI2KkIyOsG59iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbu3s7y5u77DzM7P0dLS0tLS0tLS09PS0tPT1NTU1NXV1NTV1NHPz83My8rJyMbEwr++vr29u7i2uLe2tbW0srCwr62trayrqqenp6alpaSkoqKhoaCfnp6dnZ2dnZ6foKGgoaOinZSOjo+Mi659fomQmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO6tra8trm8w8zNztHS09LR09PS0tPT09PU1NTU1NTU1NPT1NPRz87Ny8vKycjGw8G/v76+vbu5t7i3trW1tLKwsK+ura2tq6qoqKenpqWlpaOjoqGgoJ+fnZ2dnp6foKCioaChoJyVjo+JipOrd4+Hk5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFu7e1ubW5usHKzM7S09PS0dPT09LT09PT1NTV1NTT1NTT09TT0c/OzcvKycnHxcLAv7++vby7ube3t7W1tLOysLCvrq2trayrqKinp6ampaWjo6OioaCgn56enp6en6Cho6OhoqCclI6IkZSqeoSGkJefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx8G7tbSzuri/yczP0dPT0tLT09PT09PT09TU1dTU09TU0tLT09HPzs3KycnIx8XBv8C+vby8urm3t7a1tbSzsbCwr66tra2sq6ioqKenpqalpKSjoqGhoKCenp6fn6ChoaSjoqOhm5KLkYm3enmCjJKaoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnGv7Ovsr22vcnMz9HT09LS09PT09PT09PU1NXU1NPU1NLS09PQz87NycnIyMfEwb/Avr28u7q5t7e2tbW0s7GwsK+urq6trKupqKinp6ampaSko6KioaCgnp+fn5+goaKlpKSloZuRiZ2fdXuBiI2anKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxL65s6ijrLzCyM3P1NTQ2tTV09HSztLM1NPT0tLS09PR0dHS0M7Ny8bGxcXFw8DAwL27u7u6uLa6ube2tbSysK+tq6urq6qpqqqpqKampqakp6impKSjoJqinqGeoZ+lqqmjnpyVpaFtc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzsnCu7ivo52dnrzOy8zS0NLQ1NjU1tXU09XU09PT09PT0dHR0M7LycfIx8fHx8XEwsLAv76/v727urm4t7e2tLOzsrCwsLCwr6uqqqmopqWkpKWkoqCfnpyfn6CknKKlopuemLDFkGprcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHLxL27tq2hm5WQkJ/B2NLM0dPTztTb09bU09PS0tHR0M7Ozs3Ny8rJyMfHxsXEwsHBv769vb27ubm5uLi4t7a0sbCvrq6urq2qqqqqqainpqSkpKKhoqKhop6aoqGcnKuzxZRbX2Rpb3Z8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djUzsrDvrexqaWblJGMhYCJo87T2c/N0s/Z0dLT09HPz87Nzc7OzczLy8bFxcTDwsC+vLu6ubq6uLe1tLOzs7OxsLCvrq2srKurq6urqamoqKeoqKimpKSioZyZoqaxzbFvVllcZGdjb3p7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1s3Mx8C6s6yno5mRi4mGfX90am6DrsnPwMbJzdDR0M7Pz8/Pzs3My8rIx8bGxMK/vry8u7u7u7q5t7a1tbW0srGysbCvrq2trampqKenp6ioqKioqKWjoaG2vJVXSk5JUFhYXmdmcXt0gIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnSzcfCvrqzrqShnZWQjX94d3BqYWNuqaewt7/GysvKy8zMy8vLysnJysrJyMfFwsC8vb29vby6urm4t7e3trSzsLCvrq2srK2kpaWmqKmqrKytrKuln56fj0g7SUhIVFZaYmJqb3Z8iIWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b3NXMx8O+uLStpaCZkoyEhHp3dGxjXa+dn6e0vsPFxsfExMTExMTExcPCwsPDwcC/u7u8vby6ubi2tbW1tbWzsrCxsbGwsLGzuLq7vL2+vby1tLStopiVl2pBQ0pMT1daXWhob3eAfoeLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dfU0M3Hv7m4sKejnpqXjouIf3h2cmO/lpuksbzDxcbFwMDAv7++vr26urq7u7u5uLu8vLy7urm4urm5uru7urm4ubq6uru9v8HBwL68uLOwr66tqJ6WlZlYQUtPVVdcY2hqb3ZxgYiOkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQioJ9enJwqZ2goqq5w8PJy8rKycjIyMjIwsPDw8LBwMC9vr6+vr69vb29vLu7urq6wcHBwsTGx8jIx8XBvLe0sq+xrKSbmY6tRUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlZCHgn93cpibn6KpuMDCx8nJycjHyMfIycbGxsXFxMPDxsbGxsbFxcTCwsC/vr6+vr2+v8DCxMbHycjFwby4tLOzsq2kmZiZu0hMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuZjYmFf3eAn5+iqLa/wMXGx8jIx8fHyMnKycnJx8fHx8vLy8vKysnIxcTDwsDAv7+7vb/Bw8bIysrIxsK9uLWzs7CspZmVmatNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKain5ORioV+da6eoqayvsDDxcbHyMjIx8nKysrJyMjIyMjJycnJyMfGxcTEwcC/vr6+v7/Bw8bJy83Ly8jDvbm2tLKvqqOal5aEUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqKOZl4+KhXe8mqKlsb/BxcXGx8jIycnJysjIx8fGxsfHxsbFxcTEw8LDwsHAv769vcDBwsXHys3NzczJxL65trWzsaufmpuea1NXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6on56Uj4uBvZqipbG/wcXFxsfHx8nJycjGxsXFxcXFxMfHx8fGxcXExMPCwcDAv7+/wcLEx8rLzs/NycW/u7e1sLSvn5eapVtXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezrqakmpWPiq6aoqSvvcHDw8bFxcbIycfGxcbGxsbFxMTHx8fHx8bGxcXEw8LCwMDAwMHDxcjKzM7QzsrFv7u3tq2yrqCXmapTW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t7OrqZ6Zko2fmqOkrr3AwcHGxMPFyMjGxMfHx8fHx8bFxcbGxsbFxcXDw8LBwMDAwMDAw8XIy87P0M7KxcC7uLazsKqcl5uzV15iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u3sqqloJeUmZ6coqe7vb/Fw8PDw8TExcXExMPCw8PDw8PExcXExMPExMPDwsLBwcC/wcLFyc3Q0dHPzMfAu7i2sbapm5mYv1xgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/uLStp6KZk5Wimp6lt7u8wr+/wMDAwMHBwcHBwMDBwcHCw8TEw8LCw8LCwsDAv7+/wMHCxsrN0NHR0MzHwLu4trG1qZqXlq9aY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7q4saqlnJSQqJeaobK3ur28vLy8vb29vb69vby9vb29v8DBwcHBwMHBwcDAv7++vsDBxMbKzdDR0tHNyMG8uLays6iZmJeZXWdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS9u7SspqCWj6uWl56ssre3uLi4t7e3t7e3t7a2t7e3t7m6u7y8vL2+vr6+vr+/vr7AwcPGys3P0dPRzsjBvLm3srGompqbhGNqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGv7y1rKahmZCqlZWaqK6ysrKysbGxsbGws7OysrOzs7O1tre4uLm6u72+vb2+vr6+vsDBxMjLz9HT0c7Jwr25t7KxppqaoXJmbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx7+6tKykoJmQoJGTlaKnq6ytraysraysrK6urq2trq6usLGys7S0tre4ubm6ubq7u7y9v8PHy87Q0tDNyMK9urizsaOZmqZlZm52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa+t7GqopyWj5KMj46coaOmp6ampqWlpqWmpaWmpqanqKmqq6ytrrCys7O0tbW1tra6u73BxsvO0NHPzcjCvbq4srOgmpusYmhxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDvLWwqqCZk42JiY2LmJydoZ2dnZydnJycnp6enZ6fn6CioqSkpaepq62ur7CxsrKzuLm8wMbKzdDQz8zIwb26ubK0n5uctGNsdHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jk39vY0s/Gu7ewqKGbk42Ig4iCf42ZmpmYlpOSlJSTkZOUlZaVlZWVlZqfnZudoaShp6qpqq2vr7O1uLzBxsrMz8/Mx8C7uLeyrKSZlLtmb3V+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn3t7c1crEvre3r6ehm5KIg3yDf3uFjpKTkI2Li4uMi4mJiYqLjI6QkZOQj5WZm5uao56fpaemqa6xsra6wMXJzM7Oy8a/ure3squimpm9aW93gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497a1MzFv7avsKedl5OLg39yenp0d3t9goSDgoODgoF/f3+BgYSEhoaHhoiPkpCSmZeZnJ+go6Wmq66xtrzCx8nNzcrFvrm2trSroJuas2xweoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7X1dDLwruyqqegmJKKgHp2fIqYpbTEz9fOzczNzczKyMzJxb20qqGcjoV+fICEiIyNlJiYl5udnqOlqrC3vcPGysvJxL65trWzraGZlp9rc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY18/Evbq0qqWalI2Nlae/0dDU1NHRzs3Nzs7NzM3NysnExcfIx8bEw7+/uaiZjYaCiYOFi46Nkpqbn6Wrs7nAxMjIx8O9uLe2sqygmZeSbHV9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cbDvbewpZ+eoa7E1tvY09HU0c7Nzc3MzMnJycnIx8bGxsbGxMPCwcG/wb++v7yunYV/fYKJi4+SlZigp621vcHFxMTAu7i2trKrnJyejXF1foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe/vrWooqW2ytvY1tXT0dLU1NHOzs7My8vJycnIx8fGxsXFw8PCwsHCvr67t7a3trK6rJaBeHyDiIuRmJ+mr7a7v8DAvbm2tbSyqpucoINydn+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/ua+lrsTU2d3S0NDS09HOzsvJycvLx8XFxcXDwsHBwcK+v7+/vr69vL++vb26uLe4tbOzr5+Ifn+EipGYoKmxtry+vru3tLOzsaudm5t5b3eBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTf29LMycK4sKi3ytjb2tfX1dPT0M/OzMvKyMXFxMPCwsLBwcC/v76+vb28vLy8vLy6urm4t7W0srOxrquurJZ3foCKk5egrbG3urq2s6+sr6ypmpmhcXR8g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd1c/OyryxsLLP1dvd2dXS0tLSz87Ny8jIx8XCwsHBv76+vr29u7u6urm5ubm5ubm5uLi3trW0srKur6+rqa2uqY19fIWPmKKosbW1s7Gtqq6rqJqZonF0fIOMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1MzMxLqzr7vS19jY1dPQ0tLPzcvKyMbEw8G/vry8urm6uLi3t7a2tbW0tLS0tLS0tLS0tLOysbGwsq6qqKWkp6qbmYh+h5WfoKqtr62sqqmtqaaamaNwdHyEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083Jwbmvssve29bW1dPT0dDQy8jGxcPBvr27ubi3tra0s7GxsrGwsK+vr6+vr6+wsLCwsLCwsLCvr7KsqqqppZ+bn6SZhX+KlJyip6mnqKemqqWjmpekb3R7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGu7WtutPd2djY1tbV09DMycbEwb+8uri2tLOxsK6vra2qqqqqqKioqKioqKipqampq6usq62trKypq6yqqKSioZ6cl5OLgIeYm6Gio6SjpKijn5iWpW10fIWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3EvrCswNre1dPX09HQz83Kx8S/vLq3tbOvrauqqKempqWkoqGhoaGgoKCgoaGhoqKioqOkpqenqKioo6mopaWkop+fmZWVlIqEjJSZnJ2fn6CkoZyWlKRrc3yFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurOuytrZ1dTU19DPzcrHw767t7Syr6ypp6WioZ+enZycm5mZmJiXl5eXmJmZmZqampudnZ+goaGio6KjoaKnp6CcmpiVkIyPi36LkJSVmZucoZ6ZlZKkaXN8hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKszdTY1dPW1MzLycjFwLu3tLGvrammpKCfnZqZl5eWlJOSkpKSkpGRkZKTk5OUlJWVl5iZmp2dnp6iop6doJ6amZeUlJGMi4yHhIqOkZaWmp+dmJOQo2hzfYSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+HX1czEwrCmzdfX1tXU0c7MyMXBvLizraunpaOfm5iXlpGQkI+Ojo6OjIyMjIyMjIyKi4uMjY2OjpCQkZOVlpiYmZqbnZycnJuWlJKPjIuHhn6Ah4+PlJKWmJKSi7Fncn6GkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u/u6+fk4uHg3NrW1dLRz87My8rJycnJycjKy8zMztDT1dbW2Nrf5Ojn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc1s3JurCwzNLV1dTT0c7Lx8LBu7axrailoJ2cmZWTkpGOjo6NjIyMi4uLi4uLi4uLioqLi4yMjY2NjY+QkZOTlZaXl5iamZmYlZSRjouJhoSCfIKEjIyPlZWQj4mvZnF9ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7p5uLi4uDa1dPRzsvKyMbEw8LCwMDAwMDDw8TExMbHyMjLztHU19jZ4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1s/Fv7SnytnU0tLR0M7JxcK6t7KuqaSfnJeWlZKQjo2NioqKiomJiYmIiIiIiIiIiImJiYqKioqKiouLjI6OkJCRkpOUlZWVlZSSj42Kh4SCgnp8eoKGiZKQiouHqmZwfIWPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn4d7c2NXSz9DGxMG/vby6ube2tbSzs7S0sLK0tri7vb/BwcHFys7R0tnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDJv7iqwdfR0NDQz83JxL67sq+ppaCcl5WSkZCPjY2LjIiIiIiIiIiIiIiIiIiIiIiKioqKioqKiomJiImLi4yMjY6PkJKSk5OTkY6LiIWCf356dnd4goSLjIiIhaZlb3uFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi39zZ1dLNx8PBwb66trGwr6+pqaeop6empqSlp6irra6vrLW+wsLBxcrQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLxbuqs9LSzNHQzszJxb+4tKqno56alpOQj4+NjYuMi4uIiIiIiIiIiYqKioqKioqKiYmJiYmJiYmHiIiJioqKioyMjY6PkJCQkY+MioeDf315fHZ0cHuDhIiFhIOjZG55g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnY0MfGxMC6t7Cvra6yucHFzs7Ozs3MysjMycS9tq+ppqioqq60usDCxMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbutr8vP0cvSy8vHw722sKukoZyZlZKPjYuLioqJiYqKiIiIiIiJiYmJiYmJiYmJiYqKiomJiYmJiYmJiomJiYqLi4yNjo6Pj46Oi4mGgn57e313b3BxgH2FgX5/m2FrdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSzsrEwLiurK67wszU19TPzMzMzc3LysfGxcTDwsC+vLu6sKSgpK61ubq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72xp8jQ0M7OzsjFwbu1rqejnZqWk5COjYuKiomIiYmJiYmJiYqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqKiomJi4uLjIyNjY2Ni4qIhoJ/e317dXJybHZ2fnp3eZRdaXN9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxsK6sq6vt8jX1dbU09DQz9DNzc3Ly8jHxsDAv7+/v728vLy7s6iioqaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3qb3Mz8vOzcvFwby3sKminZiWko+OjIqKioqJiIiIiYqKioqJiYmJiYiIiIiIiIiIh4eIiIiIiIiKioqJiYqKiYqKi4uLjI2Ni4qJiIWCfnx+enN6dGxpcHh1cnSQW2dxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb21rrDC1NvZ2NTV1dTR0M/RzMvKx8bFxMPEw8HCwsLAvrm1srO0sKegoaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHr5N/b0Me/rqjM0MrLx8jDwLy1r6mjnpqTkpCMioqIiIqKioqJiYmJiIiIiYmJiYqIiImJiomJiYqKiYmJiYmJioqKioqKioqKioqKioqKioqKiYeFgoB/fnl5fXlyXm9xcW1yhVJdZ3Z+iZOaoqyzub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PP08+/u6+rn5uno6Ofm5ubm5eXm5+bn5+fo6Onl4OHg2tXWzcXDv7evqsLX3NjW1NHV1NHOzczJyMjHxsTDwsLCwL++vby7urq3trW0sq+urKSfn6qztrm/x8zT2eDn6uvu8PP2+Pr7/P/+/Pv69/Pv6eLc08vCtKm60M7JycTFwr24saqloJqXkpCPjIqKiIiKioqKioqKioqKioqKioqKiYmKioqKiomIiYmJiYmJiYqKioqKioqKioqKioqKioqKiomHhYKAf317fXt9fGJqbG9rboJWYWpweISPl56lqbO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro5uXj4d/f3t3d3Nzc3OHh4uLi4uPj4d7f4N3c2NPOycXAuqypxNfd39rW19TR09DNzMvJyMbFxcPBwL+/vr28vLu6ubi4trW0s7Gurausp6Ken6eyur3DzNLW2+Ln6+3x9Pb5+/z+/Pv6+PXw7OXe2MzGuaquydDJycjBw8C3squkn5qUkZCPjIuKiYiJioqKioqKioqJiYmJiYmJiYmJiYmJiYmIh4eJiYmKioqKioqKioqKioqKioqKioqKiYqIhoWDgYB9gX97gYRqYWRqZ2h6Ul1kbnR8ho+YoKWss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6ePi397e3d3b1tXV1NTU1NTW1tbX2NnZ2djV1tfUz8zJwrq0s6620dfb2tfU09XT0M/NysjHxcPCwMC+vbu6urq5ubi4t7a2trW0s7KwrayrrqejoJuZoq6zvMXJzNPb4ubp7fH09/n7/vz6+ffz7eni2dPHwbOmvMnLx8jFv8C6sq2moJqWkY6MjIuKiImJiYmJioqKioqKiIiIiIiIiIiJiYmJiYmIiIiIiImKioqKioqKioqKioqKioqKioqKioqJiIaEhIKBfoWAf4OIeFlbYGBicE1XX2pweIGIkJmgpa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHe3NfV0tHR0M3MzMvLy8vLyMnKzM3OztDOz8/MxsPCwL6wray92d3c1NTW1dPQzcvLycbEw8C+vbu6uri3trW2tLS1s7OzsrKzsrGwrqyrqqSkpKSfmpqeqbK6v8XN1trh5Oru8fT3+f78+vj28evm39TOxburq8nFx8jGwr28ta2popuXlJCNioqKiIiIiYqJiYmJiYmJiYiIiIiIiIiIiIiIiIiIiIiJiYmJiYmKioqKioqKioqKioqKioqKioqKiYiGhYSDg4CGgIWEiYpaVFVVWWVFTllfaHR9g4iRl52krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dTRzczKx8bDw8LCwcHBwcTEwsPCwsLDwsbFwL29ubSsqK3K2tbZ1tXV09HNycfHxsPAvry6uLe1tLSysbGwsK+vr6+vr7Cwrq+urayrqqmko6Gfnp2bmKClrLS9xMvQ2+Dm6+7x9Pf9/Pr39O/o49vRyMCyprPKxMjIwry6t7KqpJ6YlJKPjIqJiYmIiIiIiYmJiYiIiIiIiIiHhoaGhYWFhYWFhoaHiIiIiIiIiYmKioqKioqKioqKioqKioqKiomIh4aFhYWFhYSKiIuVbFNVU1RfRUtTV19ocHV8ho2VmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0czLyMTBvbi1trW0tLOzsrO4uLm6u72+vrq8uLS1tKyknavP3dXW1dbRzsvIyMbEw768uba0s7CvraysqqmpqKioqKioqKmpqqioqamoqKenqqOdnJyamJeXmaCstbvDy9Ta4ebq7fL1/Pv49vLs5eDW0MS6q6q/xMTGxL+7trCupqCZk5GOjYuIiIiJiYiIiImJiYiIh4eGh4aFg4KBgH6AgICAgYGCg4OEhIWGh4iIioqKioqKioqKioqKioqKioqJiIeHhoaGiYSLjY6RmohGTk9PWERERVFWYGpxeX+CkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jDv7q2s7Kxr6uqqainpqampqanqaiqq6uuramoqKOeoLDW39bS0tTT0c7Jx8XDwLu2s7CtrKmnpqWko6KhoKCgoKCgoaKjo6OjpKOkpKSko6Whn5yalpKOj5CWoaqyvMfN09vi5urv8/v69/Xx6+Pe0tDBt6iwy8DCwb+8u7SqqqOdl5GOjIyKiIiJiYqIiIiJiYmIh4aGhoOCgX98enh4enp6ent8fX6AgIKDhYaHiIqKioqKioqKioqKioqKioqKiYiIh4eHh4yFkY2VmJqdYnqMnLm7w8LDxMfGwLSkmpCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9trOusLW+x83R0M/OzMzLy8nFv7evpqCcoJ+en5yVmqna2djU1tXPzs7NycK9vLm2r62qp6WkoKCenp6cm5uam5qampydnZ+fn5+goaGioqKgoZ+cmJOOi4aJjZOeq7e9x87X3+Tp7vP8+vfy7ung2dPBwK+hu8DBwr+8urawqqadmpOOjIuKiYqJiYmJioqKiIeHh4aFg4F/fXt6eHd1dHFwcHN0dHd7eXx/goOFhYaHiImJiYiJioqKioqKioqKiIiHh4iIiYmKjY+SlZibnqeqr7O3ur6/wcLDxMLBvrzAtqWVkJWirLC7vr/IztPf2uDf297d2djPz83Iw721rrS+zNXW1NLQ0M/OzcrKyMfHx8XDxsfAtaCVj5GLiKXT19bV0tHOy8nGwr24ta+sqqWjoJ2amZeUlJOTk5KSkZGSkpKRk5SVlpqbm52dnZ+enJuYlpOQioeDfnyAlaettcPK09ji6Ozv+vn18Ozn3tfOwLyrqL7Av8C/ure0rqijnJeSjYuKiomJiYmJiYmKioiGhoWFgn99eHZycW9saWhnZmdpa2xucnR4fH+Bg4SGh4iJiYmJiYqKioqKioqKioiIiIeIiImJi42Pk5WZnaCoq6+ytrq9wMDBwcPBwL28ubi2squglY2nrK+5xsrJz9nZ19XW1dDOzMXAvLSvvdHZ2drZ1dPR0M7NzMvJyMbGw8TDwsTHyMTMwKyKep/O3NXU0dDNy8jFwL24s66qpaOenJmXlpOSj4+Pj46Ojo2Njo6OjpCRkpKUk5WWl5eXmZeVk5GNioN/fHN0c3uTpq+4xs7V4eDi8fn49O7q5NvTyL+1prLAvb+9ure0sKykoJmWkYyLioqJiYmJiYmJiYmIhoWDgX97eXNva2dkYV5cXVxeYGFkZ2xvc3d7f4GEhYaHiYmJiYmKioqKioqKioqIiIiIiIiJiYyNkZOWmp6hqKuwsra5vL6+v8DAv769u7q2sa+tqaKdnJ6ksbq+vsLJys3PzcvIxsK+s623zdjW2tjV1NPT0c7LysnIx8XDw8HDwsHBxMfKysvQwLLJ28rS0M3LyMXBwLe0r6qloZ2al5WSkI+OjYuLi4uLioqKiouLi4uMjI2Oj5CRkpOTk5KTkIyKh4F7dnNramRid5SttsPHz9zi5e759/Pt6OLZ0MS9rqO6v7m/uri1sa6noZyWko6LiYqKiYmJiYqJiYmIh4aEgX98eHRvamRfXFhVUlJTVFdaXF9laW50eXx/goSGh4mJiYmJioqKioqKioqKiIiIiIiIiYmMj5GUl5ufoairrrO1uLu9vby+v728urm4tK2rqqqpp5uZnaWss7e4vsLGxcLBv7q3q6/G2dzY2NTS09LT0s3Kx8jGxcTCwcHAv7/AwL/CxcfGyMvMzc/PzcvJxcO+urivrKainZmVk5OQjo6NjIuKiYiIiIiIh4eJiYmJioqLi4yMjY6Pj46MioiEgHx3cGtlY2BZVlp0n6+5xNPX3ubo+ffy7Obf1s3BvKeivby4vLi2sq+rpZ+ZkpCMiomJiYmJiYqKiYmIiIiEgoB8eXRvaGNcVFFNSkdHR0hMTlJYX2VqcHZ5fICDhYeJioqJiYqKioqKioqKiomIiIiIiYmKjY+SlJebnqCpqq2wsrW3urm7uru7ubi3s7Ozsa6pop+inZmZoKqwr7W4ube2uLStprXM3NzU09rW1NHOzcrJycXEw8HBv7++vLq5vb+9v8LAxMLDysnGy8jFw7+7uLSwqKWgnJeUkY6Pjo2Li4uLiomJiIiIiIiIiYmJioqJioqKiYmJiYeFgoB9eHNvZ2JcVVRST0tGUHKwu77P0tvi6Pj28erk3dPKv7ijp7u4uLm3tLGtqKOdl5GOi4iIiYmJiYmKiomJiIeFgn58eXRtZ2FaUUtGQz89PT1AREZKUllhZm10eHt/goWGiYqKiYmKioqKioqKioqJiYiIiImJio2OkZOVmZyepairrK+ws7W2tba3trW0tLKxr6yppqWlnqOhmpeZoaiorKutsKykobTS4dfO19vRzc3MysbFxcXAv728u7q6ubq4tbi8vL2+v8PDwL/FxcPBvru3tK+rqKGfm5aTkI6NjIqJiYqKiYiJiYmJiYmJiYmJiYqKiomJiYiGhoOBfHp3c21mYVpSTkhDREQ/Pj5Fg7bBydLg4un39e/o4trQx7uyoa+5tbm1tLGuqqagmpWPjYuIiIiJiYmJioqJiIeGhIB7d3NsZV9XUEc+Ojg0MTQ0Nzs+Q0tUW2JqcXZ5foKEhomKioqKioqKioqKioqKiYmIiImJioqNjpCSlJeanKGkpqmqrK+wsLGxsbGxsK+vrquppqSjopykp6SbkI+cnqGhpKOZnK7Z1dPW19TR0szLysjFwr69ubm3t7W0tLS3tLO0tre4uru5urq4u768ubazr6umo5+cmZWRj42Mi4uJiIiJiYmJiIiIiIiIiYmJiYmKiYmIiIiGg4F/enVxamZeWFBKQj86NjYzNDc1O1aoxc7S3d7p9vTu5+DYzsW5rqC1t7S7tLOwrailn5iTj42KiIiIiYmJiYqKiYiHhoJ+eHRuZ19YTEU8My8sKScqLC4yNTpETFddZ290eH6ChIaJioqKioqKioqKioqKiomJiYiJiYqKjI6QkpOVl5qfoaSmp6iqq62ura6tra2sq6mmpaSkoqGioaGoq5iGiZGUk5WUj6jZ19bU1tXQzcvNycTBv726t7S0s7KxsbCwrq+xsrK0tba5t7i6uri3tbOxrqmloZ2amJWRjo2Li4qKiYiIiYmJiIiIiYmJiYmJiIiIiYiIiIaDgX57eHNtaF5YUEdAOjMvLjApIyosMEWQtrjI0dvb5/fy7efe2M7Ct6ibuLa1srOzsKumoZyXlIyLiomJiYqKiYqKiIiJh4SDe3VwaWJZT0Q8MCoqKygjIyQmLDA0PUVPX2FucXd7g4WHiYqLioqKioqKioqKioqKioqKioqKioyMjo+SlJWWmpucn6GipaWmpqampqamp6empaOioKChoaGkpqmvnHmJhI2Eg6XQ3dbU09DPzcvJxMK+urezsK+srKuqqaioqKioqaqrqqysra6ur66trKupp6OhnpyYlpGQjoyLi4mIh4eIiIeHhoaHh4aGhoaHiImIh4eHhoWDgH14cm9sY1pQSUA6Ni8pJykmIiQjKlmdqLK9yNLa4en28evl3dbMwLSnnre1tLKzsK6ppaCblpOMi4qJiYmKiomKioiIiYeDgXlybWZcUkg7NCsoJiQjIyMkJystMjtGUFZfbW93fIOFh4mKioqKioqKioqKioqKioqKioqKioqLjI2OkJGTlJaYmJqdnp+goKCgoaKioqKioqKhn56fn6GipKSnsamUcX96eJTR2cvU0s/Oy8rHxb+8uLSyrqupp6alpKSioqKjo6SlpaaoqKmpqqqpqKempKKfnZuYlJOPjoyMioqIh4eHh4eFhIOCgYCAf4CAgYKCgoKCgYF/fnp3cGplYFZMR0E4LScnJSMjIiMhLmKUoKq1v8nT2uHp9e/q49rTyLyxpaO2tLKxsa+sp6OfmZORi4qJiYmJioqJioqIiIiGg352bmdfVUk9MywmIyIiJyw1Nzk5Nzg/R1JSXm1weH2BhoeJioqJioqKioqKioqKioqKioqKioqKi4uMjY6QkZGSkpOVlpeYmZiZmZmampycnJ2dnJybnJ2eoKWkpbC2rndsa4XE087S0M/MycfDv722s6+sqaShoJ2cnJyampqZnJucnZ+goKGhoaKioqGgn52cmZeVk5GOjYyKiYmJh4aGhIOCgH98fHp6eXh5enx8fHx8fXx8eXh0b2lgW1NJQDwxKCgoJCAdIycgOXGKkKauuMLL1dvi6fTv6eHY0Ma6rKSotrKvsa+sqqahnJeSj4qKiYmJiYqKiYqJiImIhYF8c2piWU5CNTEqIyEkLDc/Q0VJR0M/QEJRXGJudXp/goiJi4yLioqKioqKioqKioqKioqKioqKioqLi4uMjY2Njo6Pj5CRkZGRkZKSlJSUlJaXl5eYmZqcmp2kpqatt7eoYmu31c3H0MzLyMXBvLi1raqnop+cmZaVlJOTkpGRkZOUlJWXmJmZmZmampqZmJiWlZOSkY+NjIqJiYiIh4WEg4B/fHp3dXRycnFxcXJ0dXZ2dnZ3dXNxamZeVk5HPTUxLCYlIR8hJB8kS3eDjZ2jsbvFztfd4+v07ujh18/EuKihrbOwr7GtrKmloZyXkY+KiYmJiYqKiomKiYiJiIR+enBnX1RKPTItKSMiKztHS0lMT09PTEhFS2VmbXp6goaIi4yNjIuKioqKioqKioqKioqKioqKioqKioqKiouLi4uLi4yNjY2MjIyNjo+QkJCRkpSTlZaYmpiboaenrbK3vImXyczKy8fHxcK+u7awrKSinpuYlJKQj46OjY2MjY2Ojo+QkZGTk5OTk5OTk5KSkpCOj46Ni4qKiYmIh4aDgn99end1cm9saGhnZmdoamttbm9vb21qZ2BaUUlBODErJyckIiMjIR4rWXR/j5ierrS+yNHa4Obt8+3n39bNwralnrCxrq2xrKqopJ+blZGOiYmJiYqKioqJioiJiYeCfHdtZFpQRzsxJyUjKDVETlFXWFlZWllVUEliam99fYWIiouOjo2Li4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi4uMjY2Njo+QkZKUlpeZmqCkqKuwtLS0wMDIwsPHwL67trKtqKWcm5eVkpCOjIyMi4uJiYuLi4uMjI2Njo6Pj4+Pj4+Pj4+NjIyMi4qJiYiIh4aEgX19eXVxbmpmY19eXl5eYGJjZmZnaGdkYV1WTkU9Ny4oJCUfHyUkICY0Y25/ipCeqa+6xM3V3uPo7/Ls5t7UzMG1pJ6zrqutsamppqKfmpWQjYiIiYmKioqKiYqIiImIgXt2amBXTEQ5LiQhJjNBTFRaYGJiYmBfW1dTWHB4f4OHioyOj4+OjIuMioqKioqKioqKioqKioqKioqKioqKioqJiIiIiYiIiIiJiYqJiouLi4yMjo+PkJKUmZqdoqSorbC4t7nBvcK7vrm2s62ppKCdl5WSkI+NjIqLioqJiYmKiomJiYmKi4uLjIyMjIyMjI2NjIqKioqJiIiHh4aEgXx7d3NtaGRfW1dUU1FSUlRWWFpaW1xbV1NQSUI5My4oJCMlISEiHiVGanWBiZGbo6+9wcrT2uLm6/Hx6+Xd08vAtKOds6yqrLGpqKWhnpmTj4yIiIiJioqKiYmKiIiJiIF7dGleVEk/NiwkHyg9TFJbZmVpa2pnZWJeYlB5gH+IiImNjpCQjo2Mi4qKioqKioqKioqKioqKioqKioqKiomJiYiIiIiIiIiHiYmJiYmJioqKi4yNjo+Qk5eZnJ+hpKistLG5uLi3uLizsayno5+amJSRj46Ni4uJi4uJiYmJiYmIiIiIiIiIiIqKioqKioqKjIqJiYmJiIeHhoaFg397d3FtZmBbVVBMR0ZFRkZISkxNTE5OTElEQTs0LSknIiEiICQhHTBTbnaAiZOapKy0vcbP197k6Ozy8evk3NLJvbGjmqytq6qsrKWkoJyYk4+LioqKioqKioqJiomIiIV+d3JnXFNIQDUqKCA2RlJcZGxwcnNzcnFsaGRadIaGgZCPkJKRkpGPjYuKioqKioqKioqKioqKioqKiYmKioqKiomJiYiIiYmIiIeIiIiJiYiIiYqKi4uMj5CTlZibnqGkp62usbKzsq+vraqmop6alpONjIuJiYmJiYmJiYmJiIiIiYmJiYmJiYmKioqKioqKiomJiYqJiYiIiIiFgn98dnFtZ19aU0tFRD0+PT0+P0FBQ0ZGREJAPDcxKikoIyIiHSQdID5hdHl/iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wpJqsraqqq6ylo6CbmJKOi4qKioqKioqKiYqJiIiFfndwZltSRz81KyYjPEpXYmpweHp7e3p5dG9qXXKHioeSkJGSk5OSj42LioqKioqKioqKioqKioqKiomJioqKiomJiYiHh4iIh4aHh4eIh4eHh4eHiImKi4yOkZOWmZufoqWoqautraypqaWin5yZlZCPjIuKiIiIiImHh4eHiIeHh4mJiYmJiYmJioqKioqKioqJiYmKiYmIiIiHhIF8eHRtZV9YT0c+ODUzMC8xMjE0Njg5OTc3NDAqKiUkJSEfISYbLkdhdH2Ei5Wcp7C3vsfO1dng5uru8vTw6uPa0Me7r6Kaq6yqqaqqpaKfm5eSjouKioqKioqKiomKiYiIhX12b2RZUEU9MyklJ0NQX2pyeICCg4OCgHx3cWJwio+OlZGTlJSUkpCNjIqKioqKioqKioqKioqKioqJiYqKiomJiYmIh4eHh4aFhYWEhIODg4OEhYaHh4iKjI+Qk5aYmp2goaOkpaWkoqCdnJmXlJGOjIiHhYSEg4OEg4OEhYWGhoeIiIiJiYmJiYqKioqKioqKiYmJiomJiIiIhoN+eXRtZltXTkM5MS0rLCgnKisoKi8vMDAwLy8qJyAhHx8jJSQiMk9reH6EjZahp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6im6urqaioqaShnpqWko6LioqKioqKioqJiomIiIR8dWxiWE9EPDQpJSxKVWNyeX+Fh4mIh4aBfHhocI+Sk5eTlZWVlZSRjYyKioqKioqKioqKioqKioqKiYmKioqJiYiJiIaGhoWEg4KBgH9+fn5+gYGChIWGiYmNjpGTlZeZm5udnp+enZuZl5WUkpGOi4mDgoB+fX5+f36AgoKDg4WGh4eIiYmJiomKioqKioqKiomJiYqJiYiIh4WAe3ZxaGBWUEU6Mi4qKCYkJScnJiUnJygpKCcnJiUkIR8kJB8oPV5teX6Fj5ifq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtoJqrqaiop6ejoZ6alZGMioqKioqKioqKiIqJiIeEe3RsYFZORDwzKiYxTlhndYCFjZCRkZCOiYN8bnGUlJaYmJeXmJeUkY6MioqKioqKioqKioqKioqKiomJiYqJiYiIiIeGhIOCgX9+fXx6eXl6enx9f4CChIeIi4yQkpOUlZaXmJmamZiVlJCPjYuKiIWCf317eXh5eXl5e35/gYGEhYaHiImJioqKioqKioqKioqJiYmKiYmIiIaEf3h0bmNbUUk9My0qJiQkJiYjIyYnJSEjJCUjISEjJSclIiAnRGp2fIGJlZ6kqra8xMvR197i5unu8vT2+fvu6OHYzcS4rJ+cqqiop6WloqCcmZWRjIqKioqKioqKioiKiYiHg3pya2BWTUQ8NSwnM1JbbHuEi5GTlZWUkYyHgXRympeZmZuampqYlpKOjIqKioqKioqKioqKioqKioqJiYmJiYiIh4eFhIF/fnt6enh2dXR0dXZ4eXt+f4KFh4mLjY+QkJKSkpSUlZSTkpCNjYqIhoJ+e3t5d3R0dHR1c3V5e31/g4WFhoeJioqKioqKioqKioqKiYmJiomJiIiGgn12cGlfVUtBNy4pIyIjJDA7P0A9NCglIiAhIiIhIyMkHx81VW11fYWNl6Gnrbe/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKugm6qmp6ekpaGfm5iUkIyJioqKioqKioqIiomIh4N6cmxhV01FPzYuKjdVYHKBiZGWmZuamZeRi4Z5cZ2anpqdm5ubmpaSj4yKioqKioqKioqKioqKioqKiYmJiYmIh4eFg4F+e3l2dXJxb21sbW5vc3V3ent/goWIioyNjY2Ojo6QkJGQj46NjIqIhYJ9eXV0cnBtbWxtbm1wc3d5fICDhIWHiYqKioqKioqKioqKiomJiYqJiYiIhYJ7c21lWU9DOjEqIyEpNEhLTk9RVFRSPTAjHh8hISAnHydFZXd9fYiSm6GprrjDyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirn5uqpqampKShn5uYlI+MiYqKioqKioqKiIqJiIeCeXFsYldORkA4Lyo3V2N3hYyWnJ+hoaCdl5GLem+fnaKcnp2dnJqXko+MioqKioqKioqKioqKioqKiomJiYmJiIeHhIF+e3l1cnBraWdlZWZoaW9xdHd6fYGDh4iLjIyMjIyMjI2OjY2LioeGg4B8d3FubWxoZmVmZ2dpbXF1dnp/goSFh4mKioqKioqKioqKioqJiYmKiYmIiIWCenJrY1ZKPzYtJiAjNUpVVVtfYmRiZGZMMCIiJCIgIC1RdHx7hZGUnaSqtL7EytLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qpuZqKWmpaOkoaCcmJOPjIqKioqKioqKioiKioiGgXlzamJaUkhAOjMsPlpneoqVmaCipKSin5mTi4J1oqGfn6GdnJuZl5OQjIqKioqKioqKioqKioqKioqJi4uIh4iHhYN+fHlzcG1mZmVhX11eYGJqanB0fH57hoWHiYuLi4uLi4yLi4uLiIeHhH97d3JsaGhjYF5dXWBkZGptcHZ6foKFh4mKiomJiYqKioqKioqKiIiJiomJiIeFf3hwZV5TRz0zJyIfM0xRWF1jZmlsbm1ucVwmISIiIjdmgH6Ei5CYoKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mbmailpqWjpKGgnJiTj4yKioqKioqKioqIioqIhoF5cmtjW1JIQTszLz5caX6Ml5uhpKampKGblY2EdqKhoKCinp2bmpiUkI2KioqKioqKioqKioqKioqKiYuLiIeIh4WBfHl1b2tnYlxZVlZWWFteZGVscXl+enyFh4mLi4uKi4qKioqKiYeFhIF9eHRuaWVfWldVVFVXXF5laW1yd3yDhIaJioqJiYmKioqKioqKioiIiYqJiIiGg312bmNcUkU8MSgjKEFWW2JobnF0eHp6fHp2TCEcJk+AiIeHkpidpquyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epm5mnpaalo6ShoJyYk4+MioqKioqKioqKiYuKiIaBeXJrY1pSSUI7NDJAXWuAj5mdpKepqKeknZeQhXiko6GhoqCfnJyZlZCNioqKioqKioqKioqKioqKiomLi4iHiIaEfnh1cGlkYFpWUk5PUFBTWF9gaW10fYGBhYeJi4uKioqKiYmJiYiFg4F9eHJuaGJdWFRQT1BRVVpYX2ZqcHR4f4SGiIqKioqKioqKioqKioqJiImKiYiIhoJ7dGthWU9DOSwnIDBPX2Rscnl9gISGh4iMjXYoMmaNkI+RmaOkqK+3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZuZp6WmpaOjoaCcmJOPjIqKioqKioqKiomLi4iGgXlyamFbU0lDPDQzQV1tg5Gbn6apq6qppqCakYZ6pKOioqOhoJ6cmZaRjYqKioqKioqKioqKioqKioqJiomIiIeFgn12cWxkXllTS0ZDRkZHS1FdX2hsb3iAhIaIiouLioqKiIiJiYmHhYJ/enRuaWJcV1NOSUdHR0tQU1tiaHB1eHyEhomKi4qKioqKioqKioqKiYiJiYmIh4aBe3NpXldMQTksKSA4WWNqdHuCh4qOkpOWkZuTY4WanZidoqWnrra6wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmbmKekpaWjo6GgnJiTj4yKioqKioqKioqIi4qIhoF5cmpjWlNKRD83NUJcboOSnKGnqqyrqqegmpCHeaajoqKjoaCfnZqVkY6KioqKioqKioqKioqKioqKiYqJiIiHhH98dG1oX1lSS0lCQEBBQUZMV1piam91foOHiYuLi4qKiomJiYmJh4SCfnhxamRdVlFLRUA+P0JHTVBYXmVweXx/hYeKi4uLioqKioqKioqKiomIiYmIiIeFgXpzaV5WS0A5Li0kQl9pc3yEjJGVmp6go6OlpqKvpKGqrbCvsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apmpinpKWkoqOhoJyYk4+MioqKioqKioqKiIqKiIaCeXNrY11WTUhDPDlEXG2Ekpygpqmrq6mmoJqRhnmlpKOio6Kgn52blpGOioqKioqKioqKioqKioqKiomKiYiIhoJ9eXFpYllUTUQ+Ojk6PD5FTFddX2Zxdn6EiIqMjIuKioqJiYmKiYiEgXx1bWVgWE9KQj05ODk9Q0hPWV9kbnd8gIaIi42Mi4qKioqKioqKioqJiImJiIeGhYJ6cmheVUxBNS0qJUpjcHuCi5SZnqOoq6q1sbCvqK6zsLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZqYp6SlpKKjoaCcmJOPjIqKioqKioqKioeJioiGgnp0bmZfWVFLSEE/Rl5ug5GbnqWoqqmopJ6Yj4Z7p6eko6OioZ+dmpaRjoqKioqKioqKioqKioqKioqJiomIiIeBfXZtZF1UTUY9PDgzLSgmKi9MYmZpcXd+g4mLjI2Mi4qKiImJiomGg4B6cmlgWlJJQz04NDIyMTY5RVRhZ292fICHioyOjYyKioqKioqKioqKiYiJiYiHhoSAeXFnXFVLPzUuJydUaHeAipOdoqetsra4tb+8try8u8DCxcnLy9Ld297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqiamKekpaSio6GgnJiTj4yKioqKioqKioqHiYmIh4J6dG9oYltUT0tEQ0pfboOQmZ2kp6iop6Odl4+GfKinpaSloqGfnZqWkI2KioqKioqKioqKioqKioqKiYqIiIiHgXxzamBZUElCODEvKiMdHCEmKFRpbXZ7gYeKi42NjYuKioeHiImIhYJ/d29lXVZORj42MjIyNDU5PTNMYGtzeH2CiIqNj46MioqKioqKioqKiomIiYmIh4aEgHhwZltUS0A5MicsXWx9hZKcpqywt73AxMTEzMbExsXIzc3P19ra3ePm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYaBe3dvaWJdWVVOS0pNXXKBjZaaoaWnpqShnJeOhnirpaalo6Ohn52ZlZGNioqKioqKioqKioqKioqKiomIiYiIhX52cGdfV01GQDkvKyYcIyEmKShNaG95eoeJjo6Oj42Mi4qKioiIiYeCe3ZtZVxRSUM7NjIyNTk8PD49O2lwc31/iY2Pj5COjYuKioqKioqKioqKioqKiomGhH93b2ZbUktCPDMtKGZzf42WoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmGgXx3b2tkX11ZU09OUFxwfomTl56ipKOhnZiTi4V3q6anpqWjoZ+dmZWRjYqKioqKioqKioqKioqKioqJiYmIh4V9dm5lXlRLRD03MCwoHiQjKSspR2x0fX6KjY+PkJCPjIuKioqIiYiHgnt0bGNaT0hBOTYzNDg9QUFDQT1lc3mAhYmOj5CQj42LioqKioqKioqKioqKioqJhoR/d3BoXVRMRD40Lyxpd4KQm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJhoJ8eXJuZ2NhXllWVVNdbnuFj5SanqCfnpuVkYiCdqynqKelo6GfnZmVkY2KioqKioqKioqKioqKioqKiImJiIiEfHZsY1pRR0E7NDAtKiIlJywuLT90e4OFjZCQkZGRj46LioqKiImIhoF6c2phWE5FPzc0NDg/REZHSUhDYniBhYqKj5GRkZCOjImKioqKioqKioqKioqKiYaEgHdwaF5WT0ZCOjQya3qGk5+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYaCfXp1cGtoZWNfXVxVW2t4gouSlZibmpmXko6Gf3WtqKmnpaOhn52ZlZGNioqKioqKioqKioqKioqKioiJiIiIhHx0amFZT0VAOjMwLisnJikvMTI4e4GHi5CTk5OSkpCOi4qJioiIiIaAeXJoXlZMRD43NDU8RUpNTU9OSWGAh4iPjZKSk5KRjoyKioqKioqKioqKioqKiomGhIB4cGlfWVFKSD86OW17h5Shrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqJiYiGhH98eHNwbGpoZWJhV1lodn6IjZKUlpaVk4+Lg3xzrKupp6SjoZ+dmZWRjYqKioqKioqKioqKioqKioqIiYmIh4N7c2lgV05FPzo0Mi4uLScrMTQ4NYSEjI6TlZWVlZORj4yKiYqIiIiFfnhxaF5WS0U/OTQ4QUpPUFFUU05khouLkZKUlJaUko+NioqKioqKioqKioqKioqJhoR/d3FpYlxVT0xEQEBsfYeVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKiYmIh4R/fnp3dHJwbmxralpWZXJ6goiLjpCQj42Khn55cayrqqelo6GfnZmVkY2KioqKioqKioqKioqKioqKiIiJiIeCenNqX1dNRT87NTUvMDQqLTI1OTWJiZCPlpaWlpaVk46Mi4mKiIeIhH12b2ZdVEtGQTs3O0ZPVFVWWVdSaYuOj5OVlpaXlpOQjIqKioqKioqKioqKioqKiYaEf3hxa2RgWlVPSEZHbXyIlqGtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqJiIeEgX98e3l3d3V2dXRdU19sc3qBhIiKiYmIhIF6dG+srKqop6Ohn52ZlZGNioqKioqKioqKioqKioqKioeIiYeGgXhxaV5VTEQ/PDc5MDI7Li40ODc3j4yXkZmXmZiYl5SQjYuIioiHh4R8dW9lW1NLRkI8Nz5JVFdYWl5cVW+PkJWUmZmZmJeUkY2LioqKioqKioqKioqKiomGhIB4dG5nZGBZVk9NTmt5hZOfq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiouKiYiHhYF/fn18e3t7e3t8YFFbZ291fH+ChIWEg4B9dnFsrK2rqaijoZ+dmZWRjYqKioqKioqKioqKioqKioqHiImHhoF5cGhdVUxDPzw3PDM0QDEvNDk1OpKPm5KcmJqamZaUkI2LiIqIh4eEfHRuZFtSSkVCPDg+S1ZbW11hYFdxj5KalZqZmZmYlJCOi4qKioqKioqKioqKioqJhoSBeXRwamdjXVtVU1Fqd4KQnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJiIaEg39/fn+AgoOEhmZNUWBobXV1gYF5fnqBd3FuZrCrq6ikoqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BpYFVNR0A+Pjk3Oj03MjU5PTWZmZacmpienJmWk4+MiIiKiYiHhH11bWZcVE1GQkA8QVBYXV9kY2NeeJqanpucn52bl5WSjYuKioqKioqKioqJiYmIiIaEgXx1cW1rZmReW1xZaXOEj5ijrLfByNDX4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmJiYiGhIOEg4OEhIaIiYeFiI+TkJSaoKmurJ96dHFtamOvqqunpKKhn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwaWBVTUdCPz89MzZAPjU1Oj85nZuXnZ6enp2Zl5OPjIqIiomIh4R9dW1mXFVOR0NCP0RSW2BhZmZkYHqbnJ+dnqCdm5iVko6MioqKioqKioqKiYmJiYiGhIJ9d3NwbmppaWlkYWdwe4aWoa22wMjP2Nzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmIhoWEhoaHiIiKjI2MkJORj5CVmpefp62dbmlvaGVfrKmrqKWioZ+dm5WRjYqKioqKioqKioqKioqKioqIiYiGhYB3cGlgVk5IQ0FBRTk4Q0U8ODc+Op+fmp+gop+cmpaUkIyKiIqJiIeEfXVuZlxWT0lEREJHVl5jZWppZ2R9np6hnqChnpyYlpKPjYqKioqKioqKiomJiomIhoWDf3p3dHNxb2hua2tfaXSEjpmkrbe/yNHW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYmJiIeGhYeHiImLjY+Qk5OSkJCUl5icoqKjlGpoaWVhXaupqqekoqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BpYFZPSkVDQ0c+PUNFRkI6OzmfoZ2io6KgnpuXlJCNioiKiYiHhH11bmdeVk9KR0ZFSlhgZWhtbGtmf6CgoqGgoqCcmZeSkI2KioqKioqKioqJiYqJiIeFg4F9enl4d3Z1dHJ1Wmdye4iTnqavt8DK0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiImJiYiIh4eIiImLjY+RkouOkJKOjo+TlZqYnI9nZWFhXlusqaqlpKKhn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwaWBXUEtGRERGPj1ARUlIQ0A8n6GgpKSioZ+cmZWSjYuIiomIh4R9dW9nXlZQS0dIRktZYWdqb25uaIGhoaSgoqKgnpqXk4+MioqKioqKioqKiYmKiYmHhoSBf318fHx8d3uCglRbbnqCjZaeqLG7xczS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioiIiYmJiIiIioqLjo+Rk5SVko+OioiLj5CUkpmKXFxeXVtYqqmppaSioZ+dm5WRjYqKioqKioqKioqKioqKioqIiYiGhYB3cGliV1BMR0VFSz06QkVDQkRIQKKjoaalo6GfnZmVkY6KiIqJiIeEfXVwZ15WUEpISEdMWmFna3Bwb2uDoqKkoqOjoJ6bl5OQjYqKioqKioqKiomJioqJh4aFg4F/f4CBgX+Di4JYVWVveoSLlJ+osrvEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqIiIiJiYmJiYqKjI2PkpKUkY+MiouJiIaKjYiPglVbXlpXVaioqKSioqGfnZuVkY2KioqKioqKioqKioqKioqKiImIhoWAd3BqYldRS0dGRk1APUVHQ0BARkGkpKKlo6Khn52ZlZGNioiKiYiHhH11cGheVlBKSUdITVpiaGtxcXJthKOjpaSko6Gem5eTj42KioqKioqKiomJiYqKiYiGhoWDgoKDhYeKiomJj5GUl5KUk5CPjY2Ru8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiIiIiImJiYmJiIuMjpCSkpKTkYqFhYWEg4iBhn1UWVZXVFOop6eko6Khn52blZGNioqKioqKioqKioqKioqKioiJiIaFgHdwamJYUUtHRUVIQUBFSU1IPj09paeipKKgop+cmZWRjIqIiomIh4R9dXFoXlZQSklHSE1bY2lscnJzboako6akpKOhnpqXk4+MioqKioqKioqJiYmKiomIh4eGhYWFhoeJiJKPh5ePjJSUlZGOjIiGiLS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKi4uMjpCRkpSQkIyIgn99fH6AfoB1T1FVUlFQp6Smo6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0ZCREhIRkZDRKGjpqWkoaOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqHh4eGh4mLjI6RlJOUlpWUkZKRiYWCfoGrtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKioqLjI6PkZKSkI+LhYB7eXh3enh6cEpOUU9PTqWjpaKioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktGQkRISEdHQ0Sho6alpKGjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKh4eHh4iKjI2OkpSTlJSUkY2Mi4J+enR5prG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqKi4uNj5CQkY6Mh4B6dXJxcHJwc2lGSk5NTEuioaShoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLR0RFR0hISkREoaOmpaSho6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioeHiIiJi42OkZSVlJKSkY+MiYZ9d3JtcZ+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKioqLjI2Oj4+MiIN7dW9sa2hraWxkRUlOSkpJoaGkoaKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0dFRkdISUxERaGjpaWkoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqHh4iJioyOj5KVlpWTko+MiISBeHFrZmqYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomKi4uMjIyLiIN9dm9qZmRiZWNmYENJTEhJSaGhpKKioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktIRUZHSEpNRUWho6WkpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIiJiouNjo+SlZaUk5KNioF+eXBqY1xjkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqJiYqLi4uKioSAeXFrZWBfW19eYFxARUhISEigoKSio6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLSEZHSEhJTEZGoqOlpKSio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIioqMjY6PkpWVlJKQioV9eHRqZF1XXo2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiImKioqKiYeEfndvZ2JdW1hcW11YPUNGR0dHn5+joaKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTEhGR0lISUtGRqKjpaSkoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYqLjI2OjpKTk5GPjIV/eXNuZF5WUViJlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKioiJioqKiIeGg353bmZgW1hYXFpeWD5DRUZGRp+foqChoaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxIRkdJSEhJR0aio6WkpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmKi4yNjY6SkpKQjYmCe3JtZ11XTklRhZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqIiIiJiYiHhoF7dG1lXllXWFlbWVdCQ0ZDRkWgoKKhoaGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKS0pHSEtKSEVKoKWkpaOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIiImKi4uLjo6Oi4iDfHVuZ2BXUEhDTIGPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiYmJiYmJh4aCfHVuZmBbWlhZW1lWQUJFQ0ZFoKCioaGhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS0tKSUlNTUtHS6ClpKWjpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqIiIiJiYqKi42NjImEf3dwaGBaUUpCPUeAjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomJiYqJiYeGhH11b2dgW1pYWVtYVkBCRENGRZ+goqGhoaCfnZqUkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpMS0lMUFFPS06hpKSlo6SjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIiIiImJiYmLi4mFgHpxamFaU0tEPDlCfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqKiYmKiYmHhoN8dG1mXlpZWFlbWVZAQkNCRUSfoKKhoaGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKTExLTlRWVFBRoqSkpKOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiIiIiIiIiIiYmGgn13bmVfVlBJQjs4QXuJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiomJiomIh4WDfHVuZl9aWVhZW1lWQUJEQkVEn6CioaGhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSUxNTlJYWlhVVaOko6SjpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYmJiYmJiYiIhYF7dW1kXVVPR0E6N0F6iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqKioqKioqKiomJiYmIiIaEg311bmhgW1lXV1lYVkFDREFFRJ+goqGhoaCfnZqUkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRklMT1JXW11aV1alpKOko6SjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISl5kam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmJiYmJiYmIiIaAe3VsZFxTTUY/ODZAeoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKioqKioqKioqJiYiJiIeFhIF7c2xlXVhXVVZYV1Q/QkRBREOen6KhoqGgn52alJCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZHTFFUWl5eW1lXpaSjpaOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISEpeZGpucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKiomJiYmJiYmJiomGgXt0amNcU01FPzc1QHqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKioqKioqKioqKiYiIiIiHhYN+eHBpYVpVVFRUVlZTPkFDQURDnp+ioaKhoJ+dmpSQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGRkxRVltgX1pZV6Wko6Wjo6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhKXmRqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiYmJioqKioqJhoF7c2piXVVNR0A5NkF7iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJioqKioqJiYeIiIWFhYOAfHRrYlpTT09PU09TUUJCRENDQpygop+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpLUVhdXl1fWlijpaSio6KjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYmJiIiIiIiKh4OAeXJpY1tUTERANjJBe4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmKioqJiYmHh4aEgoF/e3dwZV1UTElISExKT05CREZCQ0GcoKKfo6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTFFZXV1dXlpYo6WkoqOjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioiJiYiHh4eHiIaDfnhwZ2BYUElBPTQxQHuImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJioqKiYiIhYWDgH59eHVvZ11UTEZBQkJFRUlKQkJDQ0NBm5+hn6KhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS01TWV1dXV5aWKOlpKKjo6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXWNqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJiIiGh4aGhIWCf3lzamFbUktEPTkxLz96iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiYqKiYiHh4SEgX57eXVvZl9UTEU/Ozw7Pj9DR0JCQ0RFQ5udoJ+ioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRktNUllfX19gWVijpaSio6OjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiYiHhoaFg4KAfXhzbGNZUkxFPjg0LCs7eoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiYmKiYmIhoWCgn97eHVwaWFZTEQ9ODU2Mzc5PkdJSUlISUabnKCfoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTlRbYGBhYllXo6WkoqSjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKiomIhoWEhIB/e3hzbWVbUktEPTcxLicnOHuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5qZpaWmo6OioJ2blpOOjIqKioqKioqKiomJiYmJh4WEgX98dnRvaWJbUUQ8NTEtLi8yNzpGTU5PTk9KnZyfnqKhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGS05WXWJjYmNZV6OlpaKkpKOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXWNqbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqKioqKioqJh4WEg4B9enh0bWZeU0pEOzYxKykjJDZ9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaeamaWlpqOjoqCdm5aTjoyKioqKioqKioqJiImJiYeFg399eHFuaWFZUEY7My4rKCgsLjQ3RlFTVVVVTp6boJ6ioaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRk5RWGBkZGJiWVejpaWjpKSjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSl1jam5wcnFshaWkpqKioqCempeTj42KioqKioqKioqKioqKioqKiIeDgoB9eXRybWVdVEtBPDMvKyclISM2f42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnmpmlpaajo6KgnZuWk46MioqKioqKioqKiIiJiYmGhIN+e3Vva2RbU0c+MyspJyYmJigvM0ZVWVpZWVGfm5+eoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZPUlliZWRhYVlXo6Wlo6Sko6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpdY2pucHJxbIWlpKaioqKgnpqXk4+NioqKioqKioqKioqKioqKioeGgoB+e3VybGdfVk1DOjUuKyckIyAkN4GOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKioqKiYeHh4N+fXVvamRdU0lEOzAsJiEhJSUrLjJFXmdiYmFel5qfn6KhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSFNbX2FmZGBaVqilo6ahoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEpKXGJpbnBycWyFpaSmoqKioJ6al5OPjYqKioqKioqKiomJioqKiIeHhYN/eHZya2ddVk5DOjQuJiUiIh8jIzaEk6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqJiomHiIeCfXtybGdgWE5DMywmIyIgISUeJCYtRGBqZWZkX5iZoJ+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpTWVxeY2FdWFSmpKOmoaOjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSlxiaW5wcXFshaWkpqKioqCempeTj42KioqKioqKioqJiYqKioiHhoOAfHZ0bmdfVUxEOTItKSYlIiMhIiI2h5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmmZinpaWkoqOgnZuWk46MioqKioqKioqKiYqJh4aGgX14b2lhWVBGOzAqJCMkISIlIiMkLkdjbGhraGGYmp+fo6Ggn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZKUVZYW2BeWVNRpKOipqGjo6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUpcYmlucHFxbIWlpKaioqKgnpqXk4+NioqKioqKioqKiYmKioqIh4WCfnlzbmlhXFJHPDIpJSMhISAjISIiOIyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKiomKiYiGhYF7dW1kXVJJPjQoJSIjJSMjJB0gJTFKZG9sbGhimJqfn6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSE5TV1teWlVPTqOjoqaho6OgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElKXGJpbm9xcWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqJiYqJh4aDgHx2bmpiWVJIPTQtKCYlJCMhJSEhJDyQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqJiomIh4R/eXRqYVhORDswKCktNDo9P0FJSkxRXWdraWlnYZmboJ+joaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkhNU1ZbXFdRTU6jo6KmoaSjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVthaG5vcXFshaWkpqKioqCempeTj42KioqKioqKioqKiYmKiYeGhH96dGtmXlRHPzIrJyIgISEhICMhIiU8laOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmmZinpaWkoqOgnZuWk46MioqKioqKioqKiIqJiIeDfnhyaV5WS0E4LSgtNkBITVBTXV5gYmZnZ2dmZWCZmqCeoqGgn52alZCNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTlBUWFlUT09PpKOipqKko6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUlbYWhtb3FxbIWlpKaioqKgnpqXk4+NioqKioqKioqKiomJiYmGhYN+eXJpY1lNRTstJyYlIyUiJCIlISMkOZyptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0ppmYp6WlpKKjoJ2blpOOjIqKioqKioqKioiJiYiHhH13cWdcU0pBNywoMD1IUFVaXmNkZmpramlpZmVhmZqgn6OhoJ+dmpWQjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTE1NTlJUVFNSUaWko6WhpaOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJW2FobW9xcWyFpaSmoqKioJ6al5OPjYqKioqKioqKioqJiYmJhoWCfHZvZl9USj00KSkyODxBR09UXGJtcISjsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKaZmKelpaSio6Cdm5aTjoyKioqKioqKioqHiYmHhoN9dm9kW1FJQDYsJTBATldgZmpubG1xcm9tbGhlYJmaoKCjoaCfnZqVkI2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxLSEpOU1dZU1OopaOloaWjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhISVthaG1vcXFshaWkpqKioqCempeTj42KioqKioqKioqKiYmJiIaFgHp0bWReU0c6MSgrO0dPVl5ob3mBjZChqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIeCe3NtYllQRz4zKSMxSlFcY21zd3t+f39/fHhwZ2Cbn6KeoaKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZHRklQV1lYV1RSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISklbYGdtb3Jwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhIF5cmtjW1BFODEmJEVQUl5mcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiHgntzbWJYUEY+NCknNUxUXmVwdnp+gIGDhYOBe3JooKGjoKOioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSElMU1laWVdUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJW2BnbW9xcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoSCeHJqYlpORDgxJyVJVVhlb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeYmKWlpaKjoqCdm5aTjoyKioqKioqKioqIiYqIh4J7cmxiWE9GPTQqHy9KVGBmcHeAhIeIiYmHhH94bKKgo6GkoqGfnZuVkY2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkpKUFhbW1hXVFKho6WnpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVpgZ21vcXBrhaSkpqKjoqCempeTj42KioqKioqKioqKioqKiYaEgXhwamBYTUI3MSgmT1xhbniBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIaCenJsYVdPRj00KiUxR0xXX212fYOIjI6OjIiAeW+ioaKgoqKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLTVFYW1pYWFRSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUlaYGdsb3Fwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhIB4b2hfVkxANzAnJlRiaHV/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiGgXpya2BXT0Y/Ni0pOFJXXl9kaHl9goSGhoWCgHlvpaKjoKOioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGTE1RVVlZV1hUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSElJWl9mbG9xcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoSAdm5nXlVKQDcvJyVZZm57h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeYmKWlpaKjoqCdm5aTjoyKioqKioqKioqIiYqIhoF6cWthV1BHPzcuJztcZm1tbnFydXd4ent7eXZuZ6GjpKGmoqGfnZuVkY2KioqKioqKioqKioqKioqKiYqJhoWAd29nYFhSTEdFRkxLTVNYWFdYVFKho6WnpKKjoJ2ZlZGNioiJiIiHhX12cGdeV1FLSUhJSVpfZmxucXBrhaSkpqKjoqCempeTj42KioqKioqKioqKioqKiYaEf3ZuZ11VS0A5MCglXmt0gI2Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmJilpaWio6KgnZuWk46MioqKioqKioqKiImKiIaBeXFsYlhRSEE5MS0+XGVxeIOKiImHgn15c25wZmCeo6SiqaKhn52blZGNioqKioqKioqKioqKioqKiomKiYaFgHdvZ2BYUkxHRUZLSkxTV1hXV1RSoaOlp6Sio6CdmZWRjYqIiYiIh4V9dnBnXldRS0lISUhaX2ZsbnFwa4WkpKaio6KgnpqXk4+NioqKioqKioqKioqKiomGhH92bmdeVkxBOzEqJmRxe4eTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5iYpaWloqOioJ2blpOOjIqKioqKioqKioiJioiGgXlwbWJYUUlDOzEsQGFteH2FipGVl5WUj4iDdmpioaWjoKiioZ+dm5WRjYqKioqKioqKioqKioqKioqJiomGhYB3b2dgWFJMR0VGSklMUllZWFZUUqGjpaekoqOgnZmVkY2KiImIiIeFfXZwZ15XUUtJSEhIWl9mbG5wcGuFpKSmoqOioJ6al5OPjYqKioqKioqKioqKioqJhoR/dm1nX1ZNQzwzKyhndX+Mm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6WamKilpaSipaCem5eTj4yKiYmJiYmJiYmHiImHhYF4cmphWVJKQzw1MURjbXmCiY6XmJmXmJeSjIR9dKOlpaSko6GfnJiUkIyLi4qKioqKiomJiYmJiYmJiImJhoR/eHBoYlhSTEdHSEpLTFBWWFhVVFOjpaWnpKKjoZ2ZlZGNi4mKiomJhn52b2heVlFMSklJSVlfZWxwcnBshKWkp6SkoaCempeTjoyKioqKioqKioqJi4uLioeEfnZuZl1VTEM+NS8oa3aDkZ2qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmZenpKWkoqOhn5yXlJCNi4mJiYmJiYmJh4mKiIWBeXFrYVpTS0U/NzFFZW98hIySmJqamZmZk42Hf3WkpqWjpKSjoJ2ZlpGOiomJiIiIiImJiYmJiYmJiYiKiYeFf3dwaWJZUUxIR0hJSkxQVllZVlRToqWmpqOhoqGdmZWRjoqJioqJiIV+d3BpX1dRTEpKSkpaX2VscHJva4OkpaakpKKhnpuXlI+MiYmJiYmJiYmIiImJiYiFg392bmdfVk5FPjYwKmx4hZagrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZeWpqSkpKKjoZ6al5OQjIqJiYmJiYmJiYeIiIeFgHhxamFZU0xGQDgyRmdxf4iQlpqcnZycm5WPiYF3paalo6Sko6CdmZaRjoqJiYiIiIiIiYmJiYmJiYmHiImGg392b2hhWFFLR0VGSUpMT1VZWVdTUqGkpaajoaKgnZmVkIyKiImJiIeFfnZwaF5XUUxJSEtKWl9lbHBzb2qEpKOmo6SioJ6bmJOPjYmJiYmJiYmJiYmJioqJhYN9dG5nXlZPRj85NC5we4mapbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WXlaakpaSio6CempeTj4yKiYmJiYmJiYmHiIiHhIB4cGphWVJLRj83M0doc4GKkpecnqCfnpyXkYuCeaanpaSlpKKfnZiWkI2KiYmIiIiJiYmJiYmJiYmJh4iIhoR/dm5oYVhQSkZFRkpLTE9VWFlXU1KhpKSmo6GhnpuXlI+LiIiIiYiHhX12cGddVk9KSEhLS1pfZWxwc29rhKSkpqSjoqGdm5aSjouJiYmJiYmJiYiJiYqKiYaEfXRtZl1XTkZBOzcxcn6Nnqm2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOlmZampKWkoqShn5yYlI+MiomJiYmJiYmJiImKiIWBeXJqYVpTS0U/NzRIaXSCipKXnaCioaCemJOLgnmmp6WkpqOin5yYlJCNiYiIh4eHh4iJiYmJiYmJiYmKiYeFgHdwaGFXUUtHRkdKS0xQVVhYVVRToqSkpaOhoqCcmJSQjImJioqJiIV+dnBnXldRTElISkpaX2VscHJva4OjpKWjo6KinpuYk4+LiIiIiIiIiIiIiImJiYiFgn91bmdeVk9HQz04MnSAj6GruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZiWpqSlo6GjoqCbmJSPjImJiYmJiYmJiYmKiomGgXpya2JbVEtFPzczSGl0gouSl5+ipKKgnpmUi4J4pqalo6WjoZ+cmJWQjYmJiIiHiIiIiYmJiYmJiYmJiomIhX94cGlhWVFMSEhJSktNUFZYWFVVU6GjpKSioaKfnJiVkI2KiYqJiIiFfnZvaF1XUUxKSklJWV9lbHBycGuDo6OloqKjoZ+bl5OPi4iIiIiIiIiIiYmJioqIhoSAdm5nX1dQSEI8ODJ1gpGhrbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6WYlaWio6KfoZ+dmJSQjIiFhoaGhoaGhoaEhYaEgX12b2hfWFFJRD03MkdodIOMlJmgo6SioJ6alYyDeKWlo6OjoZ+dmZaSjYuHhoaFhYWGhoaGhoaGhoaGhYaGg4F8c21mX1VPSkZFRkdJTFFXWllWVFOhoqKkoJ+fnZqWko6Kh4SGhYWEgXpzbGRbVE5JR0hHR1lfZWxvcW9rg6KipKCgoJ+bmJSPi4iGhoaGhoaGhoaGh4eHhoSBe3NrZFxVTkY/OTUxdoKRoq67x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOll5WkoaKgnp+bmZSPjIeDgH9/f39/f39/f4CAfn14cWlkW1NNRkE8NTFGaHWDjZWaoKOlop+empaNhHilpKKhoZ2bmZWTjoqHf39+fn5+fn5/f39/f39/f3+AgH97d29nYlpRS0ZDQkNFSEtRWFtaV1NSoKGhop+dm5mWko6KhoOAgIB/fnx1bmdgVk9KRkNERUZYX2Zsb3FuaoKhoaKenpyal5OQi4aEfn5+fn5+fn5+fn+AgH98enVtZV5WUUtCPTcyL3aDk6OvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzppuYn5mbnJuWk5GMiIN+eXZ3d3d3d3d3d3h2dnVzb2hjXFVMRUE7NTArRmp1gIqWnaGkpqWkopyWjoN3oJ+bm5iWlJCOi4eBfXp4d3d4eHh3eHh4eHh4eHh4d3h3dG9nYldQS0ZBPj5AQEVLU1VYW1ZVUJyanJyXl5WRjIiEgHt4eHZ1dnZya2ZdVk9JREA/QD5DVGJkbm5xc2l+m5qXm5eWko+MiYWAfHZ2dXV1dXV1d3d4eHd3dHJrZl1WUEpCPDU3Ky50h5KksLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaealZuVlpWUjomHgnx3cmxpaWlpaWlpaWlqaWhoZWFbVVJLRD04NDArKURqdoKLlZuhpKalpKKclpCEd5ublpWSkI2Hg356c29ramlpaWppaWlpaWlpaWlpaWloaWdiW1ZOSEI9OjY3OT5ES1NVWFtWVE+Wk5SUkZCNiIJ9eXRvbGloZ2hoZF5aVExGQT05ODk5P1VkZXBvcnNofZeWk5aSjoqFgX13cm5ramppaWlpamlpaWpqaWdlYlxUTEdBOzUwMygrdYiSpLC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapmZKXkI+MiYR/e3dwamRfXFxcXFxcXFxcXVxcW1pUTklGQDgzMCwpJiRCa3eDi5WaoqSlpaSinZeRhHeVlpCNioiEfnhzbGZgXl1bW1xcXFtcXFxcXFxcXFxbW1xZVU5KQj04NDEvMDM5RExTVVhcVlZRkIyOjYmIg353cm1oYl9bWlpbW1hSTkhBOzc0MTEzNDlXZmdycXNzanuRkIyNiIN/enRwa2VhYF9fXl5eXl9dXFxeXl1ZWFVPR0E8NzEtKSsjKHWIk6awvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qpmQkouIg395c29pY19aVlNSUlJSUlJSUlJSUlFQS0VBOzcwLCooJSQhQmt4g4yWm6Klpqalop6YkYV4kJKLhoF9eHJtZ2JbV1RTUlJSU1JSUlJSUlJSUlJSUlJQT0tGQjk1MC4rKysuM0NNVFZZXFhYVIqHiIaAf3dybGdiXVhVUlFRUVBOSEM9ODMwLiwtLi80WmhocnJ0dW58jIqFg3x5dG9pZWBaVlRUU1NSUlNTUlJTU1JSUE5IRD03My8sKSQmHyR3iJWmsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKyckI6Fgnx1bmdiXFZRTUpHRUVFRUVFRUVGRkZFRD86ODIvKycmJiQjIEJteoSOmZ6kpqenpqOfmZCFe4uMhH95cW1nYFtVT0xIR0VFRkZGRUVFRUVFRUVFRkZFREI+OjgxLiopKCYnKi9EUFZYWl5ZV1aCfn98dXJrZl9aVE9LSEZFRkZFQj05NTAsKykoKSorL11qaXR0dndxeoWCfnpzbWljXFdRTEhHRkZFRUVFRkdGRUVHRkRDPDkzLy0qKCUhJR8ieoqWp7K/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquoI6HfHlza2NeWVFKRUA9PDo6Ojo6Ojo6Ozs6Ojk1MzAqKCUjIyMjIiFEcHyGkJqfpaioqKekoJuRh32GhXx1b2djW1VQSURAPDs6Ojs7Ozo6Ojo6Ojo6Ojw7Ozk3NDEvKSYlJiUjJCYsRFNZWl1gXFpZe3h4cmpmYlxWT0lEPjw8Ozs7OTczMSwpJiUmJSQmKStibW13d3p6dXd7eXVxamVgWVFLRT89Ojo5OTk5OTk8Ojo6Ozs5ODEuKygnJSMiICUfI36Omqm1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKSNgHBuZ2BYVE9HPzk1NDIwMDAwMDAwMDAxMTAvLCsqJiMjIiMhIiEgRXR/iZOcoKeoqamnpaCclIp+fntwamRdWFBKQz04NDIxMDAwMTEwLy8vLy8vLy8xMTAvLiwqKSUjIiQjISEjKUZWW11fY19eXHVyb2pgXVVQSUM+OjQxMTAvMDAuLConJCMkJCMjIyYoaHNxfX1/f3l0cW1pZV9aVU1GQDs1MTEwMC8vLy8vMC8vMDEwLy4pJyUkIyMiISAlISWDkZ2tt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKmi3poZWFZUkZCOjMvLCopKCgoKCgoKCgoKCgnJSUjIiQjIiIjIyMjIEZ2g4yUnJ+nqaqpqKahnZaMfnl1aGJcUUxFPjg0LispKCcnJygnJycnJycnJycnJicnJiUkIyMkIiMkJCEhIylHWF1eYWRgXltwaWZgWFRIRDw3My8rKScnJicnJiUlJSMiJSUjIyMlJmt3doGBgoZ+dGpjYFxWTkhCOzUxLCkqKikpKCkpKScnJicnJyYlJiUkIyMkIyIgJSImh5SgsLjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2q4puYltZUEI+ODAqJyUkIyYmJiYmJiYmJSQkIyMjIyMlJCQlIyEhJCBIe4SOlpumqKutrKuppJ+XkIp0aWFaTUtDOTMwLCopKCcnJiYnJygmJiYlJSUlJSQkJCQjIyIiJSIiIyEeICQjS1tlZ2NsZGddZ1xbUlBHPjozLCgnJiQmJiUkJCMiIiEhISEhISEhIidydYOCh4iLg3BhXlhPTUI8NC8rKSgnJSUlJSUlJSUlJSUlJSUlJSMiISEhIiMjHCEgIouXprS9xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7Eua6IZ1pRSkM7NDErJyYlJCQkJCQjIiIhISQkIyIiIiIiIyAfHyEjIiEhSn6HkZufpqmsra2sqqWgmpGIbl9XUEQ/Ni0pJSIgICMjIyMjIyMjIyMjIiIjIyMiIiIiISEhISEhIiQlJCIgJUxdZGhiZmlwYmRVT0ZGQDMvKyYlJCUkIyMjIyMjIyMhISEhISIiIiUkdHuHjIyLjYZuV1FORUE6NS4pJyclJSMjIyMjIyMjIyMjIyMjIyMhISAgIB8fHyEiIB+TnKm2wMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL23hlxRS0A0KiwoJCMjIiIgIiIiIiMjIyMhISEhISIjIx4hJCIfHyEjIE2Ai5Scoairra+urqyoo5+Vh2lWTUY6NS4oJSUjIyQiIiIiIiIiIiMiIiEhIiIjIiIiIiIiIiIhJCQhICAhIyhSaGZpaWt5T0pTS0o/OjMsKickIyMjIiIiIiIhISEhIiIiIiIiIiMhJoCJjJOTlpWQdFRLSEA3Mi4nIyIiIiEhISEhISEhISIiIiIiIiIiIiMjJCQkJCQjIiAhl6KvuMTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBuIdbTEU8MSsmIyEhIiQlJCMiIiIiIiIhJCQjIyMjIyQhHh0hJyUiIChShJCXnKavqq2urq6sqKOZkINpVExEOjIrJiQjIiMjIiIiISEiIiIhISAgICEhIiEhISEhISIiIiIgISMjIyQpSWVrenlaSEVFT0hHOTIpJiUjISEhIiIjIyQkJCQkJSMkJCQjIyMjIi99j5WZmJqakHBOPjw3MiomIyEiIyMiIiIiIiIiIiIjIyMjIyMjIyUlJSQjIyMkJCAhLpSptLjIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxca0pqCajoV/eHNuaGViYF5ZV1VUUlFOTUdFQ0A+Ozo5ODhBVGFmbXV5gI2Pmp+ipaqtrq6trKijn5qUhnl2cWtpZF1aWFRSU1BPTUxMTU9QTU1MTExMTU1LS0tLS0xNTlBUWFxdWl1nYmt5aVRPSUxNSktCRD5DQkJCQkNERUZHSUtNT1FTVldbXmRqcHZ7f4eFl5aeoaKjoqOclZSSjIaEgHl0cG1rZ2hoaGhoaGhoaGhoaGhoaGhkZmlscHV6foeOk5KusbvHzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1MrEu7Con5aPi4SAenZzcG1rZ2RhX15cWVZVVFFNSkdFQ0VCQkRFTmZ/gIWMj5yhpqirra6trayoo56Yk46Cfnd1cm1nY2FdWltaWlhXV1haWllZWVlYWFhYVFNTVFVWV1hZW1tdY2Roc3RZUlFOUFBTUlNPR0xGTVFMTU5OTk9SU1VYW11fYmVnaGxyd3yBhoqSlpmeqamoqKqnop2al5WTjYqFgX99enh3d3d3d3d3d3Z2dnZ2dnZ2d3l6fH6CiIyQlZ2mrrjByNHX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQzMG3sq+mmpOOioWAfXl1c3NwbWxraWZkXVxZVlNRT05QTUpJR0hMUGV/lpmcm6Onra6vrq2sqKSjmpWViYV8fXZybWtoZmRmYWFgYGBgYWFgYWFhYF9eXVxcXFxdX2FiXmJjanVvWUpSSE5bW1ZVWEtSU1FXUFRWVldYWFhZW11gY2ZoaWtucXl9g4eLkJWZnaOpr7GysbSxsK6rqKWhnpiUkIuJh4WCgoKCgoKCgoKCgoKCgoKCgoSGiYuNkZaaoKKqsbe/yMzW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1c3Fvbu3rqemnJmVkpCMiIWFgn98e3h0cXBvbGhkYV9eVllYVVRXVlRUXWFoiaa2sq2vr66trKijpJiSlYyIgIN8eHRyb2tqbGtsbW1tbWxramtra2ppZ2Zra2trbG5wcXl8bFVNT09TVldWWVtaWVlVXFpXX1pgZWFiZGZoam1wcHR4enx/g4aFiY6TlpugpKupsbe2vrm6vb67t7Ozr6ympJ+dmpiWlZSUlJSUlJSUlpaWlpaWlpaSlZiZmp2hpaytsrXDxs7P2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOjuL62tLKppKSemJWSjYiHhYJ+e3l5eHZ3dnd3d3h6e3h4dG5wdHZxdXR5goFzYFVSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsbHyDgouYqru2rKGbmJSQjYaEgYB+fXx8enp8fn9/fn6AhYaHiIuHgXdsYVxcWVlaW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWRscXFydH+PioN9f4eNj5CenJydnJiXmpuamJaSjIR/eXVuZmJlY2BmYFxfYF1bW1xcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHNucG1rbWtrcXZybnB1eHl4dnR1eHZxcHRzc3N1dnRuamtraWhoampnYF9gYmFcV1VZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357fHp0cHFxbWppaWhnZ2hoaW5sbXBuaGdqcG5sa2toZGFaXmJmaGlmYmBeXFtZWFhZXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhH6BgXx7eXRubm1saGVlZmdjYWFiYFxaXGNgXlxbWllXV1hZW11gYmNbW15gYmRlZmVmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiLi4iCfXx7end3dG9ramppaWdmZWRiYWFgYF9fX2FhYV9gYWJiYWFgZmZmZ2hrbW9wcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWlZORkI6MiYeAgH57eXl2cnFwbmxsbGtpbGxtbGxra2tqamprbG1ub3Bvb29wcXJxeXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
- //////////////////////7+/v7+/v7+///+/v7+/v7////+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f39/f39/f39/fz8/Pz8+vr6+vn5+fn4+Pj4+fn5+fn5+fn5+fn5+fn5+vr6+vr6+vr7+/v7+/v7+/z8/P39/P39/f3+/v7+/v7+/v7////////////////////////+/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v7+/v7+/v79/f39/v7+/f39/f39/f39/f39/f39/f39/f39/Pz8/f39/f38/Pv7+/v6+vn5+fj49/f39/f39/f39/f29vb29vb29vf39/f39/j4+Pj4+Pj4+fn6+vr6+/v7/Pv8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v///////////v7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/f39/f39/Pz8/Pz8/Pz8/Pz7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+/r6+vn5+Pj39/f29vX19fT09PT09PT08/Pz8/Pz8/Pz8/P09PT09PX19fX19vb29/j4+Pn5+vr6+vr7+/z8/Pz8/P39/f39/f39/f3+/v7///////////7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7+/v79/f38/f38/Pz7+/v7+/v7+/r6+vr6+vv7+/v7+/v8/Pz8/Pz8/Pz7+/v7+/r5+fj39/b29fX19PPz8/Ly8fHx8fHx8fDw8PDw8PDw8PDx8fHx8fHy8vPz8/T09PX19vb39/j4+fn5+vr7+/z7/Pz8/P39/f39/f39/f3+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/v7+/v39/Pz8+/z8/Pv7+vr6+vr6+fn5+fn5+fn5+fr6+vv7+/v7/Pz8+/v7+/v6+vr5+Pj39vX09PPz8vLx8PDw7u7u7u7t7e3t7e3t7e3t7e7u7u7u7u/v8PDw8fHy8vLz8/P09fX29vf3+Pn5+vr7+vv7+/z8/f38/P39/f39/v39/f7+/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f39/f38/Pv7+vr7+vr6+fj4+Pf39/f39/b29vb39/f4+Pj5+fn5+vr6+vr6+vn5+fj49/f29fTz8vHw8O/u7e3s7Ovq6urq6enp6enp6enp6enq6urq6urr6+zs7e3u7u/v7/Dw8fLy8/P19fb29/j4+fn5+fr6+/v7+/v7/Pz8/f38/P39/f7+/v7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f39/Pz8+/v6+vn5+Pj49/b29fX09PT09PTz8/Pz9PT19fX19vb39/f4+Pj4+Pf39vb29vX08/Lx8O/u7Ozr6+rp6Ojn5ubm5eXk5OTk5OTk5OTk5eXl5eXl5ubn6Ojp6erq6+vs7O3u7+/w8vLz8/T19vb29vf3+Pn5+fn5+vr6+/v7/Pz8/P39/v79/f7+/v7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+/v6+vn4+Pf29vX09PPz8vLy8vLx8fHx8fLy8vPz8/T09fX29vb39vb19fX09PTz8/Lw7+7t7Orq6ejn5ubl5OTj4+Li4eHg4ODg4ODg4OHh4eHi4uLi5OTk5ebm5+fp6err7Ozt7e/w8PHy8/T09PT19fb39/j4+Pj5+fr6+vv7/Pz9/f7+/f39/f7+/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f38/Pz8+/r5+Pj49/b29/f49/b39u3t7Ono6enq6/Hu8e7x7fTy8/T09fX19fX19fT08/Ly8u7p5+jq6OTq6ejn5uXk5OPi4eDd3dzc2NjY19bW1tTW1tnb3eDg4eLf4Ofl5unn4d3h4+bo6eXq6+3u7u/w8fHx8vP09fX29fb39/f4+fr6+vv7+/z8/Pz8/f39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v79/f38/Pz8+/r5+Pf39vX08vLu7erq6urx7+3u7+/s6enq5ejo7enq8PDx8vLz8/Ly8vLy8fDw7/Dw8O3p6ebj397d3NrZ2NfY2NfV1NPS0NnZ2NjY2drb1tfX2tvc3t/X1dXY19nc3Obj5+jn6ejk5+jq6uvs7e7u7u/w8fLz8/P09fb29vf4+Pn5+vr7+/v8/Pz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/f38/Pz7+/r5+Pb19fTz8vLx7Orm5eTj5OPi4uLj5OTp6efq5urp6uzs7e7v7+/v7+/v7u7t7Ovo7vHs6ebl4N3d29rY1tXV19bW1dLR0M3S0dDNzc7NzszMzMrKysfH2dra19bY1tjd4eLh3d/h4+Lk5ebn5+nq6urr7O3u7/Dw8fPz8/T19vb39/j5+fr6+/z8/P39/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/vz8/Pz7+vn5+Pf19PPy8e/u7+7u7+7t7Ojp5+fn5+jq4ODl6ejt8PPo6err6+zs7Ozs7Ovr6uno3ejr6ejq6+fp6ejn5eTj4+Pj4+Dg39/e09DPzs3MzMzV1tXU1dPS0s/R0c7Q0MzMys7Q1M/S2uHe3+Hi4uPl5ufn6Onq6+zt7e7w8fHy8/T19fb29/j5+fv7+/z9/f3+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v38/Pz7+vn49/f29PPy8O7t6+ro5+Xk4uHi39/f4+Pf3Nza3N/j5eXk5eXm5+jp6enp6eno6Ofm5fH7/vj1+fnx9vb29vX19PTz8/P08vLz8+zt7/Hy8/Pz6Orr7vL09vfx7u3o6Obh4dXc1trR0NXd2tvc3t7f4eLj5OXm5+jp6urr7e7v7/Hy8/T09ff4+fn6+vv7/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39+/v7+/r49vb29fPx7+7s6unm4d/d29jX1tfZ2NTW2+LU2NrV19LT1+Dh4uPk5eXl5OTk5OPj4uHl9fz4+////fj4+Pj5+fn5+vv6+/z7/Pz//////vv29Pn49vTy7u3s+Ozt6efr6ezk6d7m2c/P1tTV19jZ2tzd3t/g4ePk5ebn6Orr7O3u8PHy8/T29/j4+fr6+/z9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv7+/r59/b09PPw7u3r6efj4+Xn6urq5/r9+fHm4+rw+Pjx4+TY0tPb29ze39/g4N/f39/e3d3c4PT//Pr///38/P39/v7///v8/P38/f7+/f3+//39/fv//////v79/fnj4t/Z3Nna3+DS4NPJxtDOz9HS09TW19na29zd3+Dg4+Tm5+jq6+3v8PHy9PX29/n5+vv8/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f37+/v6+ff19PPx7+3r6ebl3eHm6/Hw7uvz8PH1/f//+/Xq2NLq59vS19fY2tvc3Nzb3Nvb29rZ2OD4///7//70///////////9/v7//v7//////////////P7+///////x2N7g3uTl5uzm0N7Pwr/KycvMzs/Q0tPV1tfY2tvc3eDi5OXm5+nr7u7v8fP09fb5+fr7+/z9/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pv6+fj29PL7/eba7vLv+f//9e/v8fTz9Pf7+fDo3dLZx83V5tTFztLU1dTU0tPT2NjY2NfV1NPe+P/7///+///////////////+///////+//////////r////++P//6+He4d7e39/l1dPjtrDAxsnGxsbHy9PXztTa3+Pl6Orj7tHX6+fq7unr7e/w8vP19vf5+vv7/f39/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+ff29fPx7e/j5Pn46eby8fDx8/b19P735s+8uL/EzsnW18zcwMbJyszOzs/Q0dHR0dHQzs3M3ff/+//9/f///////////////v/+//7//v/////////7/////vv//urg3uHg3t/e4dPW57Suwbu3vs7g7vX07fHx8vHw7+/x6/Xg2eLf5ezn6ezu7/Hy8/X3+fr7+/z9/f3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pz6+ff29fPx7+Xv7Ovu8PL/8vP29/b39vf/48G1trzBycfL19rF6L++wsPEx8nMzMzLzMzLysnHxt32//z//fz////////////+//7//v/+/v7/////////+/////78//rk4d/g4ODe3NzT1+uvprirpbfS5+/x9PPu7u/x8O/v79/q5uDh2tjd5efp7O3v8fL09vj5+vv8/f39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+vj39fTy8O7o7u7v7/X7//X19PXz8vb3/Nq+vsS/vsXCztTa0uO+tre4urzBxMXHxsbGxsXDwsHk+f/8//z7/////////////v79/v7//v7+//////////3////8/P/13+Hi4N/g39vZ09jtqp2rppev1PH8/vv3+Pj39fPx8O708Onc3NjW2+Lk5+nr7e/x8/X3+Pn6/P39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38/Pr59/Xz8e/t6e3p6+z38uns6+3t7ezq6fDey8fIxcPKvdLU1NXMyK+ztri5vb6/wb6+vr69vLq57f3//P36+/////////////7+/f7+//7+/v/////////9/////P7/79/h4+Hh4N7b2dbV45+Rm6Coweb4+PDv7fv49fPz9PPz//To19nV2OXf4eXn6uzu8PLz9vf5+vv9/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+Pb08/Dt69/o5Ofl8+3q7Oro6ejn5uTx6tbIzdbSzMbQ0szUyuKrs7W2t7i2uLm4uLi4t7W0s/b///v8+/v////////////+//7//v/+/v7//////////////vn+/+ff5OLh4eHc2tvW1NudoKq28PD1+/n48+vu7e/w8PHx8vPo4NHVztfm3N7i5efq7O7w8vX3+Pn7/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pz8+ff18/Hu7Onc4Nzq7vjt6u7s6urq6+vt4erfzc7X2djR0M7J1NbqrbCxsrKxr7CwsrKysrGvrq38///7/Pz6///////////////+//7//v/+//////////////74/f/i4uXk4OHf3Nnb0NfdrNDj8PHw8vX19/b09PP08u/u7u/279/FycTU4tnb3uLl5+rs7/H09vj5+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/j29PLw7ero5+Xc6e316Orq6+3s6urp6OLp4tTP0NPa1dTSys7W2rDCxMG6squmqKqrq6qpqKal/f//+vz7+v///////////////v///////v/////////////++Pz/4OTl4+Li39rb3M7Z3rTw///++Pb39vf28efk4d3e5e/5+/nevcO/z9bW2dzg4+bo6u/x8/b3+fv8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f79+/r39vTx7+vo5d7e1uDq8/Tg7u3r6erp6Obi6+bU09Lk7uvs7fDx8vT18vPy9fj8///z9PTx6uLd2v///fn4+Pv9/v7////////+//////////////////39/f/+/Pj/++Pk5OTh393Y1tfS0dH3+vr+/v38/v7/5dHQ197i4+jt8f3yu7bHw8vQ0dXZ3eDk5+rt7/H09ff5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/fv69/bz8e7r5+Td3Nfe6/L25O/t6+nq6ejn5+jp8//////////9+ff08/r5+PXz8O/v8fPy8u/t7e/19PLx8PLz9PT09PX19vb28/P09PX19vb29/v8/f////7///37//Tj5eXl5OHf3NrW2tHP9vn6//79/v3//+DR0Nfe4uTo7vL/97iywcLIzs/S19ve4ubp7O7x8/X3+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+ff18/Du6ubj3djY3O7v+Onv7uzq6+rp6Ork4/D/+vj9//////79/v7////+/fr49f////79+/r58/Hw8PHw8fDz8/Ly8vHx8fHw8O/v7u3t6+zt7Ozu7/H+///////u6OXl5eXj4d/d1dzR1//7+v/+/P/8//7Y0dPY3+Lk6/Hy/Py0rbq+wcnMz9TY3N/k5+vt8PP19/n6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+vn29fLw7Onl4tzW1djs7ffr8O7s6+zr6unq5eHs+/Dy/vz8/Pv8////+/v+///////+/Pv6+vj28/r59vX19PPw7+7t7Ovq6enq6uno5uXk4+Xk4eDc29vZ9///////5+nn5+bk4t/f3drYz+P/+vz///z/+//50dLT2t/i5ezy9fn4rqizvb3EyczS1tre4uXq7O/y9Pf5+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pr59vTx7+vn4+Db1NPR6Orz7fDu7Ovs7Ovq7Ofj7v/8+v7//////f3///7/////////8vP09vf49fP9+fX08/Pw7+zr6ujn5eTk5ubl5OLh4N/e3d3d3Nva1/X/////+uLn6evt7/L09fX07eb3//f+///8//z/8c3S1Nrf5Oft8/b37Kekrry6v8bKz9TY3OHk6evu8fT2+fr8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/fv6+PX08e7q5uLf2dPPzeHo8vDw7uzr7ezr6ujp5vH////////////////9/v78/f39+/z9/Pz8/fv59/Pw8O/x7+3u7ezq6Ofm5eXl5OPi4eDf3d3d39/d29rt///////7/////////f38/v/////5/////f/9/+fM09bb4eTo8Pb39diioKm5uLzEyM3S19vg4+jq7vHz9vn6/Pz9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj18/Dt6eXh3tfTzMra6vP17+7s6+zs6+rs8Ovv//v8///////+////9fb3+Pn5+Pf7/Pz7+/r5+fTz8e/w8PDu7Ovq6efm5eTk5OPi4eDf3t3c293c2tjV8/////v8///////////9/vP8///5+f////7+///eztTX3eHk6PH29/XFnZyjtba2wcXL0NXa3+Ln6e3w8/b4+vz8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n49fPw7enl4N3W1crH1Oz0+e/u7Ovs7Ovq8fDo7P/59v3//v38/f39/v///////////f3+/v37+ff08vLx8fLw7u7u7evq6ejn4+Pi4eDe3t3Y19nZ2tza2ef////69v3++fv9/v////////759/j5///+/f/92NDV193h5Orx9/r2uZuZnrG0s7/Dyc/T2N3h5+nt8PP2+Pr8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Ty7uvp5N/c2s7IxsHt9fbu7e3u7ezt7PLv7ez/+/3+/f/////////9/v///v////79/fz7+vf2+fb08vLx7+3t7Orp6+ro5+bl5OPi4eDf3d3d3Nza2Nbm///9/v/+//z9/v/+/f7////8/f7////9//z/+tDV1tbd4eTp9Pr89aGWmJuttba7wsjN09fb4eXo7PDy9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf08u7r6OTf29rLysbF8vb08vDu7u3s7+/v7ezr//r9//3//////////f7+/////v/+/Pz7+/r29vj29PLy8e/t7ezq6evq6Ofm5eTj4uHg397d3dzc2tjW5P///v3//v///////////////vz//////v79//TO1dfW3OLk6/T6+/qckpSXq7CzusHHzNPX2+Hl6Ozv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jk39vZyc3Ew/P08PLw8e/v8fLy7+/u7//5///9/////////v39/v/////+/fz8+/v6+Pb49vTx8vHv7e3s6+rr6ujn5uXk4+Lh4ODe3t3c3NvZ19z+/vz7/f7//////////////fr8/f////79/v/rzNXY2N7h5u31+fn/lY+SlKirsrjAxsvS1trg5efs7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvo5N7b1snPwbzq8u7z9fX29vn5+ff69vX/+v7//v////////78/v///////f39+/r6+ff1+PX08fLx7+7u7Ovq6+ro5+bm5eTi4eDg397d3dzb2dfa/f///f////7///7+/v///v78+/z9/v3+/P//48vV2dve4ufu9vn3/I+NkpWoqLO3vsTK0NXZ3+Tn6+/y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r6OPe2tLK0cC14PT2+/v7/f3+///+//78//v+//7////////+/v7///7+/v7+/fz8/Pr39vf18/Hy8e/u7u3r6uvq6efm5uXk4uHg4ODf3d3c29rY2Pv///3+///8/Pv6+/v9/v/////9/fz8/v3//9vO1tre4OPn8Pf6+O2HiZKTpKWxtb3DyNDU2d/k5+vv8vX3+fz8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7///39/fr39fLu6+jj3trPzNLBstf5///+/v38/f7////+/v/7/v/+///////+/v79//////79/vz7+/v6+Pb39PPx8vHv7u7t6+rr6uno5ubl5OPi4eDg397d3Nza2dT3///+//////79/fv6+/v///////////z+///T0dXa4ODj6fH4+vvOfIeRkqGjsLS7wsjP1Njf4+bq7/L19/n8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+///9/f369/Xy7uvn493ZztDPwbHN/v/9/f39/Pr7+v3//f7//P///v///////v3+///////+/f39+/v7+fj19vTz8PLx7+7u7evq7Ovp6Ofm5eTj4uHg4d/e3d3c2tnV+P/////////////9+/z8/P39///////7///4zNPV2uHi5erx+Pv+r3SGkZGeo66zu8HHz9TY3+Pm6u7y9ff5/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///f39+vf18u7r5+Pd2c7QzcGuxv3/+/3//////Pn+//3///3///////////79/f/////+/fz9/fv7+vn49fb08vDy8e/u7u3r6uzr6ejn5uXk4+Lh4OHg3t3d3Nva1PX8//n5+PP///////////z9/f78/fz9+v/+8sfU1Nri4ubq8/n8/51xhpKSnKWts7rBx8/U2N/j5uru8vX3+fz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr49fLu6+fj3dnTysnBtbT0//79/f////76+ff2+f3///////39/v////z+/v////7+/f3+/f369/j49/bz9fLw8O/u7Ovq6efm5uTj4uLh397e3t7d3Nva2drg7vv+/P3//////////vz+/////fz7+fXw5djS09re3Ofm+ev5//Zze4OKk5ujrLO5wcjO09rf4+fr7/L0+Pr8/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz6+PXy7uvn493Z1MvJwra18P/+/f3////++v/9/P3////////9/f7////8/f7//////v39/f38+vf4+Pf28/Xy8PDv7uzr6uno5ubl4+Li4eDe3t7e3dzb2tnj3t7g39rY2tfZ3+Ln6urr8/Ly7+nj3tnPz83LzdPb39rm6Pjs9//3cnuCipObo6yzucHIzdPa3uPn6+/y9Pj6/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+vj18u7r6OPe2tTLysS2tOj///39//////v//////////v///f3+/////v39//////39/P39/Pr59/j39vP18vDw7+7s6+rp6Ofm5ePj4uHg397e3t3c29rZ4tzX1tLLxcO/v8PHzM/R0dHR0M3Ky8vIy8zMzNHW29zc6On17vj+/XF6gomSmqOss7nByM3T2d7j5+zv8vX4+vz8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/Pr49fPv6+jk3trUzcrEtrLf///9/f7////8//////////////39/v/+//7///////7+/P78/Pv5+Pf39vXz9PLw8O/u7Ovr6ujn5uXk4+Pi4N/f3t7d3Nva2dHO0NXW1M/M1dTS0c/Lx8bLysjHyMvLzc/OzMzR19vc3ert8/D8/f1xeYGIkpqirLO5wcjN09ne4+fs8PL1+Pv8/P3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/vz6+Pbz7+zp5N/b083Mxbaw1Pz//fz+/////fz9/v7+/v7+///9/f7//v/9/v/////9/f39/v78+vj49/b18/Ty8PDv7ezr6+rp6Ofm5OPj4uHg39/e3t3b2trX09HQz87My87NysvKysnIxcXGycnIxsbMysjIztbc3t/s7vHw/f7tcHmBiJKaoqyzucHIzdPa3uTn7PDy9fj7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79+vn28/Ds6eTf29POzMW2r8z3//38/f////3///////7+/v///f3+//7///7+/////vz9/P39+/r59/b19fL08vDw7+3s6+vq6ejn5uXk4+Ph4N/f3t7d3Nra2dfW1dTU1dbPzsvKysnHxsbFxsjKysrLz87MzNLY3d7d7PHx8P34y3B5gYiSmqOstLnByM7U2t/k5+zw8/X4+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv59/Tw7enl39vSz8/GuLDF9f/9/P3////+/////////v7///79/v/+/v/+//////7+/P79/fv5+ff29fTy9PLw8O/t7Ozr6+no6Obl5OTj4eDf39/e3dzb2tva1tbV1tbVzs3NysvLysnJx8THx8nMz83NzM3T2d7f3+7w8fD/+axweYGIkpqjrLS6wsnO1Nvf5Ofs8PP1+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v37+ff08O3p5d/b09HQybmxxPX//fz8/////v/+/f3+///+///+/f7//v7////////9/fz+/Pz6+fj39vX08vTy8PDv7ezs6+vq6ejn5eTk4+Lg39/f3t3c29rSzcnIzM/P0M7NzMzLy8nIx8XGyszLztDOzs3N0dfc3uDx8PHw//6dcHmBiZKbpK20usLJz9Xb4OTo7PDz9fn7/Pz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7//v78+/r39fHu6ubg3dDVzcHCsbj4+/3///////z+/v7+/v7+/f///////////v///v///////v37+fj6+fb39fXy8vDw7ezr6+vq6Ofm5OPi4uHf3t7e3t3c29rZ19XT0tLR0M/Pzs7NzMvLysrKysrKy8zMzs7N0tfb4OLf7vTx+v/3c3J7g4uVnaWutbvDytDV3OHl6e7x9Pb5/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+//7+/Pv69/Xx7uvm4d3S1svBw7K39fv9///////8///+/v7+/v7///////////7//v////////78+/n4+vn29/X18vLw8O3s7Ovr6ujn5uXj4uLh4N7e3t7d3Nva2dfV09LS0dDPz87OzczLy8vKysrKysvMzM7PztLX3ODi3+708/n/+m5ye4SMlZ2mrra8xMvR1t3i5enu8fT2+fz9/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/////vz7+vj18e7r5+He1tfMw8Wzt+36/P///////P////7+/v7+///////////+//7////////+/Pr5+Pn59vf19fLy8PDt7ezr6+ro5+bl4+Pi4eDf3t7e3dzb2dnX1dTS0tLR0M/Pzs3MzMvLysrKysvLzMzPz87T2Nzg4uDu9fT6/f9tc3yEjJaepq+4vcXM0tfe4ubq7vL09vn8/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79+/r49fLv7Ofi3tnYysHGtLXh+vz///////z//////v7+/v////////////7///7//v7//fz7+Pn5+Pb39fXy8vDw7u3s7Ovq6efm5eTj4+Lg39/e3t3c29nZ19XU09LS0dDPz87OzczMy8vLysvLzMzNz8/P09jc4OLm8Pbz+v3/cHR9ho6Xn6iwuL7GzdLY3uPn6u/y9Pf6/P39/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fv7+Pby7+zo49/a1sjCx7ay1Pv9///////9//////7+/v7///////////7////////9///8+vn5+fn29/X18vLw8O7t7Ozr6+nn5+bk4+Pi4eDf397d3NrZ2NfV1NPT0tHR0M/Pzs3NzMzLy8vLy8zNzdDQz9TZ3eDi6fH48vr89HF2foePmKCpsrm+xs3S2N7i5+vv8/X3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38+/n28/Dt6eTg3NbGxMm3rsb9/v/+/////f///////v7+///////////+///////+/v/++/n5+Pj59fb19fLy8fHu7ezs7Ovp6Ofm5eTj4+Hg39/e3dza2djX1dTT09PS0dDQz8/OzczMzMvLy8zMzc7Q0dDV2d3g4erw+fH++NRsd4CIkJqiqrO5v8fN09je4+jr8PP19/r8/f3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/Pv59vPw7enk4d/XxcbLua+9/v///f7///3////////+/v///////////v7//////v7//v37+Pr4+PX29fXy8vHx7u3s7Ozr6ejo5uXk5OPh4N/f3t3c2tnY19XU09PT0tHQ0NDPzs3NzMzMzMzMzc3O0NHR1drd4OHu8frx//e2bniAiZGaoqu0u8DIz9TZ3+To7PDz9ff6/P39/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fz7+fbz8O7q5eHg2MbIzrquuv////3+///9///////////////////////+//////39//38+/j5+Pj19vX18vLx8e7t7ezs6+no6Ofl5OTj4uDf397d3NrZ2NbV1NPT09LS0dDQz87NzczMzMzMzM3OztDR0dXa3eDh8PT78P/6pnJ4gYmRm6OrtLzBydDV2uDk6ezw9PX3+vz9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr39PHv6+bi3dbRzMS9t6/0///6+//+///////////////////////8/f7//v////7+/vz8+ff29/b39vPx8fDu7ezs6+vq6Ojn5eTk4+Hg397c3Nvb2djX1tXU09PS0tHQz8/PzszLy8vMzM3Oz9DT0tPV2+Dh5Ozw9/z/9INseYKLk52lrba9wsrQ1dvh5ert8fT3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz69/Tx7+vm493X0szEvrew8f//+v3//v///////////////////////f3+///+///+/v3+/Pn39/f29/bz8fHw7+7s7Ovr6ujo5+Xk5OPh4N/e3Nzb29nY19bV1NPT09PR0NDPz87My8zMzMzNzs/Q09LT1tvg4+Ts8fn+//R7bXqDjJWepq63vsPL0dbb4ebr7fH09/n7/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+vj08u/s5+Pe19LNxr+5sen///r+//7///////////////////////3+/v////7+/v3//vz5+Pf39vf28/Hx8O/u7ezs6+ro6Ofl5OTj4eDf3tzc29vZ2NfW1dTU09PT0tHQ0M/OzcvMzMzNzc7P0NPT1Nfc4OPl7fT3/v77d298hY6WoKevuL/EzNLX3OLn6+7x9ff5+/3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pr49fLw7Ojk39nUz8fBurLf/P/6///9///////////////////////9/v7+/////f3//v37+vj29/b39vPx8fDu7ezr6+rp5+jn5eTk4+Hg397c3Nvb2djV1dTT0tHR0dLR0NDQz83MzMzMzc7P0NDT0dTX3uLl5vH28//+/3VzfYaPl6GosLnAxc3T2N3j5+zu8vX3+fv9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+PXz8e3o5eDa1dDIwry01fn/+v///P////////////////////////3+///////+/v7+/Pr4+Pf29/bz8fHw7+7s6+vq6Ofn5uTj4+Lg39/e3Nzb29nY1tXU09LS0tLS0tHQ0M/NzM3Nzc3Oz9DR0dLT2N/l5ujx9/L//fNzdX+IkJiiqbG6wMbN09jd4+fs7/L2+Pr8/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/fz8+/n28/Hu6ebh29bRysS9tsz4//r///v//////////////////////////v////7+/v7+/fz5+fj39vf28/Hx8O/u7ezr6ujn5+bk4+Pi4N/f3tzc29vZ2NbW1dTT0tLS09LR0dDQzszNzc3Oz9DR0dHS1Nvh5ejp8vrz//fVb3iBipKao6uyu8LHz9XZ3uTo7fDz9vj6/P3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv59vTy7urm4tzX0svFv7fF9f76///6/v/////////////////////////+/////v3+/v37+/n49/b39vPx8fDu7Ovq6ejm5efm5OPj4uDf397c3Nvb2djV1dTT0tHR0dPS0dHR0M7Nzc3Nzs/Q0dHR0tXc4ujq6fP79f/3unF5g4yVnKattb3EydHW2+Dl6u7w8/b4+vz9/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/Pz7+fb08u/q5+Pc2NPMxr+4w/T++v//+f7//////////////////////////////v7+/v79/fv5+Pf29/bz8fHw7u3r6uno5uXn5uTj4+Lg39/e3Nzb29nY1tXU09LS0dHT0tLR0dDOzc3Nzs7P0NHS0dLV3OLo6uv1+/H/+7B1e4WOlp6nr7a/xcvS2Nzh5+vu8PT2+fr8/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pr49fLv6+jj39nUz8jBu7P4///8/////////////////////v7+/v7+/v7+/v7+/v7+/f37+fj6+Pf19PPx7/Dv7ezr6unn5uXk5OPi4N/d3Nva2trZ2NbV1dTU09PS0NDQz8/Oz8/Ozs/P0NHS09LW3N3d4ejv+/L///GRcYCJkZmhq7K4v8jM09jd4ufq7vH09/n7/P7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz6+Pbz7+vp5ODa1dDKw7258v//9fz//f////////////////7+/v7+/v7+/v7+/v7+/v39+/n4+vj39vXz8e/v7u3s6+ro5+bl5OTj4uDf3dzb29va2djW1dXU1NPT09DQ0NDPzs/Pz8/Pz9DR0tPS193e3uLo7+7x+v/zi3iAi5Obo6yzusHJzdPZ3uLn6u/x9Pf5+/z+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+vj28/Ds6ebi3NfSzMW/vef6+vP8//3//////////////////v7+/v7+/v7+/v7+/v38/fv5+Pn49/b18/Hv7+7t7Ovq6Obm5eTj4+Lg393c29vb2tnY1tbV1dTU09PR0NHQz87Q0M/Pz9DR0tPT0tfe3+Hj6e7q8/3/+H11iI2WnqWvtbzDys7V2t/j6Ovv8vX3+fv8/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv49vTx7evn493Y1M7Hwbvb9f/8///8///////////////////+/v7+/v7+/v7+/f39/Pz6+ff5+Pf29fPx7+7t7ezs6ufl5uXk4+Pi4N7e3dvb29rZ2NbW1tXU1NPT0dHR0dDP0NDQ0NDQ0dLT1NLX3uDi5ezx8Pz/++qAcY6QmKCosbe9xczQ19zg5ens8PL1+Pr7/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+ff18u7s5+Pe2dXPyMO60e///////f/////////+//////////////7+/v79/fz8/Pv8+vj3+Pj39vXz8O7t7ezs6+nn5ebl5OPj4uDe3t3c29vb2djX19bW1dTU1NLS0tHQ0NHR0NDQ0dLT1NTS2N7h4+fv8/f///jVb4KPk5ujqrO5v8bO09ne4ubq7fHz9vj6+/3+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f38+/n39fPv7ejk39rW0crFucje9P////7//////////v///////////////v79/f38/Pz7/Pr49/j39vb08u/t7e3s6+rp5+Xl5ePj4uHg3t7d3Nvb29rZ19fW1tXV1NTS0tPS0dDS0dHR0dHS09TV09ff4uPn8PXy/vrxk3p7mJefpq22vMLJ0NXa3+Pn6+7x8/b5+vz9/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v39/Pv5+Pbz8O7q5uDc2NPMx8DAwtTp//7///////////7///////////////7+/f39+/v7+/z6+Pf39vb19PLu7O7s6+rq6Ofl5eTj4+Lh397e3dzb29va2dfX19bW1dXU09PT0tHR0tLR0dHS09TV1dTY4OPk6e719dvvl39+h5Saoqmwub/Ey9LW3OHk6Ozv8vT3+fv8/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////79/fz7+fj29PDu6+fi3trVzsnIuq230/T4/v/////////+///////////////+/v39/fv7+/v7+vj39vb19fTx7uzu7Ovq6ejn5eXk4+Pi4d/e3t3c3Nzb2tnY19fW1tXV1NPT09LS0dLS0dLS0tPU1dbV2eLl5unv8/nYhHZ/jY+VnKSss7vBxs3T193h5ent7/L09/n7/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pr59/Tx7+vo5ODc1tHMxr60rqirvdP9//////31/P/++vf7/P/8///////7+fj+/v7+/Pr59/Dw7+7u7Ono7ero5+fm5OLo5+Xk4+Lg3t7c2tra2tnY19fW1tXV1dXR1NXT09PSz87TzNLV2NDPz9nh6Ore5dptc3h+hYyTm6KnsLe9w8rO1Nje4ubp7fD09vn6+/z9/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+ff18e/s6eXh3djSzs7CubOtqKquuNbt7fT////////+///+/f/+///9/fv7/f38+/n29PL08/Py8vDu7O3r6ejp6Obk4+Lh4ODf3dzf3tzc3Nzc29fX19fW1dTT1NXU0tDQz83V0M/X1d7b1NTY0+byrXVrcXd8gYmQlp6lq7O6wMbM0dba4OTn6+7x9Pb5+/z8/f7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38+/n49fLw7uvn4+Db1dHQxru2sa2mo5GSmLDc+/77/f//+Pz/+v3+/f38+/r6+fj4+Pf29PPy9/b29fTz8O/p5+bl5eXj4eHh4ODg397c29rZ2NjY2NfX19fX19bV1NPT09HP0NDP3tLJ09TQzdXU5rBuaGJdXXZ8goePlZujqrC4v8TJ0NTZ3eLm6ezw8vX3+fv8/P3+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv6+Pbz8e/s6OXi3djU08zBubGsp6WXkZGQjo2Zt+n0/fTw9fn//v/9/Pr6+vz29vb29fTz8/Tz8vHw7uzq5+bl5OXk4uHg397e3t7c29zb2tnY2NfX2NjY19fW1tXU1NTS0dHQz9fKycrS7MmAUlRWXmJgbnt7goeMlJqgqK+0vMLHzNLX29/k6Ort8PP19/r7/P39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/fz7+vn39PLv7enm49/a1tLOx761rqeipJqSiYeDeHl6eIGZxOr//////v38+/z/+fn49/b08/Lw7+7t6+nm5Ojo5+fn5uXk4+Lh4eHg3t3g397d3Nvb29nZ2NfX19fX1NbX2tvc297h2qdkVldMTVZUWWJhb314gIeMkZmfpayzuL/Fys7U2N3g5enr7vHz9vj6/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+PXz8e7r6OXh3NnUzcfCvLixqaOem5GMiHlybnBuZm2K5f39/fz6+fn7/fn5+Pf39vX18O/u7ezq5+Xo6eno6Ofl5OXk4+Pj4uDf3t7d3Nva2tvV1tbX2drb3N7i5uvr7PD0pFI7RERHUVBmbGhsb3N4hIWMkpefpKqxt7zDyc3R19vf4+fq7O/y9Pf5+/z9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz7+vn29PLw7Orn5N/b2tXMycXAuLSro56Xk42FhXJ0cWVgdPD///37+Pb09/n4+Pj4+Pj4+Pb19fX18/Hw7u7v7+7s6+rp6Ojo6Ojm5efo6Ojn5+jq7O3u7+/v7u3r7vT39/f9/3lFPUFHTVdYYW1tdHqCfYOLkpiepaqwt7zByM3R1dre4uXp7O7w8/X3+fv9/f3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/f38+/v59/Xz8e7r6ebh3dXS0tLMxL66saimoJyakY6IgHJoZXP//v////339/f4+vr5+Pj39/b9/f3+/v78+/f4+Pj39fTz9vX19vf39vX5+vv7+/z+//X19PLv6uXi4ujw9/n9//9tTUpIUlZbYGBlbnp1goaJkJecoqmutLvAxcvQ1Njd4ePn6+7w8fT2+Pn7/f39/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+vj39fPw7uvo5OLc2dTQzMbAvLWyrKahm5SQhIqDeG5u0P////v+/PP08vT08/Lx8fHx9vf39/f39vb6+/v7+/v6+vb29/b29/f38vHw7uzr7Ovl5+jm5uTj4t3o7v35///2RUlOU1dcYmZrcHd9gYaNkZmdpKqvtbu/xsrP1Nfb4OPo6u3v8fP29/r6+/z9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/Pr49/b08u/s6ebj39zY08/KxMC6trCrpZ+ZlYqPiH1zbrr////6/fry8vDz8/Lx8fDx8vX19fX19fT09fX19fX09PPx8fLx8PDy8u3t7evq6enq5ujo5uTl4+Ph6u/99////khMUVZbYGZqcXZ9g4iNk5idoqiutLm/w8nN0tba3uLl6evu8fP19/j6+vv8/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39/fz6+fj39fPx7uvo5uPg3NjUz8nFwLy2saymoJuTlY6DfXOf+P//+fv58/Dv8fLy8fDw8fLz8vLy8fHx8e7u7u7t7ezr7+7t7Ozs6+vq6uno5+jq6efo6efl4+Pj4+nv/vr8/+NNUFZbYGZscHZ7goiNkpmdpKivtLq/xMjO0dba3eHl6Ovt8PL09vj5+vv7/P3+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/f38+/r5+Pb08vDt6ujm49/c2NTOysXBvLeyrKaimZmTiIZ6jP3///n6+fPx7/Dx8vLx8PLz8fHw7+/v7+/u7u7u7ezr6uzs7Ovq6+vr6+vq6enq6uvo6Ojm5eTk5OXp6/7+/vivUFRaX2VrcXZ7gYiOk5ieo6qvtbq/xMnN0tba3uHk6Ovt7vHz9ff4+vv7/Pz9/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v39/Pv6+vj39fPx7+zq6OXh3tvX0s7KxsG8t7KsqJ2emY2LgIb8///5+fz18/Dw8fLy8vLy8+/v7u3s7O3t8vLx8fDw7+7r7Ovq6+rp6err6enp6enp5+np5+bk5OTn7u36///6iFNXXWNpcHZ7g4iPlZqgpquwtLq/xMjN0dfa3uHk5urt7vDy9Pb3+fr7+/z9/f7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz8+/v59/b08/Hu7Orn5OLf29bTz8vGwb23sq6ipJ6SkoaK8f//+fn99/Py8PHx8fLy8vHu7u3t7Ozs6/Pz8/Py8fHw7Ovq6erq6enq6eno6eno5+nq6ejk4+Pk5/Hx/f//+WtXW2FnbnV8gYiNlJqfpaywtrq/xMnN0tXb3uLl5+ns7+/x8/X2+Pn6/Pz8/f7+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/Pz7+vn39vXz8e/t6+jl4+Db2NTQy8fCvbezqKiimJqKjdn///v6/Pfy8fDv7/Dx8vDv7+/v7u7t7Ozw8PDw8O/v7uzr7Ovr7Ozs6Ono6Ojn5+jq6ejo5OPj5ejw8f7///haW19mbHN6goaMkZifpKqwtbzAxcrO0tba3uHl6Onr7vHx8/X3+Pn6/Pz8/f3+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8/Pv6+Pf29fLx7+3q6Obj3tvX1M/KxsG7t62tp5yeio7G///7+fz28u/w7u3v8fHv7e/v7+7u7ezr6uvr6+vq6urv7+7t7u7u7unn6enp6enq6uno5uXj5OXu7+37////WF5iaXB3foaKkZeepKqvtrvAw8nN0dXa3eHk5+rr7fDy8/X3+Pn6/P38/P39/v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v38/Pz6+vn49/Xz8vHw7uvp5uLg29jUz8vFv7u1sKqloJeWm/T///T28+zn7u7u7u7u7+/r6+rp6enp6ejp6uvq6uns7Ovt7Ozt7ezq6+rq6erq6ujp6Ojl5OTl6+r3/f//62ZgZ210fIOJkJeepKmwtbnAxMjO09ba3uHl5+rs7vDy8/T1+Pr7/Pz8/f39/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz8+/v6+ff29PPz8fDu6+jl4t/c19PPycO/trKtp6KZlZf2/P/08vLs5Ojo6Ojo6Onp6eno5+fn5+fn6Onp6unp6urq6uvr6uzs6+vq6erq6uro6ujo5eTk5evr9/z//NhiY2pxd4CGjJSaoaets7i9xMjM0tba3eHk6Ons7vDx8/X19vj6/Pz8/P39/f7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/f39/Pz7+/r59/b19fTy8O7s6Obi39rW0s3Hw7i2saqlnJaS9vf78fDv6uDk5OTk5OTk5OTj4+Li4uLi4uPk5ubm5+jp6ejo6urp6evp6enq6urq6evp6ebl5OXs6vr7//e+YmdudXuEi5GZn6essri9wsnN0dfb3+Lm6Ovt7/Hy9PX39/j5+/z8/Pz9/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/f38/Pz7+vn39/b19PLx7uvp4+Dc2NTOycS7ubSspqCYkfLu9evr7ejb4ODg39/f39/c3Nvb29vb29ve3+Di4uPk5eXl5+jo6urr6ejp6Ojp6urr6unm5eXm7er+/P/1pGVqcXh/iI6VnaSrsba9wcbN0tbb3+Ll6ezu7/Lz9PX3+Pn5+vv8/Pz8/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v39/f39/Pv6+fj39vTz8u/s6uXi3trV0MrGvbq1rKahm5Ln5Ozk5efk1dbW1dXV1dXU1tbV1dXV1dXX2Nna3N3e4eLj5OTl5+fn5+jn6Ofn6ejq6+rq5+bl5u3s//3/84tkbHN6gYqRmKCnrrS5wMXK0NXZ3uLl6Ovu8PL09fb2+Pn6+/v8/P39/f7+/v/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/v39/f38+/r59/b19PLv7Oro5eDc19LLx724tKykoJuS0Nfk297g2c7S0tHR0dDQ0M/Pz87Oz8/P0NHU1dbZ29ze39/g4eLj4+Xk5OXm5+jn6erp6efm5ufu7//8+/J4YW52fYSNlZyjq7K4vcTJzdTY3OHl5+rt8PL09ff39/j5/Pz8/f39/f7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v79/f39/Pv7+vj39vTy8O3q6OXg29bQysa8tbGqopyYkbrK29DU1dDEysnJycjIyMfHxsbGxsbGx8nKy8zP0NLU19fa29vd3t7j4uLj5eXm5+jp6enn5ubn7vP//fj0cGBxeYCIkZigp6+2vMHIzdLY3N/k6Ort8PP19vj4+fn6+vz8/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v7+/f39/fz8+/r5+Pb18/Dt6ubj3tnUzsfDurOwqqCZlY+rwdTJzs7Ivr+/v76+vb29v7+/vr6/v8DBw8XFxsrMztLT1NfY2drb4eDh4uLk5efn6ejp5ubm6O70/v74+HFidHyDipSbo6qyub/Ey9DV297i5+rt7/L19vj5+vr6+/v8/f39/v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v///fz8+/r5+vf18/Lv6+jo4tvX0dDKwLy1raefl5GNm7bHxsK6tLS8uri2uLi1s7a3t7a0sK+vtbzAwL7ByMvJzc3Ly9HX19na29zh4+bn4+Xn5ubn6enr9vz//fRrbHV+h46XnqautbrCyM3S2d3i5ent8PL19vn5+fr7+/z8/Pz9/f7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////v7//v38/Pv6+fn39fPx7urn4d7c0sjCvriyqqSemJGHgo+twcK/vLu/qaekpKWjoqCgoqSlqq2xsa6oqKyxsrKwxcHAxsrLz9XV1tnb3uLl5+Lk5uXk5ufp6/X6///zbmx3gIiQmaCosLe8xMrP1dvf5Ofr7vH09vj5+vr7+/z8/f39/f7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7//////////v38/Pv7+fj39fLw7uvn497X0crBvLStrKOclpGLg3+HorOyqqGhpaCfnpydnJuXkZGUl5qcnqCgn6Ous7O5v7O3ur7BxMbH0NDT1dre4OLh4+Xk4+Pm6Ov3+///5m5weoOLk5yjqrO6wMfN0tfd4ubp7fHz9vj6+/v7/Pz9/f39/v7+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+//////////79/Pv7+vj39PLu7Orm4d7S0s/KxL2zrK6lnZWLgHdzfZKmqaaioaefnpucnJqZl52em5eSjIeEm5OPkZmfp6ykrbW4ubq6uMfJy8/U19zd3+Hi4ePj5ujr+fz/9s5rc3uEjZWepa21vcLK0NXa4OTo6+/y9ff6+/z8/P39/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v////////7+/fz7+vn39fHv6+jl4dzY0crFwcC6r6ibkYiEh5WouaGpr6ukmpaWn5+enpycmpmRkpKRjo2KiXh/hYeIjZOWpqCgp6yxuca+wMXIztHV2drd4ODi4+Xn6vr8//O7and9ho6Wn6eut77Ey9HW2+Hl6ezw8/b4+vz9/f3+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/fz6+fj28/Hu6+fj4NvV0cDBv7qzp5qZjJaptbSsop+ysK6qpKGen5qampiYl5SUjo6Ni4qJiIiAgYGEhod6aYSFjp+utbi8t7q+wsfL0tTX2d3e3uDk5+r5+//2r216foeQmKGosLnAxc3T19zi5urt8fT3+fv8/v7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v38/Pv6+Pf18+/t6eXh3NjSzMe9vrWnnJefrrm1sKuknpyfpqCbmpqZmpuPjo6NjIqJiZSRjoyIhoSDh4aCe3h2cm18f4CEjZecnqyxtbu+w8rO0tXX29ze4+bq+/r/9KJte3+IkZmjqrK7wcfO1Nnd4+fs7vL1+Pr8/v7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v79/Pv5+Pf18/Ds6uPf2tbRy8S/u7Gmqba7sq+xrq6vraqlpaCZk5KSk5KTkJCPjIuLi4qCg4ODhIOCgXp5eHh2dnV2Z2Nka3J8kaelqK6yuL3DyM/Q1dfa3OHl5/z8/u2VanyBipKbpKy0vMPIz9Xa3uTo7fDz9/n7/f7+/v7////////////+/v7+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/fz7+vfz8fDt6OTZ1s7Ix8W6tZ6msba1tLS2ramno6Cdm5mZlZOQjouJhoeEhIODgH9/fn59fX19fX15eXZ2c29ubWtmXlVZZ2pcoJynq67CybzGzM/T1dnd4/Hx8f71eXZ7g4yUnKWttb7FytHX2+Dl6e7w9Pf5+/z9/////////////////////////////////////////////////////////////////v7+//////////////////39/f39/f39/Pz7+/v8/Pz8/Pz8/P3+/v7+/v7+/v7+/////////////////////////////////////////////v39/fz7+ff08O7s6OLd0c3Qy7uuqaq7vb23r6urrKimpKGcmZeUkpCMiYiFhIF/f35+fHx7e3h4eHh4eHh4dXV0cnFubGtpamdcVFtlalyOmpulqba7wcfLztPX2+Lw8PH+9nd2e4OMlZ2mrra+xcrR19zg5uru8PT3+vv8/f///////////////////////////////////////////////////////////////////////////v7+/v39/f39/f39/Pz8/Pv6+vr6+vr7+/v6+vv7/P39/f39/v7+/v7+/v///////////////////////////////////////v38/Pz6+ff08ezp5uHa1M3OyL2xpKe4ureyqqWjpqiioJyZlJGNjImGg399e3p4d3d0dHNxcHBwcHBwcHBwcG1tbW1rampnZ2dlX1RKS0xNT4CSk6ass7i+w8nN09fe7e7x/vd2dnuEjZaep6+2v8bL0tjc4ebr7vH0+Pr7/f7///////////////////////////////////////////////////////////////////////////38/Pz8+/v7+/v7+vr5+fj39vb19fb29vb29vb3+Pj5+vr6+/v8/P39/f7+/v7+/v////////////////////////////////79/Pv7+ff18e3p5eHb083QxruqprO9tbKxrKWioaOjmpeTjoqFgYB8end0cW9sbGpqaGhnZWRkZGRkZGRlZWVlZWVlZWVkZF1cXF5YUEU/Rkg4YI+aqKawt73CyM7T2urr8f34dXZ7hI6Xn6iwt7/GzNPZ3eLn6+7x9fj6+/3+//////////////////////////////////////////////////////////////////////7+/v78/Pv7+vr6+ff39/b19PPz8fHx8PDw8PHx8fHx8vPz9PX19vf4+fn6/Pz9/f3+/v7//////////////////////////////v7+/fz7+ff08u7q5eHc1czGxLemqLi7sq+zr6yopJ+cmo+LiIJ9d3NvbWpoZWJhXltcWVlZWFZWVlZWVlZXV1dXWlpbXV5eXV1YWFhWVFFPS0Q4My1XjJGoqa+1vMLIz9Xo5u7593J0eoWOl6CpsLjAx8zT2d3i5+zu8fX4+vz9/v///////////////////////////////////////////////////////////////////v79/fz8/Pv7+vn49/f09PPy8O/v7u3t7Ovr6+vs7Ozs7e3u7/Dw8fLz9fb3+Pr6+/v8/f3+/v7+/////////////////////////v7+/fz7+vj18e7q5d/a1M3Evq+lrb24q6murKikoJyXk4+AfnlybmhjYFtYVlRRT0xLSUlJR0dGRUVGR0dHSEhISE1OT1BSU1NVXFxVTk9PSkQ6Pzg1KT6DmaCnrbS7wsnQ4+Ps9/ZwdHqFjpigqrG4wMfM09nd4ujs7vH1+Pr8/f7////////////////////////////////////////////////////////////////+/v38/Pv6+vr5+Pf19PLy8O/u7evq6ejn5+bm5eXl5ubm5+fo6erq7Ozu7/Hz9PX29/j5+vv8/P39/v7+//////////////////////7+/v37+vj18e3q5eDZ0svDurOds762rqmpq6ainZeRiYJ+dHBrZF9ZVFBKR0VDQD47Ojk5ODg3Nzc3ODk5OTo6OjtAQEJFRkdISlVSSklRT0Q6Njk8LCMgNnaVnaSstr3Dy+Hg6/X2bnR6hY6YoKqxuMDHzNPZ3eLn7O/x9fj6/P3+/////////////////////////////////////////////////////////////////fz8+/r5+Pj29fTy8O7s7Ono5+Xk4uHg397d3dzc3Nzd3d3e3+Dh4uTl5+nr7e/v8vP09ff5+vr8/P39/v7+///////////////////+/v78+vn28+/r5+Lc1MzFvLKsrrW3sK2tqJ+bmJSNhHxzbmpoYlxUT0hFQD47NzYzMC8wLi4uLiwsLC4vLy8wMDExNjg5PD5AQUNEQj5FTUo9NTwuLTMkHi4zj5eeqLC5wcng3+r09W10eYSOmKGqsbi/x8zT2d3i5+vv8fX4+/z9/v////////////////////////////////////////////////////////////////z8+/r5+Pf38/Lx7uzq6Ofi4uDf3dva2dfW1dXU1NTU1dXV1tfY2dre3+Di5efp6u/w8fP19/j5/Pz8/f3+/v7///////////7+/v7//vz7/Pj39e/r5+Hb2crAxLaXpa6trKunoZyYlY6FenBoYl9RTUlFPjg1NCsqKicmJiMjHh4eHh4eHh4hIiIjJCQlJSUoKCwuMTQ0OTo7PD4+PT42MCslIBwbGTOKnqScv8C/z+Dp7O1tcX2GkJmiq7K5wcfO09ng5Ojt7/H1+fv8/f7//////////////////////v7+//////////////7+/v/////////+///+/v/+/fz7+vr49vTz8u7t6ubj4eDf3dvY1NDPy8rNzMvKy8vLy9XX1dHQzs7O19jZ3d/g4eTn6evt7/L09ff4+fv9/v79/f///////////v7+//78+/v39fLs6OPc283Iva+ltK+sq6qnpZ+XkoyFe29mYFhWRkM/OTUvLComJiQjIiIgHx0dHR0dHR0dHh4fHyAgISEhIyQnKiwvMDM0Nzg5OTk4MzAqJB8dGRcrV5qUn6W8vsnb4+nrbHB8ho+ZoauyucHHztPY3+Tn7e/y9vn7/P7+//////////////////////////////////////////////////////7+/f39/fz6+vr59/Tx7+7s6ePg4NvVz9DOy8jHxMLCxMPCwMDCwsK5uru8vL7Cw8bJys7R1tve4ePl6Ort7/H09ff5+/z8/Pz+/////v/////+///+/Pr69fLv6ePd1tTGwrmdqbK1qammo56Xjol9d2thVk9JRzY1Mi4pJSIgHx8fHxwcHBwbGxsbGxsbGxoaGhsbGxsbHB0fIiMmJykrLC0wMTEzMzAtJyMeGxcXGyV3jZeXrbzD1N/n5mtve4WPmKGrsbnBx87T2N/j5+zw8/b5+/z+/v///////////////////////////////////////v7+///////////9/Pz8/Pv5+Pj39fLv7Onn5eLd19POysrEwsG/vb68u7e2tbSzs7S0ra6ztrzBxcjBvry/xM/X2tnc3+Ll6Ovt8fL09/j5+vr7/P7+/v7+//////7+/fv5+PPw7OXf2NDKw76opqmjraako52XjYN8bGVbUEY/OjgrKickIB4cGhsbGxoaGhgYGxsbGxsbGxsYGBgYGBgYGBoaGxwdHyAgJSYnKCsrLCwsKCQfHBkXFgoSQIWMn564vdDb4+Jqb3qFjpihqrG4wMfO09jf4+bs8PP2+fv8/v7///////////////////7+/v79/f39/Pz8/Pz8/Pz8+/z8/Pz8/f39/Pz7+/v59/b08u/s6eXi39/c2NTPycXDx8S+ubOwra2mpqWjoqKhoaanqaqsrq+ws7vDxcLAw8jQ09fb3uHm6ezu8fT29/n6+vz9/v7+/v////7+/fz5+Pbx7eni3NTLvsCvo6mhnqagn5uVjIB1bltVSkE6NC8tJCIhHhwaGBgaGhoaGBgYFhsbGxsbGxsbGBgYGBgYGBgZGhoaGxsdHSAgISQlJigoJiQgHBsZFxYJFRljiJ+crbfL1d/caWx4g42XoKmwuMDGzdLX3uLm6+/y9vn7/P3+///////////////+/v39/f39/Pz7+/r6+vr6+vn5+fn5+fr6+vr7+/v6+vn59/Xz8O7r5+Tg3NnWzsjJyMXCv66rp6WlqKyvp6WmpqOin56YmZmZmJiYmKSmrrW6vby9xMjN0dXZ3uLn6u7x8/X3+fn7/P39/v/////+/fz6+Pb07enl3tfOxbOqp6ueo52fmpeSiX9yZl9ORz41LisnJh8dHBsaGBkXGhoaGhgZGRkbGxsbGxsbGxkZGRgYGBgYGhoaGxsbGxwdHSAhIiIlJSIfHRsaGBgWExkUK3yIpJ6wxc3Z1WZpdoCKlJ2nrrW9xMrQ1dzh5eru8PT3+vv9/v7+/v7+/v7+/v79/fz7+/v8/Pv6+vn4+Pf39/f39vb29/f39/j4+Pj39/b29fPw7uzq5eLe2tXSy8fDvbauqq2jqrG1s6ylnqChoKCdmZeWjIuKiomHh4aLiImRoLC8wLq/xcrO09nd4OPo7O/x9Pf4+fv8/f3+/////f37+ff08erl4dnRx72tmqqlo6GempGMiH1xZFhRQzw2LCckISAeHhsbGhoaGhwcHBsaGhgYGxsbGxsbGxsaGhoaGhoaGhwcHBsbGxsbHR0dICAhIyMeHBsZGhgYFhocFxBNdaCSp7zE085gZ3N9h5CZo6uyusDHzNLa3uLo7O7y9vj6/P3+/v7+/v7+/v39/Pv6+vn5+Pj39/b19PTy8vLy8vLx8fLy8vPz8/T08vLx8O/t6ufm4t7Z1dDLxsW5rqahpbC/ra6rp6Ofnp+enpyal5OSj4+Mi4mGg4F9dnl8foGKmaaus7q/w8nP1Njc4ebp7PDz9vf5+vv8/f7//v38+/n29O/o4t3VzMG3qqWeoaOjnJiMiIB2aVtORj02MCgjIB0dHh4eHRsbHBscHBwbGhoaGhoaGhoaGhoaGhobGxsbGxseHBwcHBsbGxwcHR8fICIiHBsaGRcYGRgbHxUUGnGQjKK1vszIXmVxeoSOl6Gor7i9xMrQ2N3h5urt8fX4+vz9/v7+/v7+/v78/Pv6+fn49/T08/Lx8fDv7e3t7e3t7Ozt7e3u7u/v7+7u7ezr6OXi4NzX0s3Hwb27squyu7iwqaipqaqnpqeompmWko+Mi4qJiIaFg4F+fIB2aGRpdHl8oaats7i9xMrS1tzh5ejt8PT2+Pn6+vv8///9/fz59fHz39PW0sa9s42po5mcmJSJh31xY1dLQz0qKSUgHBsaGBsbGxsaGhoaGhoaGhoaGhgZGRoaGxoaGhsbGhoYGBgYGxsbGxsbGxsbGxsbGxsbGxoaGhsaGRkYHRQVIQc1g4qnqLC+wmxlcXF5h5CZoa20ub7FzNLY3eHm6vD09vf6+/v7/Pz8/Pv6+/r5+Pj29PPw8e7v7+/t7uTj4+Lh4eHh5+fo5+fo5+fo6Onl4OHg2tXWy8PDv7mxl6u8urOxsbCop6OhnpyamZOSj46LiYmJhYWCf316eXdycm9tZ2NhXmZ/mKartLm7ytHU19zk6enu8PP2+Pr7/P/+/Pv69/Pv7uDVzsvBsamZqJuVmZWPiH53alxQRTw2KSgkIBwbGhgbGxsbGxsbGxsbGxsbGxkZGhobGxsbGxobGhoaGhgYGBsbGxsbGxsbGxsbGxsbGxsaGxobGhkZGBwWFxwMMGyIkZiir7JiW2R0fIiUnKOqrrO5wMbN1Nvf5Oju8vT2+Pr7+/z8/Pv6+vj39vTz8vDu7Oro5+Ph393l5OPj4uLi4tvb3Nze3t/f4d7f4N3c2NPMycfCuqeguL2/vLKrrayqpqKgnZqYl5SOjoqJh4SEhIGAfnx7eHV1cXFubGZiYF9vXmeJoqSuwbzI0M3R2uTl6+3x9Pb5+/z+/Pv6+PXw7Onh1snEu6ajoJ+SkZONioF0a15SRDo0LyUkIh8cGhobGxsbGxsbGxsbGxsbGRkZGRsbGxsbGxsaGhoaGhobGRkbGxsbGxsbGxsbGxsbGxsbGRsZGBoaGBkcFxoYESVLgIaPnaqpXlNYbHJ7g4yVnKGss7q/xc3V2d/j6e3w8vX3+fn6+vr5+Pf29fPx8O3r6eXk39vZ2NXT2tnZ2NjY2NjZ29vb3d3f39jV1tfUz8zJw724tamouLm3tK6npqanpJ+dmZaUkI2Mh4SDgH98e3t6end3dHFxcW5tbGllYV9eVlVQWHKTp6q4u8HHzNTc4ubp7fH09/n7/vz6+ffz7enk4NjEwLSeo5iUiYuMh4R4Z2BTRjoyKicgIB8cGxoaGxoaGxsbGxsbGBgYGhoaGhoaGhoaGhoZGRsbGxobGxsZGxsbGxsbGxsbGxsbGxsbGxsaGhgYGRcYHBgaGBQYMXCCjZyrqWJTW2hudn2Di5Oapa21ub7HztLY3ePo6+7x8/X29/f39vTz8vHu7Orn5OHg3djT0M/Oy8zLy8rKysrK0NHR0tPS0tPOz8/MxsPCwMOzrKSsvLmyrq2sqqeioJ6XlZGNiYWCgXx7eHd0cXFvcHBubWxsa2tpaWhlYl9eW0lMSkVMYoGVtK6zxdDO0t3h5Oru8fT3+f78+vj28evm3dvUxLiml6KQjIaHhoN9bF9WSj0zKyUhHBwcGxsbGhsaGhoaGhoaGhkZGRkbGx0dGhoaGhoaGhodGxsbGxobGxsbGxsbGxsbGxsbGxsbGxsbGhoYGRgXGBoaGxkYEilZdXqFlZBPRFFfaHJ7f4WOlJ2krLK4wMjL09fe5Ojr7vHy8/T19PPx8O3r6OXi3tvY1dPQz8/NzMq+vr29vLy8vMPBwL69ubm3wsbFwL29ubSwpaGzurCvqbKvrqqknZmXjIqFf313dHNtbWppZmRkZGNjY2NjY2JiYmFgYF1aWVhXTEVEPTpQa5Gfsb/CxcrU2+Dm6+7x9Pf9/Pr39O/o49nUzcOwmZCXjoyHgoB9c2ZXTkE1LScgHhsaGhobGxsbGhoaGhkZGRkaGhobHR0fHhkZGRkZGhobHBwaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxoaGRgXGRkYHB4cHBkxSICBho+KUk5cXmZvd36FjpWVmqGpsLjAxM3R2N7j5+rt7/Dx8vHv7ezp5+Tg3NjU0c3MycbDwb26ubi3t7a2tba4uLm9vsDBwbq8uLS1tKykl523uqypqayqp6Sgm5aOin97dnJtaGRhXl1aWVdVVVNWVlZWVldXV1ZWV1dVVVRUVlJJPTw9NytXg6evrbnHzNTa4ebq7fL1/Pv49vLs5eDUzMO/qZORiI6MhYF/eWhfT0Y7LygiHhwaGhoaGhsbGxoaGhkZGBgXGhkaGxwcGxwXFxcXGBgZGhcYGBcYGRoZGxsbGxsbGxsbGxsbGxsbGxsaGhkZGBgYFiAlHSIqPEJub3J2b0VBTExUXmlye4OHkZGVnqastLvDyNDW29/j5unq6+zr6efm4+Hd2dTQy8jHxLuzr6qmpamop6alpKSkmJqgpqyyt7iuramoqKOeoJi5v7Cnpqmno6Gblo+GfXJwbmhhXVlUU01NTElGRkVFRkZISUlKSkpMTU1OTk5OTU5HQ0FBOSobKFF/lqSwvcbN09vi5urv8/v69/Xx6+Pe0Mi+vqaUlH+OiIB+f3VhWExDNi0lIBwbGBgbGxsbGxsaGhoZGBcXFxgXGBgXFxcXExMTExQVFhcUFBYXFxgZGhsbGxsbGxsbGxsbGxsbGxscGxoaGRkZGRUiLB0qOUJCSFZnd4d1fYmIi4+SjoV3bZCNjpeeo6qyu8DIztPY3N/j5OXm5ePh39rY08/KxcC9v7mxq6mrrrOhoJ+enJybm5WVl5eYmpqZoJ+en5yVmqm0s7Kurqylo5eXkoh/dWtjZ2NfWVNPSkdEREI/Pjw8Oj4+Pj9CQkNDR0dISUdISEg/QUA+Ni8sLhIgS4WlqbC8x87X3+Tp7vP8+vfy7ung2dLJv62afoGJh4J9dm5iVk4/OS8mIB0bGhsaGhoaGxsbHBoaGhsdHh4UFBQWFhQSERcWGBoaGRgaGhkYGBgYGRoZGhsbGhkaGxsbGxsbGxsbGxsaGhsbHBwdISUrMTg+QFVcZW53e3+ChIeKiomGgn51dHl9h5ams6S9y83Oy9Li3OLd2Nva1tbIzNDPyL6upJ+otLi2r6ypo6CfnJmWk5KPj4yKjpGNg4eGjZmUhJS3ra6rqqadl5OPiYF4bmReWE1JRUE9OTUzLSwsLCsrKiorKyssLS4xMjc3Ojw+QkNEPjs4MiskHRgnDwo0fKuztMTJ0dbg6Ozx+vn18Ozn3tfOx7ismIKBhoN/enRqXlRMOzcsJR8cGxoaGhoaGhobGxoZGRgZGhocFBYVFhYVEhETERIUFBMTFRcXFxcWFhgcGRobGxoaGhsbGxsbGxsbGxsbGxobGxwcHyMnLTM5P0NVXGVtdnt+gIOGiImIhYF+gXlyb3J9iZGpsLS7xcjHzNvZ19PU09DOzsbDvbCmrby7u7izraelop+em5mVkpGOjI2KiY2SlpOkoph+bouwtKuqpqSgmZKLhX53bWRcU09BPzs3My8sKicnJyYmJiUlJiYmKCkqKy0tLzAzNjc3ODUxLSolHxcTGxQUHEF/p7S3xczT3+Di8/n49O7q5NvTysGwppSGgIN+e3ZtZVpPRTgzKiIdGxsaGhoaGhoaGhoaGBcVFxgZGBoXGBgZFhMREA8QExAQEBMVFBYUFRYZGxgZGxsaGhobGxsbGxsbGxsbGxsbGxscHCIlKi82PEFGV1xlbXZ6fX6BhIeHhoN+fHtvY1xfZ3BzlJqlr7W2usLHys3Pz83KycjBsaOntby3s6+qp6ainpucmZeUkY2MiouKiYiJjZSZkpqmmo6jrpelo6Ccl5CHgXRwZl1TS0NAMzIuKigmIiEfHx8fHh4eHh8fHyEiIiUmJicoKywsLC0oJSQhIBoVEBQZGgsNP4OztMHFzdzi5e759/Pt6OLZ0Me8qZ2MhXx9eXdwamBVSEEzLiYfHBsbGhoaGhsaGhoZGRgVFRYXFxUZGBYVFRQTEA4ODxAQDxETExQVFRUWFxoYGRsbGhoaGxsbGxsbGxsbGxsbGxsbHBwkJisyNz5ER1VcZGxzd3l6foCBg4B9e3hnZmRjYVtTS2t9l6eoq7S/u8DGx8XEwr26qaSxvbm0s6mnpqSioZuYlpSTkI2Jh4eHhoWGh4eNkouMk5qbnJ6cm5qXkoqDenRjX1ZNQzs1MSknIyEeHhwbHBsbGxsbGhoaGhwcHB4fHyAgISIjIyIhHBwcGhkWExATFRQMBBBKlqq1wtPW3ubp+ffy7Obf1s3CuaORg4F4d3RybGRcUEQ7LikiHBoaGhoaGhsbGhoZGRkYFRcYGBgWFBEODQ4NDAkNDQ8PDw0PFBMVFhUUFRgbFxkbHBsaGhsbGxsbGxsbGxwbGxsbHBwdJSYsMjc+Q0ZUWWBobXFydHh5e3x7eHVzbGxrZ15TRT5OXHSOo7GzrrK2u7q6u7atnKW1v7itrrSsqqekoJyYmI6NioiFgn9/gHx8foGDhomHjY2QmJiVnJCMioR8c2plU05IPzYwKiYgHx4cHBoaFxsbGhoaGhoaGRkbGxscHBwcGx0dHRsZGRgWFRUWFBAOEAsMDw0HG0uotLrO1N3i5vj28erk3dPKvregiHx7dXNxbWhhVkpANyomHxsaGhoaGhobGxoaGRgbGBYYGRkYFRIOCQkLCwsIDg4PEA0OERUUFRYWFBUZGhcYGxwbGhobGxsbGxsbGxscHBsbGxwcHSMmKi81Oz9DUFRaYWVoamtvcXN0c3Fta3RuZ11UUExNQ0ZSbpKppp2lqq2ws6yhm5y3wrGnrrOrpKSinJeVk5GFgoF+fHl3dnp1c3R5fX6BhoyMi42Rk5CBf3x1bWNaVEZCOjMtKCIfHRsaGhkZGRgbGxsbGxsbGxkZGxsbGxsbGxwaGxsaFxQWFhQUFBMRDwoKDw0QFQ0IeK69y9Xi4+j39e/o4trQx7i0n4B5dnBxbmlkXFNGOjInIx8aGBgaGhoaGxsaGRgXHBoWFxcWFBEQDAkJCQwLCgwNDg0MCg8VEBQWFRQVGBoWGBscGxsbGxsbGxsbGxsbHBwbGxwcHR0hJCgsMjc8P0hNU1leX2FiaGhqa2poZWNkYV5YVE9MSUdDRVZzhpCbm6Gjp6WWk6O4sq+vrqump5+cmpWPiYJ/enh3dHFubWpwbWxtb3J1eHt5fn58fH58c29sZV1USkQ7ODIrJiEdGhwaGRkaGhoaGxsbGxsbHBwYGhobGxsaGhwcGhscGhcUFxUSERIRDw4KDg8JDBINB0qfwc/V39/m9vTu5+DYzsW0saB8eHRwcGtmYVpQRDgxJyMdGhgYGhoaGhsbGhkYFxwZFxUVFRINDwsHBwkLCwkHBggJBgULEA4RFBQTFBgaFhgbHBsbGxsbGxsbGxsbGxwcHBscHB0dHyImKy81OjxESE9UV1pcXGFjZWVlY2BeVlRRUFBOSklRTERMXGd+m4+UlpiUiZ3Ks7GwsKumoJyZlI6GgXp0cHJwb2xqaGVlZGZmZ2lscHNtb3J2dHFqZ2tnY11USUA5NzItJyIdGhcdHBsbHBwcGxoaGxsbGxsbGRkZGxoZGRoZGRcYFxgUERMPDQsKCQkHDQwHBAUACCmCrbTJ1N7c5Pfy7efe2M7Csq2NdXBvb2dmYl1VSj40LR8eHRwaGhsbGxwbGBgaGRYSFBUWERETFBISEAcCAAACBAgNEBALDA4LFBQfGQ8OHRgaHB0cGxsbGxsbGxsbGxsbGxsbGxsbGyAgJCcrLjEyPj9CRUlMUFBSVFRUVFVVVVBQT01JSEhJQUhRUVpwem6Nf4uRiY2nt6+tqqaim5WPjYh+dG9oZGNeW1pZV1ZWVlZWWVlaXF1dYmNjZGNiYWBXVE1HQTo1MSwpIyAdHBwbGBgZGhkZGhocHBsbGRkaGxoZGBgYGRsbHRoXFBcbGBMJBwcJDAwICBELAwMFEUmPqLK9yNLa4en28evl3dbMwLCrinNvbm1lZGFbU0k9MSsfHh0cGhobGxscGxgYGhkXFBQWFREOEBAKCgoHAQAECwgLDw8LBQcKCAwOGhsSDh8aGhwdHRsbGxsbGxsbGxsbGxsbGxsbGxsfICMmKiwtMDc4Oz5AQ0VGSUlJSUxMTExKSkpHRURFRURJUVBUaXh1cn16e4uzrqCqqaWjnZaPioR9dWxkXlpZVFFQT01MTExMTE9QUFNUVFlZWlpZWFdWUExFQDo1MC0pJiAdGxsbGhgYGRgZGhkYGhkZFhcXFhcaGhgYGRobGxkWEhASExENDAsHAwQHCQcFAwUGGVSNnaq1v8nT2uHp9e/q49rTyLyvp4ZwbWxsY2FdV09FOS8nHh0cHBoaGxsbGxsYGBkaGBcWFxUPDA4LBgQDBAQJFiMrLzEtJBoZGw4JCRcbFg4cGxwcHR0cGxsbGxsbGxsbGxsbGxsbGxsbHx8gIyYpKiosLC8wMzY3ODg5OTs8PD8/QUJAPz8+P0BCSlJQTl5vdWxpa3alr6SipKOfm5aMg31ybWRcVE9LSkNCPz8+PDw8PD4/QEFEREVLS0xMTEtKSUM/OzYzLSomIyAcGhgaGhkXGBcXGBgXFhgYFxQVFhUVGxsZGhscHBwXFBAOEBANBw8IAgcKCQcFAggHKWiHla6uuMLL1dvi6fTv6eHY0Ma6raN9bWxqal9dWVRNQjcsJh0dHBwaGhsbGxsZGBoaGhgYGRkXEAwLCgkEBAYRIDRDT1FWU0tAOzkcDwwZGRYZGhwdHx4dHBwbGxsbGxsbGxsbGxsbGxsbGxwfHx8iIiUlIyMkJicnKioqKiwsLTAwMDU2Nzc3ODk7PUZRVFJbaXCIVmCUoaGfoJual5CJgHZvYFxTSUM/OzkzMi8vLiwsLCwvLzAxNDU1Ozs8PDw7Ojo2Mi8sKicjIB8cGhcXGBgZGBgYFhYXFRQYFRQUFBMVFhgWFxYXGRgXFhMRDw8OCwgPCgcGBgQIDAYPPnGDkaKosbvFztfd4+v07ujh18/EuKycdWdqZ2dZWlZSSUA0KiEdHBwcGhsbGxobGRgaHBkXGRkZFhAMDQ0IBgUNIjxPV1lcYGNjXFZSLB0QGBYUIhcfHyAhIB0cHBsbGxsbGxsbGxsbGxsbGxscHBwcHh8fHxwdHR4eHh4gICAhISQlJScrLC0vMDM1NjhBT1ZZX2duh2h5l46XoZiQj4qEfG9lXk5KQTo0MC4tJyYkIyMjISEjIyQlKCgpKS0tLS0tLSwsKykmJCQhHh0dGxgXGBgZGhkZFxcYGBcWFRUUExITFRYREhERExESERQRDg4OCwcFCQkHBQYICAUgUHGBk5ygrrS+yNHa4Obt8+3n39bNwraslm1kZ2VnVVdUT0g9MSghHBwcHBsbGxsaGxgaGxsZFRoXGRUNDA4NBQYLHTlRXF1cX2JmaGdjXkMpFhQTFCMZISIiIiEfHRwbGxsbGxsbGxsbGxsbGxsbHBwcHBwbGxsbGxsbGxsbGxsbHR0eHiEhIyQnKCstLzA3PEdSWmBpb3F7j4aKiZCVgYB8dWpgVE1BOzQuKSUkIiAgHR0cHBwcHR0eHiEhIiIkJCQkJCQkJCIhICAeHh0cGxoZGBcZGhgcGRgXGRgYFhcWExMTExUWEhESExISEA4XEg8PDgoHAwcBAQcJCBEgYm+Cj5Wfp6q6xM3V3uPo7/Ls5t7UzMG1rJNmYGZlZVFVU0xFOi4lHhsbHBwbGxsbGhsYGRsdGhQYFBUSCgkMCwMEEjFPYWNhZ2psbW5taWVgOB4OFxkZHSIkJSMiIB8dGxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkZGxsbGhoaGhobGxscHR0dHx0eHyIkJystNTg+SVJbY2hxbXaHg4F5gnRybGRbUEY+NzErJSAfHh0dHBwbGhobGxsbHBwdHR8fHR0dHR0dHR4eHRwcHR0cGxsaGRcZGhgYGhgUFRUSERAUExEPDxERExQTFBUUExAOEhEMDg0LBwYJBQUHBxM6YHWAi5Odo627wcrT2uLm6/Hx6+Xd08vAtKyQYlxlZGVRVFBLQzktJBwbGxscGxsbGhobGBkbHRoWFhQSDwkHCgsEAxY+X2ppbHl9f358e3hzdkElDRwdDyQjJCYmIiEgHxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkZGR0bGxsbGhoaGxsbHBwcHh4ZGh0eISQnKTQ1O0FKUllfbGBuf4FwanVsaGJcUUU8NzAsJiEdHBwbHBwbGxoaGhoaGhsbGx0dHRsbGxsbGxsbHBsaGxwcGxwaGRgYGRgYFxcUEQ8ODgsJCwoJBwcJCgwSEhESEhAODAoHBggJBgUGBQkIBx5IaXV9hY+Yoq24wcbP197k6Ozy8evk3NLJvbGseWVdX11XVFNNRj01LCQfGxsbGxsbGxscGxgZGRwcGBYVFxQODA0OAA09V2Joc4CAgoODgoF8eG9xLxgXICcdKissLConIR0bGxsbGxsbGxsbGxsbGxsbGhobGxsbGxocHBsbHBwbGxkaGhobGxoaGhsdHx8iJCUtMTU7QUdOUF9iZmlqZ2NhW1VORj05NDIiIR4cGxsaGhgYGhoaGxsbGxsbGxoaGhobGxsbGxsbGxoaGhsaGhkZGRoXGBgaGRcQExMUDwwMDwUGCQgJCwkJDg4NCwkLCAUJBwsOCwkIAQMADDJccHh8iZGcpq22v8bQ1d3j6Ozw8/Dq5NvRyL2wqndjW19dV1RTTUY9NSsjHxsbGxsbGxsbHBsYGRkcHBgVFBYTDQsNDAAQQ11pbnmEiIqLi4qJhH91dDMbGyUpISstLS0rJyEdGxsbGxsbGxsbGxsbGxsbGxoaGxsbGxoaGxoZGhsbGhkZGRkaGRkZGRgaGxseHyIkKy00OD1ESkxXW15hYV9bWFFNRDw1LisoISAfHRoaGhoZGRkZGhoaGhsbGxsaGhoaGxsbGxsbGxsaGhobGhoZGRoZGBYXGBcTExQVEwwICAsMCgsNDg0ODwgJCAYHCAQACwgICgYBAwgAFjdYcXyDiZWcp7C3vsfO1dng5uru8vTw6uPa0Me7r6d3YFpdXVZTUExFPTQrIx8bGxsbGxsbGxwbGBkZHBsXExITEQsKDAsAFktlcHaBi5GTlJSTkY2IfHs+ICQsLSYuMDAwLCchHhsbGxsbGxsbGxsbGxsbGxsaGhsbGxoaGhoZGBgZGRgXGxsaGhkZGRkWFxgZGxweICgpLTM4PENFS05RU1NRTUpGQjsyLSYiIB8eHBsaFxcYGRkYGRkaGBkaGhobGhoaGhsbGxsbGxsbGhoaGxoaGRkaGhkXFxYVEBMWFxEKBgcLDAkKDg8LCw8JCgoKCg0MCQsKBgMFBgUEIkNjdoCGj5ehp7G5wMfP1Nvg5uvu8fT27+ni2c/Guq6ldWBYXVpVUk9LRDw0KyMcGxsbGxsbGxscGxgZGRsaFhMSExAKBwoJAx5Ua3Z/iZKZm52cm5qVkISCTiYrMTEsMTMzMy0oIR4bGxsbGxsbGxsbGxsbGxsbGhobGxsaGhkaGRcXFxgXFhsaGRgXFxcXFhcYGBkYGxwiJiotMzY5PT1AQ0VEQj47OzcwKSQfHRsbGhgYFxcXGBkZGxoYGRkaGRkaGxoaGxobGxsbGxsbGxoaGhsaGhkZGxkYFRYXFhATFBINCAcKDQEBAwgIBAICCAcIBwoMDA4NCQMHCAURLFhpd4CJk5qgq7G6wsjO1tvh5evv8fT2+O7o4dnOxbmtonNdVFpaVFFPSUM5MSggHBsbGxsbGxsbGxsYGRgbGRUUEhEPCgcICAgnXHB7hY+aoqWmpqWjnpiJiWEsMjQ2NTc3NzQwKiQeGxsbGxsbGxsbGxsbGxsbGxoaGhsaGhkZGRkXFxgZFxUbGhkXFhYXFxYWGBgYGBkbHyAlKS0wMzQzNjg6OTczMC4qJR8bGRYWGxkXFxYWGRkZGRoZGhkaGRgZGhsaGxsbGxsbGxsbGxsaGhobGhoZGRwZGBYXGRUPDg0LBwMDCAkGBwkICAkIBwUGBQYGBQgLBggHBQoYPGd2foWNmaOnrba8xMvR197i5unu8vT2+fvu6OHYzcS4rJ1yW1FaWlNQTEhCOTEoIBwbGxsbGxsbGxsbGBkYGhgTExIREAgICgoLLGF1goqTn6iqrKyrqKOejZFyMzc3OD06Ojk3MSskHhsbGxsbGxsbGxsbGxsbGxsaGhoaGhkZGBsZGRgYFxYVGxkXFhUVFhcWGBgXGBcZGxsdISUoKCstKi0uMTAtKygmIx4cGRoYFhoYFhYXFxobFhgaGRcWGBgXGBkbGxsbGxsbGxsbGxsbGhoaGxoaGRkbGhcWFhcUDgsJBwUBAQUKGSYzNjc1Kh0NCQQEBQUFCAEEAgomT297foaPmaOpsLq/xMvS2N3j5+ru8vX2+Pr87ujh2M3EuKubcFtQWFpSUEtHQTgwKCAaGxsbGxsbGxsbGxgZGBoYExYUFBAJCAoKDzBmfIiRmqWusbOysa+po5SVfTg+PDtDPT09OTMrJB4bGxsbGxsbGxsbGxsbGxsbGhoaGhoZGBgbGxoYFxYVFBkYFhQTFBUWFRUWFhcYGhsZGx0fISMkJiIlJyopJiMhHhwZGBkZGRkWFhQTFBYZGhQWFhcVFRcYFhcZGxsbGxsbGxsbGxsbGxoaGhsaGhkZHRsXFRcWEgwLCQkIBQYTJEZLT1JUVVRQLRwLBAQEBAMJBBM5X3Z+f4eRm5+nr7jFyMzT2d7j6Ovw8vb3+Pn7/O7o4djNxLirmnBZTVdXUk9LR0E4MCcgGhsbGxsbGxsbGxsYGRgZFxIWFRQRCgkMCxIzan+PlZ2ptLe5ubi1r6mYmYI5Q0E/REBAPTk0KyQeGxsbGxsbGxsbGxsbGxsbGxoaGhoaGRgYHBsZFxYVFBIWFBIQEBETFBQVFxYXFxgbFhccHR4gICIgICIlJCIfHhgWFBUWFxcXEhAPDxATFRUSFBUVFBMWFxYXGRsbGxsbGxsbGxsbGxsaGhobGhoZGR0bGBYWFQ8JDQ0NDAgNJ0FRVFphZGNhYFo/HwwKCgcFCRpEbnp6go+Rm6CmsLzEydLW3OHm6u7x8/b4+fn5+/zu5+DXzcO3qp5wV0pTVE9NRkQ9Ny0nIB0bGxsbGxsbGxsbGRkZGhkVFA4MDAwMDAcHOG99iJeqs7i6vr68ubWvoZeKREdGTEJDQkE7Ni0lHhsbGxsbGxsbGxsbGxsbGxsbHRwYFxkZFxoXGBkZGBgUERMTEQ8ODA0ZGRkVEhITIxcZGx0dHR0dIiAdHBwcGxoaGRgYGRcUEhcXFhYVExMTDxUVFBYVFxsZGxscHBsaGhsbGxsbGxsbGhoaGxwcGhkaGBUVFRcVDgkJBwYDIEhZWF1jZmlsbm1wclQSAwEHDS9ee3qCjJOboKewucDHz9TY3ePo6+7y9Pj5+vv9/f7+7ufg18zDt6mecFdKU1RPTUZEPTctJyAdGxsbGxsbGxsbGxkZGRoZFBcRDQwMDQ0ICTlxf4uZrLW5vMDAvru3saOZi0ZHR01DRUNBPDcuJR4bGxsbGxsbGxsbGxsbGxsbGx0cGBcZGRkaFhYXFRcVEg4OEBETFBUUERMYFBYVExYXGRsdHR0cHSEeHBsbGhoaGRgWFxcWFBIQDhAREhEQEhMXGBgXFxYcGBobHBwbGhobGxsbGxsbGxoaGhscGxoYGxYWFBMVEwwKCQkHEDFTY2JobnF0eHp6fnpwOwcBEUB4g4KDkJmgqauyusLIz9bb3uLo7O/y9ff5+fv8/f7+/u7n39fMw7epnnBWSlNUT01GRD03LScgHRsbGxsbGxsbHBwZGRkaGRQXEQ8PDQ8OCgo5coGNna61vL/DwsG+ubOlnI9IS0pQRkZFQj84LiUhGxsbGxsbGxsbGxsbGxsbGxscHBgXGRoZGBQVFRMSEw4TEhEVGBcXGQsOFBQXGxkXFxkbHR0cHBweHRsaGhkYGBgWFRQUExIPDAwNEBERExYUGRsaGRcUFhgaGhwcHBsbGxsbGxsbGxsbGhobHBsaGBkVExEQExAJCwUJCBxCXW1scnl9gISGh4qOiWsVIFqHi4qNl6Glq7K3vMTL0dbd4eXp7vH09vj6+vv8/f7+///u59/WzMO3qZ5wVkpTVE9MRkQ9Ny0nIB0bGxsbGxsbGxwcGhkZGhkUGBMQEA8ODgoIOXGEkp+vt77BxcTDwLy2qJ+QSk1LUkdHRkM/OC8oIRsbGxsbGxsbGxsbGxsbGxsbGxkYGRkaGRoVFBMSEhIMDgoKDg8ODxIMDRUYGBsZFxgaHB0dHBwcHRsaGhoZGRkZFhQTFBQRDg8ODAsLCgsMERMVFhoZExIYGhscHRwbGxsbGxsbGxsbGxoaGhwbGRgaFBMREBAPCA4GCggoUGVwdHuCh4qOkpOXk5qOWHqXoJOYoKOnrra8wcbN09ne4+fs7/L19/n6/Pv8/f7/////7uff1szDtqmeb1ZJUlRPTEZEPTctJyAdGxsbGxsbGxsbHBkZGRoZFBcSEA8ODg4JCDZwhJOisLe/wsbFxMG8tqmfkUtNTVJHR0ZFQDkxKCEbGxsbGxsbGxsbGxsbGxsbGhsZGBkbGRgcFhMUExIRDA8JCAsKBgcKDgwQFhsbFxQZGx0dHRwcHBwcGhgaGRoaHBgUFBYVEhAQDAsJCggKDQwNCQkUGhcTGRscHR0dGxsbGxsbGxsbGxsaGhobGxkXGxYSEBEREAkQCA0MNlxrd3yEjJGVmp6goaWlo52qpqmoq66vsrzDwczQ1tzh5uvu8fL19/n6+/z9/f7//////+3m39bMw7apnW9WSVJTTkxGRD03LScgHRsbGxsbGxsbGxsZGRkbGRUWEQ8PDg8OCwg2cIaToa+3vsHFxcPAvLapoZNNUE5USkpIRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxobGRkaGhkWGxYSExISEQsHBwgNDw4TGRsWCw8aGxgUGhweHh0cHBwbGxkZGhkaGRwYExMVFBEPDgwMDg8RExcWEgkFDhgYFRocHR8eHRsbGxsbGxsbGxsbGhoaGxoYFxsXExEQEhAJDQYIDUBicnyCi5SZnqOoq6e3tK+rpbO8sLK3vsHEyczU193i5uvu8fT19/j6+/v8/f7+///////t5t/WzMK2qZ1vVklSU05MRkQ9Ny0nIB0bGxsbGxsbGxoaGRkZGxoWFhIQEA4PDwoNOHCGlKCus73AxMPCvrq0qqGUUVJRVUpKSUVCOTEqIxsbGxsbGxsbGxsbGxsbGxsaGxkZGhwaFhkTERAPEA4JDw0QDxAQFBkeIxINFRoZFBsdHh8eHRwcGxsZGRoaGRoaFhMSExMQDAwNEBUaHB8iIx8TCxAYGRkbHh4gHx4bGxsbGxsbGxsbGxoaGhsaGBYcFhQSEBIRCgsEAg9LaXd9ipOdoqetsra1tcK7sri9wcLEx8jKytHc297i5+vu8fP3+Pn6+/z9/f7+///////+7ebf1svCtqidb1ZJUlNOTEZEPTctJyAdGxsbGxsbGxsaGhgZGhsaFhUSEBAPEA8LDzxxhpSfrLK8v8LCwb25s6qjlVJVUlhLSklFQjkxKSIbGxsbGxsbGxsbGxsbGxsbGhsYGRocGhcYEQ4ODw8MBwoOEhQXHCQqBRsUDRgdHRkcHR8fHx0cHBoYGBgZGRoZGhUREBISDQsICxMgKjA1OiYmHBQXGx8gHB4fISAeGxsbGxsbGxsbGxsaGhobGhgWGxcTEQ8TEQoQBwASVG5+f5Kcpqywt73AwMTEy8G+xsvKz8/R1tnZ3OPm6e3w8/X3+vr7/P3+/v7+/v/////+/u3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgYGxwaGBYXFRAQEhIPDA41aYmWoqutub2/vr67trGlmI1eXFJVT0tJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxsbGRgZGhoWFhISEhESEAsBFSAWHSIoJR8pERgRKhkZJCYmJiUgHRsZGRgXGx0bFRcSEhUTExINEAAhLTBCPTk2PSoLFBMWJSEkJCcmIR0bGxsbGxsbGxsbGxsbHBsYFhgVExQTFBIMCgkJB2Nuf5KWoqyzusDEyczNz9DQ0dHS1NXX2tzf4+Xq7O/y9ff4+fz8/P39/v7+///////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGBoaGhcWGBURERISEBAPNmiHk56oqrS6vLu5uLOuo5eMXl1TVlBLSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxscGxkXGBwZFhQQEA8PEA4JARclGh8kKycjKBMYESkcHicnKSkmIB0bGRkYGBodGxUVERITERIQCw8BJjQzRkM/PEEmDhgUGSQkJCcnJiMdGxsbGxsbGxsbGxsbGxwbGBYYFhQUEhQSDAsJCQlkc4KVm6axuMDGys/T1dfY2NjZ2dvc3uDj5ejr7e/y9ff5+vr8/P39/v7+////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGBgaGhkYFhcUEREUExISEjZnhI6YpKewtLi3trOwrKCVi19eVFdQS0lFQjszKiMbGxsbGxsbGxsbGxsbGxsbGxsZFxkbGBUUEA4ODg0MBwEcLiIiKC8qLCYVGBAoHyEqKioqJiMdGxkZGBoaHBoUFhEQEQ8PDgkOBCw8PU5LR0VFIhEcFRsjJygqKikjIBwbGxsbGxsbGxsbGxscGxgWGRYVFRISEQ4MCgoNZnaGl5+rtb3GzNHW29zf4ODg4eHj5Obo6ezu8PLz9fj6+/z8/f3+/v7//////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhgYGhoaFxYYFhERExQTEBE2ZYGJkZ6krK+ys7Kwq6mekopgX1RWUEtJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxsbGBcZGxkUFA8ODgwMCwYDITUtJSowLTcoFxkRJyQoLS0sLCkjHRsaGRgZGhwZFRcSEBANDg0HDAY0R0RUUU5MTSEXIRcgJissLSwqJiAdGxsbGxsbGxsbGxsbHBsYFhkUExQSEhEMDwoLD2d5h5ahrbe/yNDV29/h5OXm5ubn6Onr7e7v8fP29/j6+/z9/f7+/v/////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsaGhkYGRgWFxUTEhETEhASMmF+hYyZoqerra2srKikm5CJYGFUVU9LSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxsbHBoZGBwYExcSDg8MDgsHBiQ/OykqMjA8KxobFiUrLTEzMi8qJB4bGhsaGRwdGRQXExEPDw4OCAsLPE9LWFVVUlQkHiUbIy0wMDMwLCchHRsbGxsbGxsbGxsbGxwbGBYYFBITERERDA8LCxJnfIeVoa24wMrS2N7h5Ofp6uvr7Ozu8PHy8/T2+Pn6+/z9/f3/////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGhoZGRgXFxYWExMTExITEzNeeoCFkZyhpKiop6WkoJeNh2BhVVVPS0lFQjszKiMbGxsbGxsbGxsbGxsbGxsbHRsaGRobFxIYExAODA4MCAgrSUguLDM0PTMeISEmNTE2NjUyLCYeHBobGhocHBgSGBQQEA4PDQoJDENVTlpYWldZKiQpIyw3NjY2My8qIx8bGxsbGxsbGxsbGxscGxgWGRUTERISEQ4QCQwVZXuKlKGtuMDK0tnf4+bq7e7v8PDx8vT29vf4+fr7+/z9/f7+/////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbHBsaGRgYGRgXFhUWFhcXGBkzW3R4fYiVmp6goaGgnJuTiYVgYlVWUEtJRUI7MyojGxsbGxsbGxsbGxsbGxsbGxwbGhgZGhgTGRMPDg4ODQoNLlBUMy0yNzg4IicuKz03OTg3My0nHhwbGxoaGxwXFBkTEA8ODw4KCA5GWlJcW11dXTAoMC40Qjk5ODYyKiMgGxsbGxsbGxsbGxsbHBsYFhoWExQSFRMQEw0PGGR6h5Kfq7a+yNHY3uPm6+7w8vPz9PX3+fn6+/z8/P39/v7////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxwbGhcYGRcXFxgXGBoaGxsdNVlwdHaDj5aZm5ycm5iVkIaDYGNWV1FLSUVCOzMqIxsbGxsbGxsbGxsbGxsbGxscGxoYGRoYEhoSDw4NDg4KEDJWWzYuMjg2PSUuNy9DOzk5ODUtJx4cGxsaGhscFxMYEw8ODQ4OCgcPSFxUXVxgYl8zKjQ1OEk7Ozs4MiskIBsbGxsbGxsbGxsbGxwbGBYbFxQVFRYVEhcQEhpjeISPnamzvMbO1dvi5eru8PLz9PT2+Pn6+/z9/f39/v7/////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbHBoYFxcXFhcYGhscODM/WW91eIOPj4Z9hZyWj4uGdmldXFVSSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYVEQ4PDg0MCwxEXk5CODM5QDs2Njs/QUFDPzszLScgGxsbGRcZHBkVGhQQEA4MCggHCVRZX2VfYWhYRDozOzpBQ0I+OjMrIR0bGxsbGxsbGxsaGhobGxkXGhgVFRUUEQ4TEBQfWG6DjpqksLrEzNHZ4OTp7vDx8vP3+fr7/Pz9/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhsbGxoaGBcZGBgZGhweHw4WIy8vMkFRVFtkc36Kh4yHgnNoXFxVUkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFREODw8PCw0MP1xXTz80OTw9OjtAQkREQ0A7NC0nIBwbGxkXGRwZFRoUEA4PDQsKCgxWXGJnYWRsWkg+OT8+RERCPjszKyQdGxsbGxsbGxsbGhoaHBsZFxsXFxcWFREREhANFFlreYSUn6y1v8fN1tzg5uvu8PLz9/j6+/z9/v/////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxoaGxsaGBkYFxcaGxweIiMfKS8qICEtOjg+S2JveHmGgntvZFlcU1JKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxsbGhcXGhoYFhURDxAQDg0NDEJgYV1OOzo4Oj1DRkZGRkVCPDYuKCAcGxsZFxkcGRUYFBAPDw0LDAsNWF1la2Vnb19MRD9GREpFQz87Ni0kHhsbGxsbGxsbGxoaGxwbGRgaGRgXGBgVExkZEhZlcHqDj5qlrrjAydLW2+Lo6+7x8/b4+vv8/f7/////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsaGhobGhkYGRcXGBocICIlISotLCYkJilBR0ZUZHZ4fHx3a2NXWVJSSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYVEQ8QEQ4ODQhEZ2ZmX0xCNjtBSE1LR0VGQz03MCgjHhsbGRcZHBkVGBQQDxAODg8MD1hfZW1nanJjUkpFTEdNR0RCPDctJR4bGxsbGxsbGxsaGhscGxoYGBoZGhkXFhUeFg4OYGlsbYeSm6SttL/J0dbe5ens8PP19/n7/P3+/////////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBoaGhkaGRkWFhkcICImJyksLCkiICguKzIwPlh3fXl3cmhhV1dPT0pJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFhEQERIQDQ0FRGdnbGlbVEJDRUpPT0pFR0Q/ODErIx8bGxkXGRwZFRkUEBAREA8PDRBaX2dvaW5yZFZPSU9JUEdGQz43LScgGxsbGxsbGxsbGhobHBwaGRkZGBkaGhcXEBEXFVZecHeDjJSbpa+6xszS2uHl6e7x8/X4+/z9/v/////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGhoaGRoaGBscHyQmKi03MywmHRsfJSgtKDVManRvc21lX1ZWTE1KSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxsbGhcXGhoYFhYUEBERDwwMDUNlaG1pX2JXUUpLTU5NS0lFQDkxKiMeGxsZFxkcGRUXFBAPDw4PEAwQWF9ncGpvcmVVUExRSk5IRkM/OC8nIBsbGxsbGxsbGxoaGx0cGhkYGBkZGhkYFhYeKCRRU2Zzf4aLkZyotMDEy9Xc4OXq7vHz9/r8/f7/////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGBgaGhoaGxsbHiEnKy0uKiglISAdFhEcIhUeOF5sZ21pYF1VVEtMSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbGxoXFxoaGBYXFBASEQ4NDBJGZWhtbWdqZF1STEtNUVFJRUA5MyolIBsbGRcZHBkVFxIODw8OEBAND1dgaHBtcG9iVlFNUktNSkZEPzgvJiAbGxsbGxsbGxoaGhsdHBsZGRgZGhoZGRghIRoOMywoKTIyLikoKCsxu8PN1drg5uvv8vb5+/z+/////////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgYGBoaGhoaGx8iJisuLisqIhoWGB0cGiMUFzZfbV9qZl5aUlNLSkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxsaFxcaGhgWFxQREhEODAwOSmdjb3hycGdgVk5JSlBSSUU/OTMqJCAbGxkXGRwZFRgSDg8PDhAQDA9YX2lxbnFuY1VSTVFJTUpGRD44LyYfGxsbGxsbGxsaGhobHRwbGhgaGxsbGhkaGykkGTgrKDU2NSwmJCMmKrS9yNDW3OPo7vH1+fv8/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbHR0gIycqKy0qJyIcFhQWGBgZHRQqXWFpZl5eUlRMT05JSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEZoaW92bWpnXFFMUFJPSUpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhkYGx0fICAnLS8xMjIxLiQhHxwXIDirtb/J0tnf5unv9Pb4+/7+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxwdICMkKCsrJyQhGRUVFhcVFhkRJlxfZWNcXFBTS05NSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxGaGlvdm5rZ1xRTFBST0lKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhoZGRweICEkKi0vLy8tKygdGhoWEhkzprG7xc/W3OPo7vP2+Pv+/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxscHR0hJCcnKCIgHRgUFBUXExQXDSRZXWJhWVpMUEhNS0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MR2pqbnZvbmhcUUxQUk9JSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGhodHyEiKi4xMC4sKCQjGRcYFA4YMZ+qtb/K0djg5+3y9fj7/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbHBwdICEjJCQdGhgXFBUXFxIWGA0kWlxgXldWS1BITUtJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEdra252cHBoXVFMT1JPSkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhobHiAiIy4wMTAtKSMeIBUTGBQPFzKYo7C7xs7W3+Xr8fX3+/3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxscHR0eHiAfGRcWFRUXFRcSFhgNJFlZXFtUVktQSExMSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxIa2tudnFxaV1RTE9RT0pKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGxsbHB8hIiMuMDEwLCcfGxwREhYUDhUxkp+st8PL1N7j6fD09/v9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsbGxwdHRwbGxYVFBQWFxUVEBQWCiFWVVRbU1VITUdMSklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MSGxsb3ZwcGpeUkxPUU9KSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbHBwgISIjLC4xLSslHhYeERIYFg4WMI2aqLS/yNLc4ejv8/f7/f3////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhsbGxsbGhcXFxYWFRUTERATFgofVFJPWlNSR0xGS0lJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDUhsbHB2cG9qXlJMT1FPSkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxscHBwdICEiIiksLSsoIxsTHxQUGRYNEi6JlqSwvMXP2uDn7vP2+v39////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGxsbGBcWGBcXFhUUEQ4QFRcKH1NQTVlSUUdMRUhISUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ1IbGxwdm9ta15STE9RT0pKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbHBwcHSAhISInKispJiAXER0REhcTCA4nhZOhrbnCzdff5u7y9vr9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsZGRkaHBsaGRkVExQTEA4PDxEPDiBGT1dZVFJITUVKRklIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0PSGpqbnNwb2ZlVFNSUU1LSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbGxwdHh4eJyYiHx4cGRQYFhkUEQwRIYGPnqu3wszX3uXt8vb6/f3////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhoaGhwcGhkaFhQVFBIQEQ8SDw4fRU5WWVRSSE1FSkZJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwND0hqaGxycHJmZFRTUlFNTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsbGxscHB0dHiUjIB0aGRcTExMTEgsJDB2AjZyqt8HM197l7fL2+v39////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGhscHBoZGxkXFhQSEBEPEhENH0ROVVlUUkdNRUpGSUhFQjkwJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxHaWhrcnJxamdTUk9RTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwdHhwZGBcUEQ8PEA4LBwscfYuaqLXAy9be5ezx9vr9/f///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsbGhobHBwaGRwYFhcVEhEQDxIRECFGUFZYU1FHTUVKRklIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0MR2dnanRydW1pVFFPUE1OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGRkYFhYXFRIQDxAPCwkMHXuJmKa0v8rV3eTs8fX6/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGxoaGxwbGhgcGBYXFRIREhESERAhR1BXWFNRR01FSkZJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEVmZ2xzdHVwalNRTlBPT0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhoaGhoaGhgYFxUWGRgUEQ4SDgwJDx96iJels77J1N3k7PH1+v3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsbGxsbGxsbGxoaGhobGxkXHBoYFxYTEhIQExIPIUdRV1dTUUdNRUpGSUhFQjkwJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGaGhudHR1cGlTT05QT09KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEVtianJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhoaGhoaGhoXGRcXGBkaFhAPEA8KCQ4geoiXpbK9ydTc4+vx9fr9/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxsbGxsbGxsaGhkaGxoYFxsYFhUWEhEQDhIRECJIUldXUlBGTEVKR0lIRUI5MCcjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0KRmlpb3Z0dG9oU09OUU9OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDRFbYmpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGhoaGhoaGxsYFxgZFxQQDxAMCgkOIHqIl6WyvcjT3OPr8PX6/f7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxsbGxsbGxsbGhkZGRsaGBYYFRMUEg8ODQ0QDw8hR1FYV1JQRkxFSkdJSEVCOTAnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNCUdqa3F2c3RvaFNPTlFPTkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0RW2Jqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGhoaGxsbGx0dGhkYGBcTEg8RDgsIDx97iJilsr3I09zj6/D1+v3+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGRkZGxsaGhkaGRgZGxwaGBUWFxUTEhIMEg4QIElNUlhZVj9GSk5HSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxIamltdHN1cGtRUE1MTU1KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGRkZGhoaGxsYGBcZGRgXEw8PDg0MBwohe4mYprO+ydTb5Ovv9vr8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGBgZGxsaGhsYGRgWGBsbGRYUExMSDw0MCRAMECBLUVRVV1M/RkpOR0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0NRmppbXNydHBrUVBNTE1OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxgYGhkaGhoaGRgYGBgYFRIPDw8MDAcLInuImKWzvsnU2+Tr7/b6/P7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxgYGxsbGhoaGRkXFhgZGBcUEhAQDg0JCQkQDA0gTFJUVFVTPEVHTkZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNC0draW1zcnRwa1FQTUxNTkpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWmFqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsYGRkZGRoaGxYWFhcXFhMRDQ4PCwoFDCF6iJels77J1Nzl6/D2+vz+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsYGhsbGhoZGRkZGRcXGRgVFBEOEA8MCgoLEA0MIE9SVFNVUzpBRkxGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGaGltdHN1b2tRUE1MTU5KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhkZGhobGxoXFhQTFBMRDA0ODQwIBQkfeoiXpbO+ydTc5evw9vr8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGhobHBsaGBkaGxgXGBoZFhYSDhAPDQkJCQ4LCiBVVlhUV1Q6QEZMRklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0JRmlobnNydG9qUVBNTE5OSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxoaGBkcHRsZFxUVExMTDw0NDAwKBwMJIHuJmKa0v8rV3eXs8Pf6/P7////////////////////////////////t5t/Wy8K1p5twVEpTUU1LRkM9Ni0mIBwbGxsbGxsbGxoaHBwbGRkYGhoYFhcZFhMYEg4ODQsHBwsNCwkhWVlZV1tWOj5FS0ZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNCERqanB1c3VvalFQTkxOT0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWmFqcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGxsbGxsbGxsaGRkZHBoZGBkXFRQTEw8NCgsMCAYCCSF9i5qotb/L1d3m7PD3+vz+////////////////////////////////7ebf1svCtaebcFRKU1FNS0ZDPTYtJiAcGxsbGxsbGxsaGxwcGxsZFxkZFhQUFhMOFA4LCwoJBgUKDAgFHlpaW1teVzk9REtGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQpGbGxvdXJzb2pRUE5NTk9KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVphanJtcnVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxsbGxsbGxsbGhgXGRoZFhQZFhMREBAODQcJCQcGBAwjf42cqbbAy9bd5uzx9/r8/v///////////////////////////////+3m39bLwrWnm3BUSlNRTUtGQz02LSYgHBsbGxsbGxsbGxscHB0aGBcYFxUREhEOCQ4JBgcICQcHBAcFAR5cYF9fYVk6PUNLRklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0LR2tucHVxcm9qUVBOTU5PSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFaYWpybXJ1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsbGxsbGxsbGxkXFxcYGBURFxQQDQ4NCQkFBQkHBgQMJoGOnaq3wczW3ubt8ff6/P7////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxwbGhcZGxkWFhYXFxERFBERBgEDCQsLCw0OCAgkTWJeXVhdOEVCRUZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDExwbm5zcHB0bFRRTk5NS0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw8RWWBpcm1ydWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRgaGxsbGxoaGBgYFhgYFRURDxEPDw4KDAsHBwcKCh2Ek6CsucTO1t/l7fP3+vz+////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsbGxoZGRsaFxYVGBYQDxEPBwAAAAQEAwUCAgACI1JmY2RdXjdCQEVGSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ5MbWpsc3Fwc2tUUU5OTUtKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEVlgaXJtcXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkYGhsbGxsaGRgYFhYXGBIUDg0MCwsJCAsMCQoHCgoeh5WjrrvG0Njg5u3z9/r8/v///////////////////////////////+3m39bLwbSmmm9WSlJSTExGQz02LSYgHBsbGxsbGxsbGhsaGRkaGRYWFRcWDgwNCwwIBggJBAIDBQYACCtZbWZqY2A3QT1ERklIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0OSWllaXFzcnBqU1FOTkxLSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhFZYGlybXF1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsZGBobGxsbGhoXFxUSFBYQGRMODgkGBQQGBgYJBwcKIIyap7K+ydPb4ufu9Pf6/f7////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxobGxkZGxoVGBcXEwsJCgoJChEUFRAQEA8SERk6Y3NtcmdiNz88REZJSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDEZoZWtzdHRuaFNRTk5MS0pGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4RWWBpcmxxdWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRkaGhsaGhkbFxYWFBUUDRMPDAoJCQgIBwYEBwYGCCCQnqu1wczV3OPo7/T4+v3/////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsaGRkZGxwZFRkYFhMMCQoKChUnNDg6P0dOUExKXHN3bXVrZjhCPkVHSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQxFaGhvdnRzbGhTUU5OTExKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFhfaHJscXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkZGhobGhoZGxgWFhMVEwwLBgQECAYDBAMDAwYEBwohlaOvucTN1t3l6vD1+Pv9/////////////////////////////////+3m39bLwbSmmm9WSlJSTExGQz02LSYgHBsbGxsbGxsbFxkZGRsbGhUXFxUSCwkLCggcOUlRVmBqb3VxbHF/fXB9cWk8Q0BHS0lIRUI5MScjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0ORmhpbnNxcmxoU1FOTk1MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhBYX2hxbHF1Z1dSTVJKTklIRD43LSQeGxsbGxsbGxsZGRoaGhoZGBwYFhUUFRIMCgYDCA8QDg0LDQsNDA4PJZyptb3H0Njf5+vx9vn7/f/////////////////////////////////t5t/Wy8G0pppvVkpSUkxMRkM9Ni0mIBwbGxsbGxsbGxcZGRkbHRkWGBUTEgoKCwsLJkVYW19qdnd9fXmBi4h6g3duP0VDSk5JSEVCOTEnIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDkZnZm1ycnVtaFNRTk1NTUpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QWF9ocWxxdWdXUk1SSk5JSEQ+Ny0kHhsbGxsbGxsbGRkaGhoaGRgbGBUUFBQRCggHCBIlLjM2PUVLU1lmaXyjsLvDzNTc4unt8vb5+/3/////////////////////////////////7ebf1svBtKaab1ZKUlJMTEZDPTYtJiAcGxsbGxsbGxsXGRkaHBwaFRQTFBAJCQwNCihLXmJlcX18g4OBipWQg4l8cUBHRU1SSUhFQjkxJyMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ1EZWVqc3R6bWlUUU5NTU5KRkA5MSojHh0cGBcZGhkWFRIRERIPDgsNEFhfaHFscXVnV1JNUkpOSUhEPjctJB4bGxsbGxsbGxkZGhoaGRkYGhYUExQUEQkLCg0eN0VOU15ob3uDj5SkqLS/x9DX3uXp7fP3+fv9/////////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxgbGBYUExUTDQsMCwYqWGBocXl9g4aLjo6Qj4uKgXdARUlNRUpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0NRWVja3Rzc2xnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDxBYXmdxbHJ0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhYXGRkTEBEPCwgIBUdMU2BmcHmCjZWep7K7xs/V3OPp7fH2+fr8/v/////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcYGxgWFBMUEwwLCgsKMFxlbnqFho+Tl5iZnZuZkYl8QkdKUEdKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDUdnZmx0c3JsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QWF5ncWxxdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYWFhkYEg8PDgsICQZLUVlnb3mCi5afqLG5wcvU2d/l6u7x9vn6/P7/////////////////////////////////7ebg1svBtKeZb1RKUlBNS0ZDPTYtJiAcGxsbGxsbGxsaGxkXGBsYFRMSExEMCQsKAytcaneEkJSanqGgoJ6cmZGKfEBFSlFLSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ5IamltdHJxbGdSUU9PTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFdeZ3FscXRmV1FNUkpPSUhEPjctJB4bGxsbGxsbGxsbGxscGxgWFRUXGBAPDgwKCAoHUVhicHiBi5SfqLC5wsnT2t/j6O3w8/f6+/z+/////////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxcbFxUSERIQCgkJCQYtWmZ0hZaemZyhoqKhnpiQin1CRUlQSUpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0OSWtpbHJxcWxnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDhBXXmdwbHF0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhQVGBYRDQwKCgcJB1ZeaXd/iZOcp6+4wcrQ2d/j5+zv8vT4+vv8/v/////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcXGhcVExISEAoICgkLNWV0foiSlZ+jpqinpaGek42CRkhMUEpKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwND0lqZmpxcHFsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw4QV11mcGxxdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYWFhcVEAwNDAoGCQZbYm99h5GbpbC4wMnQ1d3k5+vv8fT2+fv8/f7/////////////////////////////////7ebg1svBtKeZb1RKUlBNS0ZDPTYtJiAcGxsbGxsbGxsaGxkXFxoXFBMSEhEJBwoKBzZvgYyUmpyoq62sra6sqpOMgUdLTVFKSklFQjoxKCMbGxsbGxsbGxsbGxsbGxsbHBsYFxoaGBUVEg8RDw4MDQ9IZ2RpcHBxbGdSUU9PTUxKRkA5MSojHh0cGBcZGhkWFRIRERIPDgsOEFddZnBrcXRmV1FNUkpPSUhEPjctJB4bGxsbGxsbGxsbGxscGxgWFRUXFw8NDgwMBwoGYGd1go2Xoau2vsbO1tvi6Ovu8fP3+Pr7/P3+/v///////////////////////////////+3m4NbLwbSnmW9USlJQTUtGQz02LSYgHBsbGxsbGxsbGhsZFxcaFhQUExMSCgkMCgs3bH2Mm6mvuru5tbCrqKOaj4FMTk1QSkpJRUI6MSgjGxsbGxsbGxsbGxsbGxsbGxwbGBcaGhgVFRIPEQ8ODA0PR2ZkaXFxcWxnUlFPT01MSkZAOTEqIx4dHBgXGRoZFhUSERESDw4LDg9XXWZwa3F0ZldRTVJKT0lIRD43LSQeGxsbGxsbGxsbGxsbHBsYFhUVGRcQDg4NDggMB2ZtfImTnaiyvMTM1dzh5+zv8vT1+fn6/P3+/v7////////////////////////////////t5uDWy8G0p5lvVEpSUE1LRkM9Ni0mIBwbGxsbGxsbGxobGRcXGhYTFBMTEgsICwsKN3GDkZymq7G2uLm5t7CtqJqLUVJMTkdKSUVCOjEoIxsbGxsbGxsbGxsbGxsbGxscGxgXGhoYFRUSDxEPDgwNDkdmZGtzcnFsZ1JRT09NTEpGQDkxKiMeHRwYFxkaGRYVEhEREg8OCw0PV11mcGtwdGZXUU1SSk9JSEQ+Ny0kHhsbGxsbGxsbGxsbGxwbGBYVFRgXEQ4PDg8KDQlpcYCOm6WvucTM1Nzh5evv8vT19/r6+/z9/v7+////////////////////////////////7ebf1svBs6Wcb1ZKUlNMTUpEPjYsJB0aHBwcHBwcHBwaGxoYGBsZFhgSEA8ODg0JBzx2h5CbqrC4u76/wLy1raWekk5TUVZLSEdEQDguJSAdHRwcHBwcHBwcHBwcHBwcGhoaFxkZGBYVFBETEQ8ODw1GZ2hucnBybmpUUE1PT1BIRT44LiggHBwbGxoaHRwXFhQREhMRDg0ND1ZdZnBscXVoWlNPUktPR0VBOTMsJCAcHBwcHBwcHB8cHBwcHBsbHhgWFBQSDwkQCQkIcX2Ik52qtr7I0Njf5urv8/b4+fn7+/z9/v///////////////////////////////////+3m39bLwbOlmW5WSVJSTExJRT82LSceGxoaGhoaGhoaGhsbGRkaGRQZEw8ODhAOCgc9eImTna20ub2/wcG+tq6on5NPUVFVSElIRkE6MighGxoaGRkZGRoaGhoaGhoaGhkbGBgYGRgUFRMQERIPDg4MRWdobnNxc25qU01LTk5PSEVAODEqIx4cGxkYGh0aGBcVERMSDw4ODhBXXWZwbHF0Z1lSTVJLT0pHQTszLSciGhoaGhoaGhobGhoYGBoZGhwWFBUUEw8JDggICHF+iJWgrbnBy9Pb4uns8fX4+fr7+/z8/f7////////////////////////////////////t5t/Wy8GzpZhtVUlRUkxMSUM8Ni0nIBsZGRkZGRkZGRkaGBYWGRYUFxENDw0PDgkIPnqLlqGxuLu/wsTEwLiwqqGVUFFPVUhLSkhDPDQqIxoZGRgYGBgYGRkZGRkZGRkZGBYVFxgWFBMQEA8PDAwNDEVnZ21zcXRtZ1FNSk5OTkpGQDkzKyQgGhkWFRgaGhYVExEREA0MCw8QV11mcGxydGZYUkxSSk9MSEM9NS0mIhkZGRkZGRkZGxsZFxkaGBgZFBMUEhIPCQ4IBwhyf4qXpbK9xs/Y3+bt8PX4+vv8/Pz8/f7+////////////////////////////////////7ebf1svBs6WYa1VIUFJMSkZDPDQtJyAcGRkZGRkZGRkZGhgWFhkWExUPDQwMDQ4ICT97jZijs7m9wcXHxsG6sqqilE5ST1RJTEtHQjszKSQaGRkYGBgZGRkZGRkZGRkZFxgVFRUYFhMTEA0ODAsKCg1GZ2dtcnF0bWdRTUpMTU5LR0E6MiojHxoYFhUYGhkWFBAODw8MCwgPEVddZnBscnRnWFJNUEtNS0hCPDYuJyMZGRkZGRkZGRsbGRcZGhkZGRQTEREQDwkNCAkJcn+Lmam2wcrT3OPq8PP3+/z9/f39/f7+/////////////////////////////////////+3m39bLwbOll2xUSFBQSktGQjs1LicgHBoaGhoaGhoaGxsbGRkaGRUYEQ4MDA4NCApAfI6Zo7O5vsPHycjDu7SqoJROUk9USkpJR0I7MikiGxoaGRkZGRoaGhoaGhoaGhoZGBgYGhgUExAPDw8MDQsNRmdobXJwcm1oUk1KTE1OSkZCOTMrJCAcGxkYGh0aFhUSEREQDQwLDhBXXWZwbHFzZlhRS1BJTUxJQz01LSYjGhoaGhoaGhobGhgYGBkZGRsVFBQSEhAKDQoKCnJ/i5qruMTM1t7m7fL1+fz9/f39/v7+///////////////////////////////////////t5t/Wy8GzpZdsVEhQT0lKRUE6NS0nIBwbGxsbGxsbGx0eHBobHRoYGRQQEQ4QDgoJQHyOmaSzucDFycrIw7y1qqCTTk9NU0hIR0VAOTEnIBwcGxsaGxsbGxsbGxsbGxsbHBoZHBsaFxUSEhESDw8PDUZoaG5ycHJuZk9KSEtMTEhFQDgxKiMeHRwaGRseHhkWFBETEg8ODg0PVl1mcGxxdGZWUUpQSExLR0I7MywkHxsbGxsbGxsbHR0bGxscHBwdFhQVFBQRDA4JCgp1g4+crbrFztfg5+7z9vr9/v7+/v//////////////////////////////////////////7ebf1svBs6WXa1NFTE5HRkA8NzApJBwaHBwcHBwcHBwcGxkZGhoZFRcSDxAQEBAKCD97jpqltbvBxsnKyMO9tqmhkU1OS1FGRURAPDQrIxwdHBwbGxscHBwcHBwcHBwcGhkZGBkbGRUSEQ8RERAODwpEZ2lvdHFzbWZPSUZISEpEQDkzLCMeGRwbGRgbHRoWFBEQERIQDQ0LDVZdZnBrcHNmVlBJTEZIRUI9NS4nHxocHBwcHBwcHB4cGhoaGx0cGxYSExITEg0OCAgLeIaSn667x8/Z4enw9Pf7/v///////////////////////////////////////////////+3m39bLwbOllmpSREtMRkQ8ODMrJR8XFRYWFhYWFhYWGBgXFRYXFhEVDwwODQ8OCQc+e4+apra8wcbKysfDvbeqopFLTUpPREA+OzYvJh4YFxcWFhYWFhYWFhYWFhYWFhYVFRUUFhUREA0NDw4ODQ4IQ2ZpcHVydG1lTkhFRkdIPjo0LScdGBQZFxUUFxkWExEODQ4PDQoKCQxVXWdwa3BzZVVPSEpERj88NzEpIRkVFhYWFhYWFhYYFhQVFRUWFhcSDg8PERELDAYIC3iHlKCvvMfQ2eLp8PX4/P/////////////////////////////////////////////////s5t/WysCzpp5kQT1HPC8tKSYfGhcXGRkVFRUVFRUVFRYVFBQYFhQQEw8MCw0OCgkNQHqMmKi1uMDEyMrJxLy1sKOcRjw+OTsvKyYiISAfHBgWFRUWFhYVFRUVFRUVFRUWFRUVGBUSDRcTEhEQDQ8RDkJgbHZzb3JsZz0+Qjg4KColIBwaGhsaFxUUFRYXEw8aFBERDw8ODxATT15pbnNsbHBWOj4+My8vKiUgHh0cGxYWFRUVFRUVFRUVFxYVFBIXFBAPEREPCw4NAwZ0h5OisLzH0Nri6e/2+Pz+////////////////////////////////////////////////7Obg18vBtaefYjo0OzEnJyEeGBQRERISExMTExMTExMSERIUFBMRDRAMCAgHCQoGCkB6jZmptLnAxMjKycS8tbKimD4yNTAwKSQfGxkXFRQVFBMTExQTExMTExMTExMTERESFBUTEAwSDgwMCwkMDg1DYmx2c290bmY1MzQsMSMkIBoXFRQUExIREBIWFBENFA8NDAsKCwwNEVJga3B0bW1vTjAyNCsqJyIdGBYWEhIVFBQTExMTFBETExQUFBIQFBENDQ4MCggLCwMEd4eWpbC8x9Da4+nv9vj8/v///////////////////////////////////////////////+3n4NfMwrapoV4vJCsiHB4bFxMPDg8PEBMTExMTExMTFBMTFBUTEQ4NCQcGBwgIBwg+fY6aqbW4wsTKysnHvbewnpU0JigiIyEdGBYVEhEOFRQSEhMTExITExMTExMTExMSEhQUExEODAsHCQYFBgkMRWVsdnNxdnJoKyUnISgcHRoVEhITERETEhISFhUSDw8LCAgIBgcJCgxUYm1ydm5wb0kiJSghIR4aFhQREg8NFRQUExMTExQUExMWFhUUEhIQCwgLCgkGCQkDBXmKl6awvMjQ2+Pp7/b4/P7////////////////////////////////////////////////t5+DXzMO3qqJbKBggGBQZFRIREBETExITExMTExMTExMTFBQUEg8PDgwGBwcJCQkFPn2Qnaq2ucLHy83Mx8C4sJ6TKiAfGRkZFhUTFRMQEBUUExMTFBMTExMTExMTExMTExMTExIPDwwKBwgGBQYJCUZnb3d0cXl4ayMaGxciGBcUEhITFBMTExMRExMUEA0MCQcGCAcHCQgJV2RscXdwcnNFFxkfFxkXFBMRERIQDxUVFBQTExQUFBQUFBUUEhASDwwKCwoJCAgIAwN+jJupsb3I0dvk6vD2+Pz+////////////////////////////////////////////////7Obg18zEuKylWCISHBQRFhIQDw8QEhESDAwMDAwMDAwMDA0MDAsJCA0LCAgJCwsMBD5/kp2tuLvEyMzOzcjBua+flSYbGxUVFRMSERQSEA4PDgwMDQ0NDAwMDAwMDAwMDQ0MCwoKCAcKCAcHCAYICAlKbHF5eHV8eG4aExYRHRQVFBERERIREA0MCwsLDAgHDAkHBwkICQgIB1xmbXN5cnR2RRMUHhQWExEQEBESDw8ODQ0MDAwMDQwLDAwNDgwLEg8LCgoLCgkICQMDgY6ap7K/ytLc5Ovw9vj8/v///////////////////////////////////////////////+3n4NfNxbquplYfERsWERQTEhEQERAQDggICAgICAgICggICAgIBgcLCQgHBggJCAVBhJSfr7y+x8rPz87Lwr2yopohGBkUFBUVExIUEhAOCgkICAkJCQgICAgICAgICAsJCQcGBwQGCAcHCAcGBgYJTXF0fHt4gHtyFxIVER0UFRQREhIQDQwJCAcHBwYGBAkHBgcIBwYICwVjaW90fHZ0eUYSGB4UFBUTEhISEA4MCQkICAgICAgICAgICAoIBw0KCAcJCAgHCQoFA4WPm6e1wcvU3eXr8fb4/P7////////////////////////////////////////////////u6OHZz8e8sKZWHA4cFQ4REQ8ODg8NCgoICAgICAgICAoLCQgJBwkKCAcGBQUGBgUEQoiZo7K+v8nN0NLQzMW+uaeeIBMXEhMVEhIRERAMCAoJCAgICQkICAgICAgICAgLCwkICAYICQcGBwoJBgQFClN0dn99fYWAdxcUFhMcExEREA8ODQkGCwgIBggIBgYHBgUICAcFBQoGanF0en97eH9KExcfEhATEhAREQ8LCQoJCQgICAgICQgICAsKCQgICAYGBgUGBQsKBgSIkJymt8PN1d7m6/H2+Pz+////////////////////////////////////////////////7+ni2tDIvrKlVBkNHBQMDQoJCQkJBwQDCQkJCQkJCQkLCwkJCQkLDAcGBQUFBQUEBEOKnKazvr7JztHS0c3Gv72toR4SExATDw0MDAwKBAEKCQgICAkICAkJCQkJCQkJCgsJCAkICwwHBwkKCgYEBQpTeHiAf36If3gUERQRGxAKCAcHBwUBAAoICAcHCgkKBwUGCgoHBQUKBm91eX6DfnyETRQXHA4MDAsKCwwKBwQKCgkJCAkJCQoJCAkLCwoJCAcGBQUFBAYKCgcFiZCdqLjEztbf5uvx9vj8/v///////////////////////////////////////////////+/q5d7Ty8G2rFkXEBYTDgwKBQEAAgYICQYGBgYGBgYGBwYGBQUFBQUEAwQHBgQFCANAjqausbfEzdDS0dDOycS9q6sOFBITDg4JBQUICAcHCQgIBwcICAkHBwcGBgYGBgsLCwsKCgkJDQoKCQgGCAwOVX6LiIeNe4p+FQ8OEhIODgoGBAQICQkICAcGBgUEBAYGBgYGBgYGAA9seoaDhIaWeksjEwwNFQsJBgcHCAoIBQUFBQUFBQUHBwcHBwcHBwgHBgYGBwgIDwwDDoiepay9xdDZ4Oft8vf5/P7+/v/////////////////////////////////////////////v6+bf1c7EuatYFQ4TCwgMDQkGBggLDQ8MDAwLCgoJCQwMCwoKCgoKCQcGBAYFBQQSSpCirbrH1s7R0tLRz8rFxLCoDxAQFxISDQoKCwsKCQUFBQUFBQUFBQUFBAQFBQUEBAQEAwMDAwQEBQcIBwUDCk94goiMkYyIexcNCg8NCw4KCAcICg0OCwsLCwsLCwsLCwsLCwwMDAMPcX6Ki4qMlHtJGgoHCAsNCwkKCg0NDAsLCwsLCwsLCwsLCwsLCwsLCwoKCgkJCQwGAQiOoquxwMfR2+Lo7vL3+fz+/v7/////////////////////////////////////////////8Ozn4djRyL2vWRQMEwwDBQcFAQEDBAQFBQUFBQYGBgYEBAQEBAUGBgoNDgwGAwUHDUuTq7W+xtDR09XU1NLOyc66phcRCQ4JCwgFBggHBgYHBwcHBwcHBwgHBwYGBwcIBAQEBAQEBAQDBgYDAwMGCAhUhoyPkoyMVVELDhESCwcICAQDBAUGBwUFBQUEBAQEAQEBAQEBAQICFH6MjZKRl5SBUB8LDA0KCAYDBQYFBAMEBAQEBAQEBAUFBQUFBQUFAQICAwMDAwMGAwAKkaayuMTL1N3j6e/z+Pr8/v7+//////////////////////////////////////////////Lt6ePa1MvBqF0dExcRDAwODQoJCgwMCwsKCgoKCgoJDAwLCwsLCwwJBQYMEA8LCxpTmLC6vcTN0tXW1tbU0Mu8spgiGAgEABAMCAkIBwUEDQ0NDAwNDQ0MDAsLCwwMDQsLCwsLCwwMDQ8NDRIREhMhXIqPl5NmQjo8ERcbGAoDDQ4MCgoJCgoLCwwMDAwMDQcICAgHBwcHCyR7kZSWmJ2Rf1AiDgwODAwLCgoLDAoJCgoKCgoKCgoLCwsLCwsLCwkJCQgHBwcIEAkKHpGrtrfIztff5erw9Pj6/f7//v7////////////////////////////////////////////07+vl3dfPxdGulZSTiYWFd3JsZGBcWVdVU1FQTk1KSUNBPzw6NzY1NzlFW212gImMmKuwvMXM1NXY2dnY19POy9PPlaOgpaCCf3l4dG5pZ2NiYF9fYGJjYGBfX19fYGBiYmJiYmNkZWxwc3d4dXiCeY2WclVTTkhWUzk5QEM+QUBAQD9AQEFCRUdJS01PUlNcX2VrcXd8gHh9lpibnKKosq6hk4+OjIl+enVyb2pmYWRkZGRkZGRkZGRkZGRkZGRlZ2ptcXZ7f4SJjY+rsbrCzNLb4ebr8PT5+/3+//7+////////////////////////////////////////////9fHt5+Db1MrKu6qinZeSj4iEfnd0cWxqaWZjYWBeW1hXVlNPTElHRT89QUdNW3eRoaq3vs3T3ODa3N3c3NvX0sDOxamzpqCXk46Kh4J7dHN2dnRzc3R2dnV1dXV0dHR0dnV1dnd4eXp9f3x9gYCCjYRuYk5GVFZRVlNKRUtNSVBPUFFPUFFRUldaXV9hZGdpbnJ4fYKHjJCJk5udpKOpr7GtpqCdmZeXjIuIhoOBenh5eXl5eXl5eXh4eHh4eHh4fX+AgoSIjpKXm6Gorre/w9HX3uTo7fL1+fv9///+/v////////////////////////////////////////////by7+rk4NnQzsW6saylmpSLh4J9enZycHBtamloZmNhWllWU1BOTEtMSUhIS01QVnOTs7/JytHS4eLj4uHg3NjM2Ma5vaiemJWRjoyJg39+goKBgYGBgoKBgoKCgYB/foCAgICBg4WGfX99gIh/ZVZLTVZYWFtXTU1PVlFWVk5SU1RVVVVWWFpdYGNlZmhrbnR4foKGi5CUm6Wtrqqssruvrq+uq6egm5KQjYuJh4J+f39/f39/f39/f39/f39/f3+BhIaIjJGVn6Sts7a9xcvW2+Ln6+/z9/n7/v///v7////////////////////////////////////////////28vDs5uPd1c3KxLy0q6WjnpuXlpSQjImKh4SBgH15dnNyb2tnZGJhWlpZU1JSUU1PWF9slr3U1uXn5+bl5ODb0tvBvsWvqqaqpqSkn5mVlZKTlJSUlJOSkZKSkpGQjo2NjY2NjpCSk42OfGBSUU5OUFxXT1NcWU5YVWNaXF5WXmNkZmprbXBzc3d7fX+ChomFiY6TlpugpKystLavtrrBtLe6uLazq6Sko6OioqCbmJmZmZmZmZmZmZmZmZmZmZmSlZiZmp2hpaSosrS+wc3T2d7k6u3w9fn6+/7////+////////////////////////////////////////////+fby7+zn4NzVz8jCvrmyrammop+bmJWTkY+Ni4iFgoB8end0cW5raGdlY2FhYF5dYV1eX2RpcIOwyNbY4ejm5trUzsvJxL++raqmo6GhoJ6ioZ+fn5+hoqinoZqan5+ZnZianJN+ZllSUVFSVVZXV1pbXFxcXF1eX2FjZWZoamxub3FzdXd5en+BhIeJjI6QlpicoKSorK+1uLy/wsPExcXEwsC9uri3sbCuq6ilpKOioqKioqKioqKioqKioqKio6Skpqirrq+1uL3CyM/U2ODj6O3x9fj6+/z9//////////////////////////////////////////////////j28/Hu6uTg3NfRzMjEvrq1s6+rqKWioZ+dm5iWk5COiYeEgH16d3RzcW5tbGtpaGlmZ2VlYmFsZHZ/hJGjus3e1MnDwr66t7q4tbSysbCwrKqsrq+trKyeoKKhoqOdl4N2amJfWFZVW1pZWVtcXFtcXFxcXWBjZmprbnBxc3V3eXt9f4GDhYeLjZCTlpianKKlqa2wtLi6vsHFyMrLzM3NzMvJxsPBwL28ure0srGwsLCwsLCwsLCwsLCwsLCwsLCxsbO1t7q7v8LGy9DW297k5+vv8/b4+vv8/v/////////////////////////////////////////////////59/Tz8e3p5eDc19PQzcjEwL67t7Wyr62sqqilo6Cdm5eVkY6Lh4SBf317eXd2dHNwb3FxcG1pbWJqbm5ub3qKjIV/gYqQkpO2tLS1tLCvsq6tq6mjnZWQgH10amdoZWJfWVZaW1lXV1xcW1xdXl5eX19hYmVpbXB0dnh6fH6AgoWHiYuOkJKUmJqdoKOmqKqvsbS4u7/CxMfJzdDR09TV1NTS0M7MysjHxsTCwL69vb29vb29vb29vb29vb29vb28vb2/wcPFxsnMz9PX2+Di6ezv8vX3+fr8/f7/////////////////////////////////////////////////+fj29fPw7Orj4NvY1tPPzMnHxMG/vLq4trSysK6rqKajoZ6al5OQjouJhoSCgH59e3p6eHh3dHN5eHVxb2pqbnJuamxzdnd5bmxtcG5paGxsa2tta2ljX2hpZ2NkZWViX2BhZWRhXVtZWVpbXV9hYWRmam5xdHh6fX+ChIaIi42QkpWXmZyfoaSmqa2vsrS2ubu+wcTHyszP0tXX2Nna29ra2djW1NLRzs7My8nIyMfGxsbGxsbGxsbGxsbGxsbGxsfHyMrMzc7S1Nfa3eHl5+3v8vT2+Pr7/f3+//////////////////////////////////////////////////r5+Pb08u/t6ufj4N3b2NXT0c/My8jGxMHAvry6t7SysK6qp6SgnZuYlpOQjoyKiIiGg4GAf357fHhzb25uamhnZ2ZlaGlpamlnaGtpY2JlcnBua2toZF9cXmJmaGlnY2dkYmBeW1tcXF1eYGNmaGltb3N3e36Bg4iKjI+RlJaYnJ6ho6apq62wsra5u77AwsXHyczO0dPV2dvd3+Dh4uLi4uHg3t3b29jX1tXU09PT0dHR0dHR0dHR0dHR0dHR0dLS09TV1tjY293f4uXo6+3w8fT29/n7/P3+/v/////////////////////////////////////////////////7+vn49vPx8O7s6ebk4d/d2tnX1tTS0M7MysjGxMK/vbm3tLGuq6imoqCdm5iWlJORj4yMi4mKhHx/f318fXhyZ2hnY2BiY2RkYmJjYV1bXWxpZ2NiYV5cXF1eYGJlZ2hdXV1fXl1dXmVmaGpsbnFzeXp9f4KGio2Rk5WYmp2goqaoq66ws7W3ury/wsTHycvP0dPV19nb3d/h4+Tk5ebn5ubl5eTj4uHg397d3dzc3Nra2tra2tra2tra2tra2trb3Nzd3t/g4OHi5efp6+7x8vT29/j6/P3+/v7/////////////////////////////////////////////////+/v7+ff29PTw7+zq6Obl5OHf3t3c2tjW1dPRz83LyMbDwb67uLWzsa2rqKWjoZ+em5mUlpKNjoiQkI2HhIOCgXx8eXRzcnJxZ2VkY2JgX19gXl1dXVxcXGFiY2RkY2VkY2NhYmNmaGpwcXN1d3l8foSGiIuNkZWXmpyfoqWnqqyxs7W4ur2/wcTGyczOz9LT19nb3N7f4ePl5ujo6enq6+rq6unp6Ofm5uXl5OPj4+Pi4uLi4uLi4uLi4uLi4uLi4uPj5OXl5ubn6Orr7e/x8/X3+Pn6+/z+//////////////////////////////////////////////////////z8+/r5+Pf28/Lw7u3s6urm5eTj4uHe3Nzb2dfV09DOzMrHxcLAvbu4trOwrqyqqKainaGdmJuWlI+NjIqFgoB6enh1dHRxbXNycG5ubm1raWlqZ2dmZmRlZWZnaGtsbW5wcHN2eXp8eXp9f4GEh4mLjpKVmJqcnqSmqayvsrW3u73AwsTHycvO0NPV19nb3N7g4uPk5efp7O3u7+/v8PDw8PDw7+7u7ezr6+rp6enp6enp6enp6enp6enp6enp6enp6urr6+zs7u/w8fL09vf4+fr7+/v9/v/////////////////////////////////////////////////////8+/v6+vn4+Pb29fTy8fDv6+vq6ejn5ubj4uHf3tza2NbU0c7MycfFwb+8ube0sa+wrqupp6WioJ2bmJaUkY6MiomGhIOBfn17enl4d3Z2dXR0dHNzdHR0dHR0dXZ3d3h6e3x9fX+BgoOFh4mLjZCRmJqdoKKlqKqsrrG0t7q9v8PFyMrNz9LU19ja3d/h4uLl5ufo6uvs7O/w8fPz8/Py9fT09PPy8vLx8fDw8PDv7/Dw8PHx8fHx8PDw8PDw8PDw8PDx8fLy8vPz9PX2+Pj5+/v7/Pz9/f3//////////////////////////////////////////////////////Pz7+/r5+fn4+Pf29PPy8vDw7+7t7Ovr6ejn5uTj4N/c2tjV09DOzMvJxsPBvru5trSxr62rqKelo6GenJqXlZSSkI6MioiHhISDgoGAgH9/fn5+fn5+f3+AgIGCg4ODhIWGh4eJi4yPkJOVl5mbnZ+hpKaprK+xtri7vsDDxsjKzM/R1NbZ297f4ePl5+jo6uvs7e7w8PHy8vT19vb19fb29vb19fX19fX19fT09PT09PT09PT19fT09PT09PT09PX19fb29/f19vf3+fn6+/v8/Pz9/f3+//////////////////////////////////////////////////////38/Pv7+vr6+vr5+Pf39vb19PTz8vHw8O/u7ezr6efl4+Hf3dvY1tTS0M3LyMbDwb68uri2tLGwrauopqSin52cm5mXlpSSkI6OjYyLioqJiYmIiIiIiYmKiouLjI2Njo6PkJGSk5WXmZqdn6CipKapqq2wsrW4ur7AwsXIys3P0tTX2dvd4OLk5efp6+3u7u/w8PLz9PX19fb3+Pn5+Pj5+fn4+Pj4+Pn5+fn5+Pj4+Pj5+fn5+fn5+fn5+fn5+fn5+fr6+vv7+fr6+/v8/Pz8/f39/f7+/v/////////////////////////////////////////////////////9/fz8/Pv7+/v7+vr5+fn49/f29fTz8/Py8fDv7u3r6efm4+Hg3tza1tTS0M7LycfFxMG/vry5uLSysK2sqqelpKOhn56dm5mYl5aVlJOTkpOTkpKSkpOTkpKSk5SVlZaYmZqbm52foKCipKanqautsrO2ubu9wMLDxcjKzM/R09ja3N7g4uXm6Onr7e7w8fHy8vP09fb29/j4+fr6+/r6+vr6+vv7+/v7+/v6+vr6+vz8/Pz9/f39/f39/f39/f37+/v8/Pz8/Pz8/f39/f7+/v7+/v7//////////////////////////////////////////////////////////f39/Pz8+/v7+/v6+vr6+vn4+Pf29vX19PPy8fHv7ezr6efl5OPg393b2dfV09DPy8nHxcTCv768uri2tbOwr62sqqmopqWjoqGgoJ6enZydnZycnJydnZycnZ2en6CgoqOkpaWnqaqqq62vsbK0trm6vb/Bw8bIy83P0dPW2Nrd3uHj5Obo6uvs7e/x8vLz9PX19vf3+Pj5+fr6+/v7+/v7+/v8/Pz8/Pz8/Pz8/Pz+/v7+/v////7+/v7+/v7+/f39/f7+/v7+/v7+/v7+/v7+//////////////////////////////////////////////////////////////39/fz8/Pz8+/v7+/r6+vr6+vr5+Pj39/b19PT08vHv7u3r6unn5uTi4N7c2tjW1dHPzcvKyMXEwcC+vLu5t7WzsrCvrq2sqqmpqKempaSkpKSkpKSkpKSkpaWmp6ioqamqq6ytrrCxsrO1t7i6vL6/wcPGx8nMzdHT1dfZ293f4uPl5+nq7O7u7/Dy8/T19ff3+Pj5+fn6+fr6+vr7+/v7+/v8/Pz8/P39/v7+/v7+/v7+/v///////////////////////////v7+/v7+/v7////////////////////////////////////////////////////////////////9/fz8/Pz8/Pv7+/v7+vr6+vr5+fj49/f39vb19fTz8fHv7uzs6+no5ePh397c2tjX1dPR0M7MysbFw8HAv727uri3trW0s7KxsK+uraysq6yrq6urq6usq6ysra6vr7CwsbKztLW3uLm6vL6/wMLExsjKzM7P0tPV19nb3d7h4uXm6Orr7e/w8PHy9PX19vb4+Pj5+fn6+vr6+vr6+vv7/Pz8/Pz8/f39/f7+/v7+//7+/v7//////////////////////////////////////////////////////////////////////////////////////////////////////Pz8/Pz8/Pz8/Pz7+/v7+vj4+Pf39vb29/b19fX08vHx7+7t7Ovq6Ojn5ePi4N7d29rY1tTT0c/Ny8nIx8XDwsHAv769vLu6ubi4t7a1tLS0s7Ozs7OztLKys7O0tba2uLm6u7u9v8C/wMLExcbIysvMz9DS1NbY2tvd3+Hj5ebm5+nq7O3v8PDx8vP09fX29/f3+Pj4+Pj6+vr6+vr7+/39/f39/f39/Pz8/P39/f3+/v7+/v///////////////////////v7//////////////////////////////////////////////////////////////////////////w==
-
- White
-
- 1
- 1
- 1
-
-
-
- Black
-
- 0
- 0
- 0
-
-
-
- Gradient
-
- 0
- 0
- 0
-
-
-
-
-
diff --git a/software/Print3r/models/Rook.amf b/software/Print3r/models/Rook.amf
deleted file mode 100644
index ffa1bc40..00000000
--- a/software/Print3r/models/Rook.amf
+++ /dev/null
@@ -1,31324 +0,0 @@
-
-
-
- Default
-
-
-
-
- 1.01909
- 0
- 0
-
-
-
-
- 0.886075
- 0
- 0.0087185
-
-
-
-
- 1.15211
- 0
- 0.0087185
-
-
-
-
- 0.755333
- 0
- 0.0347248
-
-
-
-
- 1.28285
- 0
- 0.0347248
-
-
-
-
- 0.629103
- 0
- 0.0775739
-
-
-
-
- 1.40908
- 0
- 0.0775739
-
-
-
-
- 0.509547
- 0
- 0.136533
-
-
-
-
- 1.52864
- 0
- 0.136533
-
-
-
-
- 1.01909
- 3.46523
- 0.158005
-
-
-
-
- 1.01909
- 0.499815
- 0.16371
-
-
-
-
- 1.01909
- 0.532646
- 0.163966
-
-
-
-
- 0.896548
- 3.46523
- 0.166769
-
-
-
-
- 1.14164
- 3.46523
- 0.166769
-
-
-
-
- 0.932556
- 0.499815
- 0.168099
-
-
-
-
- 1.10563
- 0.499815
- 0.168099
-
-
-
-
- 0.932582
- 0.532646
- 0.168354
-
-
-
-
- 1.10561
- 0.532646
- 0.168354
-
-
-
-
- 1.01909
- 0.467414
- 0.169007
-
-
-
-
- 1.01909
- 0.56496
- 0.169768
-
-
-
-
- 0.933092
- 0.467414
- 0.173369
-
-
-
-
- 1.1051
- 0.467414
- 0.173369
-
-
-
-
- 0.933169
- 0.56496
- 0.174126
-
-
-
-
- 1.10502
- 0.56496
- 0.174126
-
-
-
-
- 0.769094
- 3.71523
- 0.17752
-
-
-
-
- 1.26909
- 3.71523
- 0.17752
-
-
-
-
- 0.772131
- 3.69362
- 0.178187
-
-
-
-
- 1.26606
- 3.69362
- 0.178187
-
-
-
-
- 1.01909
- 0.436374
- 0.179705
-
-
-
-
- 1.01909
- 0.59583
- 0.180949
-
-
-
-
- 0.846906
- 0.499815
- 0.18122
-
-
-
-
- 1.19128
- 0.499815
- 0.18122
-
-
-
-
- 0.846958
- 0.532646
- 0.181471
-
-
-
-
- 1.19123
- 0.532646
- 0.181471
-
-
-
-
- 0.934174
- 0.436374
- 0.184011
-
-
-
-
- 1.10401
- 0.436374
- 0.184011
-
-
-
-
- 0.9343
- 0.59583
- 0.18525
-
-
-
-
- 1.10389
- 0.59583
- 0.18525
-
-
-
-
- 0.804229
- 3.46523
- 0.185243
-
-
-
-
- 1.23396
- 3.46523
- 0.185243
-
-
-
-
- 0.847973
- 0.467414
- 0.186408
-
-
-
-
- 1.19021
- 0.467414
- 0.186408
-
-
-
-
- 0.848126
- 0.56496
- 0.187154
-
-
-
-
- 1.19006
- 0.56496
- 0.187154
-
-
-
-
- 1.01909
- 0.407589
- 0.195495
-
-
-
-
- 1.01909
- 2.90843
- 0.195495
-
-
-
-
- 0.850126
- 0.436374
- 0.196887
-
-
-
-
- 1.18806
- 0.436374
- 0.196887
-
-
-
-
- 1.01909
- 0.624364
- 0.197187
-
-
-
-
- 0.850377
- 0.59583
- 0.198106
-
-
-
-
- 1.18781
- 0.59583
- 0.198106
-
-
-
-
- 0.935772
- 0.407589
- 0.199721
-
-
-
-
- 1.10242
- 0.407589
- 0.199721
-
-
-
-
- 0.959125
- 2.90843
- 0.199784
-
-
-
-
- 1.07906
- 2.90843
- 0.199784
-
-
-
-
- 0.935943
- 0.624364
- 0.201404
-
-
-
-
- 1.10224
- 0.624364
- 0.201404
-
-
-
-
- 0.763023
- 0.499815
- 0.202939
-
-
-
-
- 1.27516
- 0.499815
- 0.202939
-
-
-
-
- 0.7631
- 0.532646
- 0.203183
-
-
-
-
- 1.27509
- 0.532646
- 0.203183
-
-
-
-
- 0.911725
- 0.407589
- 0.203405
-
-
-
-
- 1.12646
- 0.407589
- 0.203405
-
-
-
-
- 0.901883
- 2.90843
- 0.203878
-
-
-
-
- 1.1363
- 2.90843
- 0.203878
-
-
-
-
- 0.764609
- 0.467414
- 0.207993
-
-
-
-
- 1.27358
- 0.467414
- 0.207993
-
-
-
-
- 0.764837
- 0.56496
- 0.208719
-
-
-
-
- 1.27335
- 0.56496
- 0.208719
-
-
-
-
- 0.398709
- 0
- 0.210592
-
-
-
-
- 1.63948
- 0
- 0.210592
-
-
-
-
- 0.853305
- 0.407589
- 0.212354
-
-
-
-
- 1.18488
- 0.407589
- 0.212354
-
-
-
-
- 0.853645
- 0.624364
- 0.214012
-
-
-
-
- 1.18454
- 0.624364
- 0.214012
-
-
-
-
- 0.840462
- 2.90843
- 0.217239
-
-
-
-
- 1.19773
- 2.90843
- 0.217239
-
-
-
-
- 1.01909
- 0.649744
- 0.218015
-
-
-
-
- 0.767812
- 0.436374
- 0.2182
-
-
-
-
- 1.27038
- 0.436374
- 0.2182
-
-
-
-
- 0.768184
- 0.59583
- 0.219387
-
-
-
-
- 1.27
- 0.59583
- 0.219387
-
-
-
-
- 0.654392
- 3.71523
- 0.220508
-
-
-
-
- 1.3838
- 3.71523
- 0.220508
-
-
-
-
- 0.93805
- 0.649744
- 0.222125
-
-
-
-
- 1.10014
- 0.649744
- 0.222125
-
-
-
-
- 0.806188
- 0.407589
- 0.224553
-
-
-
-
- 1.232
- 0.407589
- 0.224553
-
-
-
-
- 0.787059
- 2.90843
- 0.228857
-
-
-
-
- 1.25113
- 2.90843
- 0.228857
-
-
-
-
- 0.681768
- 0.499815
- 0.233032
-
-
-
-
- 1.35642
- 0.499815
- 0.233032
-
-
-
-
- 0.772539
- 0.407589
- 0.233266
-
-
-
-
- 1.26565
- 0.407589
- 0.233266
-
-
-
-
- 0.681869
- 0.532646
- 0.233268
-
-
-
-
- 1.35632
- 0.532646
- 0.233268
-
-
-
-
- 0.857838
- 0.649744
- 0.234413
-
-
-
-
- 1.18035
- 0.649744
- 0.234413
-
-
-
-
- 0.773045
- 0.624364
- 0.23488
-
-
-
-
- 1.26514
- 0.624364
- 0.23488
-
-
-
-
- 0.683857
- 0.467414
- 0.2379
-
-
-
-
- 1.35433
- 0.467414
- 0.2379
-
-
-
-
- 0.684157
- 0.56496
- 0.2386
-
-
-
-
- 1.35403
- 0.56496
- 0.2386
-
-
-
-
- 1.01909
- 0.671238
- 0.242832
-
-
-
-
- 0.940561
- 0.671238
- 0.246815
-
-
-
-
- 1.09763
- 0.671238
- 0.246815
-
-
-
-
- 0.688076
- 0.436374
- 0.247731
-
-
-
-
- 1.35011
- 0.436374
- 0.247731
-
-
-
-
- 0.688567
- 0.59583
- 0.248874
-
-
-
-
- 1.34962
- 0.59583
- 0.248874
-
-
-
-
- 0.725602
- 2.90843
- 0.251779
-
-
-
-
- 1.31259
- 2.90843
- 0.251779
-
-
-
-
- 0.77928
- 0.649744
- 0.254753
-
-
-
-
- 1.25891
- 0.649744
- 0.254753
-
-
-
-
- 0.704077
- 0.407589
- 0.258621
-
-
-
-
- 1.33411
- 0.407589
- 0.258621
-
-
-
-
- 0.862834
- 0.671238
- 0.258723
-
-
-
-
- 1.17535
- 0.671238
- 0.258723
-
-
-
-
- 0.694303
- 0.407589
- 0.262241
-
-
-
-
- 1.34388
- 0.407589
- 0.262241
-
-
-
-
- 0.69497
- 0.624364
- 0.263796
-
-
-
-
- 1.34322
- 0.624364
- 0.263796
-
-
-
-
- 0.676959
- 2.90843
- 0.269922
-
-
-
-
- 1.36123
- 2.90843
- 0.269922
-
-
-
-
- 1.01909
- 0.688228
- 0.270926
-
-
-
-
- 0.603974
- 0.499815
- 0.271192
-
-
-
-
- 1.43421
- 0.499815
- 0.271192
-
-
-
-
- 0.604099
- 0.532646
- 0.271416
-
-
-
-
- 1.43409
- 0.532646
- 0.271416
-
-
-
-
- 0.943403
- 0.688228
- 0.274765
-
-
-
-
- 1.09478
- 0.688228
- 0.274765
-
-
-
-
- 0.606545
- 0.467414
- 0.275823
-
-
-
-
- 1.43164
- 0.467414
- 0.275823
-
-
-
-
- 0.606915
- 0.56496
- 0.276489
-
-
-
-
- 1.43127
- 0.56496
- 0.276489
-
-
-
-
- 0.78671
- 0.671238
- 0.278432
-
-
-
-
- 1.25148
- 0.671238
- 0.278432
-
-
-
-
- 0.544453
- 3.71523
- 0.280539
-
-
-
-
- 1.49373
- 3.71523
- 0.280539
-
-
-
-
- 0.703184
- 0.649744
- 0.282936
-
-
-
-
- 1.335
- 0.649744
- 0.282936
-
-
-
-
- 0.611737
- 0.436374
- 0.285177
-
-
-
-
- 1.42645
- 0.436374
- 0.285177
-
-
-
-
- 0.868489
- 0.688228
- 0.286241
-
-
-
-
- 1.1697
- 0.688228
- 0.286241
-
-
-
-
- 0.612341
- 0.59583
- 0.286265
-
-
-
-
- 1.42585
- 0.59583
- 0.286265
-
-
-
-
- 0.298486
- 0
- 0.298486
-
-
-
-
- 1.7397
- 0
- 0.298486
-
-
-
-
- 0.6194
- 0.407589
- 0.298983
-
-
-
-
- 1.41879
- 0.407589
- 0.298983
-
-
-
-
- 0.620221
- 0.624364
- 0.300462
-
-
-
-
- 1.41797
- 0.624364
- 0.300462
-
-
-
-
- 1.01909
- 0.700224
- 0.301488
-
-
-
-
- 0.616989
- 2.90843
- 0.302668
-
-
-
-
- 1.4212
- 2.90843
- 0.302668
-
-
-
-
- 0.946495
- 0.700224
- 0.30517
-
-
-
-
- 1.09169
- 0.700224
- 0.30517
-
-
-
-
- 0.79512
- 0.688228
- 0.305238
-
-
-
-
- 1.24307
- 0.688228
- 0.305238
-
-
-
-
- 0.712971
- 0.671238
- 0.305742
-
-
-
-
- 1.32522
- 0.671238
- 0.305742
-
-
-
-
- 0.607605
- 0.407589
- 0.306335
-
-
-
-
- 1.43058
- 0.407589
- 0.306335
-
-
-
-
- 0.874641
- 0.700224
- 0.316177
-
-
-
-
- 1.16355
- 0.700224
- 0.316177
-
-
-
-
- 0.53044
- 0.499815
- 0.317026
-
-
-
-
- 1.50775
- 0.499815
- 0.317026
-
-
-
-
- 0.530587
- 0.532646
- 0.317236
-
-
-
-
- 1.5076
- 0.532646
- 0.317236
-
-
-
-
- 0.630328
- 0.649744
- 0.318673
-
-
-
-
- 1.40786
- 0.649744
- 0.318673
-
-
-
-
- 0.533466
- 0.467414
- 0.321374
-
-
-
-
- 1.50472
- 0.467414
- 0.321374
-
-
-
-
- 0.533901
- 0.56496
- 0.321999
-
-
-
-
- 1.50429
- 0.56496
- 0.321999
-
-
-
-
- 0.573823
- 2.90843
- 0.326238
-
-
-
-
- 1.46436
- 2.90843
- 0.326238
-
-
-
-
- 0.539577
- 0.436374
- 0.330154
-
-
-
-
- 1.49861
- 0.436374
- 0.330154
-
-
-
-
- 0.540288
- 0.59583
- 0.331175
-
-
-
-
- 1.4979
- 0.59583
- 0.331175
-
-
-
-
- 0.72405
- 0.688228
- 0.331559
-
-
-
-
- 1.31414
- 0.688228
- 0.331559
-
-
-
-
- 1.01909
- 0.706882
- 0.333637
-
-
-
-
- 0.804269
- 0.700224
- 0.334398
-
-
-
-
- 1.23392
- 0.700224
- 0.334398
-
-
-
-
- 0.949773
- 0.706882
- 0.337601
-
-
-
-
- 1.08841
- 0.706882
- 0.337601
-
-
-
-
- 0.940958
- 0.706882
- 0.338105
-
-
-
-
- 1.09723
- 0.706882
- 0.338105
-
-
-
-
- 0.642373
- 0.671238
- 0.340372
-
-
-
-
- 1.39581
- 0.671238
- 0.340372
-
-
-
-
- 0.548598
- 0.407589
- 0.343114
-
-
-
-
- 1.48959
- 0.407589
- 0.343114
-
-
-
-
- 0.549565
- 0.624364
- 0.344503
-
-
-
-
- 1.48862
- 0.624364
- 0.344503
-
-
-
-
- 0.881246
- 0.706882
- 0.348439
-
-
-
-
- 1.15694
- 0.706882
- 0.348439
-
-
-
-
- 0.86384
- 0.706882
- 0.351451
-
-
-
-
- 1.17435
- 0.706882
- 0.351451
-
-
-
-
- 0.444177
- 3.71523
- 0.355605
-
-
-
-
- 1.59401
- 3.71523
- 0.355605
-
-
-
-
- 0.736102
- 0.700224
- 0.359644
-
-
-
-
- 1.30209
- 0.700224
- 0.359644
-
-
-
-
- 0.561463
- 0.649744
- 0.361597
-
-
-
-
- 1.47672
- 0.649744
- 0.361597
-
-
-
-
- 0.656007
- 0.688228
- 0.364936
-
-
-
-
- 1.38218
- 0.688228
- 0.364936
-
-
-
-
- 0.814176
- 0.706882
- 0.366034
-
-
-
-
- 1.22401
- 0.706882
- 0.366034
-
-
-
-
- 0.518361
- 0.407589
- 0.366519
-
-
-
-
- 1.51983
- 0.407589
- 0.366519
-
-
-
-
- 0.516934
- 2.90843
- 0.368825
-
-
-
-
- 1.52125
- 2.90843
- 0.368825
-
-
-
-
- 0.46192
- 0.499815
- 0.370065
-
-
-
-
- 1.57627
- 0.499815
- 0.370065
-
-
-
-
- 0.462087
- 0.532646
- 0.370259
-
-
-
-
- 1.5761
- 0.532646
- 0.370259
-
-
-
-
- 0.788747
- 0.706882
- 0.3735
-
-
-
-
- 1.24944
- 0.706882
- 0.3735
-
-
-
-
- 0.465371
- 0.467414
- 0.374084
-
-
-
-
- 1.57282
- 0.467414
- 0.374084
-
-
-
-
- 0.465867
- 0.56496
- 0.374661
-
-
-
-
- 1.57232
- 0.56496
- 0.374661
-
-
-
-
- 0.57564
- 0.671238
- 0.381967
-
-
-
-
- 1.46255
- 0.671238
- 0.381967
-
-
-
-
- 0.472339
- 0.436374
- 0.3822
-
-
-
-
- 1.56585
- 0.436374
- 0.3822
-
-
-
-
- 0.47315
- 0.59583
- 0.383145
-
-
-
-
- 1.56504
- 0.59583
- 0.383145
-
-
-
-
- 1.01909
- 0.891547
- 0.387359
-
-
-
-
- 0.749211
- 0.706882
- 0.390208
-
-
-
-
- 1.28898
- 0.706882
- 0.390208
-
-
-
-
- 0.769094
- 3.71523
- 0.39131
-
-
-
-
- 1.26909
- 3.71523
- 0.39131
-
-
-
-
- 0.947081
- 0.891547
- 0.391477
-
-
-
-
- 1.09111
- 0.891547
- 0.391477
-
-
-
-
- 0.670838
- 0.700224
- 0.391657
-
-
-
-
- 1.36735
- 0.700224
- 0.391657
-
-
-
-
- 0.482624
- 0.407589
- 0.394182
-
-
-
-
- 1.55556
- 0.407589
- 0.394182
-
-
-
-
- 0.483726
- 0.624364
- 0.395465
-
-
-
-
- 1.55446
- 0.624364
- 0.395465
-
-
-
-
- 0.479751
- 2.90843
- 0.396659
-
-
-
-
- 1.55844
- 2.90843
- 0.396659
-
-
-
-
- 0.75423
- 3.71523
- 0.397435
-
-
-
-
- 1.28396
- 3.71523
- 0.397435
-
-
-
-
- 0.210592
- 0
- 0.398709
-
-
-
-
- 1.8276
- 0
- 0.398709
-
-
-
-
- 0.876008
- 0.891547
- 0.403776
-
-
-
-
- 1.16218
- 0.891547
- 0.403776
-
-
-
-
- 0.716656
- 0.706882
- 0.403966
-
-
-
-
- 1.32153
- 0.706882
- 0.403966
-
-
-
-
- 0.59169
- 0.688228
- 0.405025
-
-
-
-
- 1.4465
- 0.688228
- 0.405025
-
-
-
-
- 0.497293
- 0.649744
- 0.411269
-
-
-
-
- 1.54089
- 0.649744
- 0.411269
-
-
-
-
- 0.686981
- 0.706882
- 0.420724
-
-
-
-
- 1.35121
- 0.706882
- 0.420724
-
-
-
-
- 0.8068
- 0.891547
- 0.424098
-
-
-
-
- 1.23139
- 0.891547
- 0.424098
-
-
-
-
- 0.971314
- 3.46523
- 0.427235
-
-
-
-
- 1.06687
- 3.46523
- 0.427235
-
-
-
-
- 0.399118
- 0.499815
- 0.429763
-
-
-
-
- 1.63907
- 0.499815
- 0.429763
-
-
-
-
- 0.399304
- 0.532646
- 0.429939
-
-
-
-
- 1.63888
- 0.532646
- 0.429939
-
-
-
-
- 0.513459
- 0.671238
- 0.430099
-
-
-
-
- 1.52473
- 0.671238
- 0.430099
-
-
-
-
- 0.609148
- 0.700224
- 0.430109
-
-
-
-
- 1.42904
- 0.700224
- 0.430109
-
-
-
-
- 1.01909
- 1.07829
- 0.433358
-
-
-
-
- 0.402957
- 0.467414
- 0.433412
-
-
-
-
- 1.63523
- 0.467414
- 0.433412
-
-
-
-
- 0.403509
- 0.56496
- 0.433937
-
-
-
-
- 1.63468
- 0.56496
- 0.433937
-
-
-
-
- 0.952325
- 1.07829
- 0.437176
-
-
-
-
- 1.08586
- 1.07829
- 0.437176
-
-
-
-
- 0.437268
- 0.407589
- 0.437296
-
-
-
-
- 1.60092
- 0.407589
- 0.437296
-
-
-
-
- 0.410711
- 0.436374
- 0.440782
-
-
-
-
- 1.62748
- 0.436374
- 0.440782
-
-
-
-
- 0.411613
- 0.59583
- 0.44164
-
-
-
-
- 1.62657
- 0.59583
- 0.44164
-
-
-
-
- 0.648508
- 0.706882
- 0.442451
-
-
-
-
- 1.38968
- 0.706882
- 0.442451
-
-
-
-
- 0.876992
- 3.46523
- 0.442563
-
-
-
-
- 1.1612
- 3.46523
- 0.442563
-
-
-
-
- 0.355605
- 3.71523
- 0.444177
-
-
-
-
- 1.68258
- 3.71523
- 0.444177
-
-
-
-
- 0.657939
- 3.71523
- 0.447972
-
-
-
-
- 1.38025
- 3.71523
- 0.447972
-
-
-
-
- 0.886427
- 1.07829
- 0.44858
-
-
-
-
- 1.15176
- 1.07829
- 0.44858
-
-
-
-
- 0.427569
- 2.90843
- 0.448842
-
-
-
-
- 1.61062
- 2.90843
- 0.448842
-
-
-
-
- 0.531758
- 0.688228
- 0.451416
-
-
-
-
- 1.50643
- 0.688228
- 0.451416
-
-
-
-
- 0.422155
- 0.407589
- 0.451662
-
-
-
-
- 1.61603
- 0.407589
- 0.451662
-
-
-
-
- 0.740359
- 0.891547
- 0.452176
-
-
-
-
- 1.29783
- 0.891547
- 0.452176
-
-
-
-
- 0.423382
- 0.624364
- 0.452827
-
-
-
-
- 1.61481
- 0.624364
- 0.452827
-
-
-
-
- 0.628089
- 0.706882
- 0.457287
-
-
-
-
- 1.4101
- 0.706882
- 0.457287
-
-
-
-
- 0.804229
- 3.46523
- 0.465548
-
-
-
-
- 1.23396
- 3.46523
- 0.465548
-
-
-
-
- 0.438477
- 0.649744
- 0.467177
-
-
-
-
- 1.59971
- 0.649744
- 0.467177
-
-
-
-
- 0.822258
- 1.07829
- 0.467422
-
-
-
-
- 1.21593
- 1.07829
- 0.467422
-
-
-
-
- 1.01909
- 1.26678
- 0.471556
-
-
-
-
- 0.551665
- 0.700224
- 0.474604
-
-
-
-
- 1.48652
- 0.700224
- 0.474604
-
-
-
-
- 0.956679
- 1.26678
- 0.475125
-
-
-
-
- 1.08151
- 1.26678
- 0.475125
-
-
-
-
- 0.396659
- 2.90843
- 0.479751
-
-
-
-
- 1.64153
- 2.90843
- 0.479751
-
-
-
-
- 0.456465
- 0.671238
- 0.484275
-
-
-
-
- 1.58172
- 0.671238
- 0.484275
-
-
-
-
- 0.895078
- 1.26678
- 0.485785
-
-
-
-
- 1.14311
- 1.26678
- 0.485785
-
-
-
-
- 0.677552
- 0.891547
- 0.487644
-
-
-
-
- 1.36064
- 0.891547
- 0.487644
-
-
-
-
- 0.585191
- 0.706882
- 0.488453
-
-
-
-
- 1.453
- 0.706882
- 0.488453
-
-
-
-
- 1.01909
- 2.79825
- 0.49123
-
-
-
-
- 0.980608
- 2.79825
- 0.493431
-
-
-
-
- 1.05758
- 2.79825
- 0.493431
-
-
-
-
- 0.760655
- 1.07829
- 0.493455
-
-
-
-
- 1.27753
- 1.07829
- 0.493455
-
-
-
-
- 0.958922
- 2.79825
- 0.494671
-
-
-
-
- 1.07927
- 2.79825
- 0.494671
-
-
-
-
- 0.342677
- 0.499815
- 0.495508
-
-
-
-
- 1.69551
- 0.499815
- 0.495508
-
-
-
-
- 0.34288
- 0.532646
- 0.495665
-
-
-
-
- 1.69531
- 0.532646
- 0.495665
-
-
-
-
- 0.346866
- 0.467414
- 0.498751
-
-
-
-
- 1.69132
- 0.467414
- 0.498751
-
-
-
-
- 0.347468
- 0.56496
- 0.499217
-
-
-
-
- 1.69072
- 0.56496
- 0.499217
-
-
-
-
- 0.573107
- 0.706882
- 0.499544
-
-
-
-
- 1.46508
- 0.706882
- 0.499544
-
-
-
-
- 1.01909
- 1.45669
- 0.501886
-
-
-
-
- 0.835094
- 1.26678
- 0.503398
-
-
-
-
- 1.20309
- 1.26678
- 0.503398
-
-
-
-
- 0.476827
- 0.688228
- 0.503631
-
-
-
-
- 1.56136
- 0.688228
- 0.503631
-
-
-
-
- 0.904364
- 2.79825
- 0.504112
-
-
-
-
- 1.13382
- 2.79825
- 0.504112
-
-
-
-
- 0.899534
- 2.79825
- 0.504948
-
-
-
-
- 1.13865
- 2.79825
- 0.504948
-
-
-
-
- 0.960137
- 1.45669
- 0.505257
-
-
-
-
- 1.07805
- 1.45669
- 0.505257
-
-
-
-
- 0.355325
- 0.436374
- 0.505299
-
-
-
-
- 1.68286
- 0.436374
- 0.505299
-
-
-
-
- 0.356309
- 0.59583
- 0.506061
-
-
-
-
- 1.68188
- 0.59583
- 0.506061
-
-
-
-
- 0.136533
- 0
- 0.509547
-
-
-
-
- 1.90165
- 0
- 0.509547
-
-
-
-
- 0.571001
- 3.71523
- 0.513302
-
-
-
-
- 1.46719
- 3.71523
- 0.513302
-
-
-
-
- 0.367812
- 0.407589
- 0.514964
-
-
-
-
- 1.67038
- 0.407589
- 0.514964
-
-
-
-
- 0.901948
- 1.45669
- 0.515327
-
-
-
-
- 1.13624
- 1.45669
- 0.515327
-
-
-
-
- 0.36915
- 0.624364
- 0.516
-
-
-
-
- 1.66904
- 0.624364
- 0.516
-
-
-
-
- 1.01909
- 2.60761
- 0.516671
-
-
-
-
- 0.365828
- 0.407589
- 0.517815
-
-
-
-
- 1.67236
- 0.407589
- 0.517815
-
-
-
-
- 0.961822
- 2.60761
- 0.519946
-
-
-
-
- 1.07637
- 2.60761
- 0.519946
-
-
-
-
- 0.841706
- 2.79825
- 0.521928
-
-
-
-
- 1.19648
- 2.79825
- 0.521928
-
-
-
-
- 1.01909
- 1.6477
- 0.524296
-
-
-
-
- 0.498978
- 0.700224
- 0.524687
-
-
-
-
- 1.53921
- 0.700224
- 0.524687
-
-
-
-
- 0.702421
- 1.07829
- 0.526341
-
-
-
-
- 1.33577
- 1.07829
- 0.526341
-
-
-
-
- 0.830737
- 2.79825
- 0.526564
-
-
-
-
- 1.20745
- 2.79825
- 0.526564
-
-
-
-
- 0.962691
- 1.6477
- 0.527521
-
-
-
-
- 1.0755
- 1.6477
- 0.527521
-
-
-
-
- 0.777508
- 1.26678
- 0.527734
-
-
-
-
- 1.26068
- 1.26678
- 0.527734
-
-
-
-
- 0.38562
- 0.649744
- 0.528748
-
-
-
-
- 1.65257
- 0.649744
- 0.528748
-
-
-
-
- 0.905297
- 2.60761
- 0.529728
-
-
-
-
- 1.13289
- 2.60761
- 0.529728
-
-
-
-
- 0.619198
- 0.891547
- 0.530041
-
-
-
-
- 1.41899
- 0.891547
- 0.530041
-
-
-
-
- 0.845286
- 1.45669
- 0.531964
-
-
-
-
- 1.1929
- 1.45669
- 0.531964
-
-
-
-
- 1.01909
- 2.41609
- 0.534167
-
-
-
-
- 0.907024
- 1.6477
- 0.537155
-
-
-
-
- 1.13116
- 1.6477
- 0.537155
-
-
-
-
- 0.963816
- 2.41609
- 0.537328
-
-
-
-
- 1.07437
- 2.41609
- 0.537328
-
-
-
-
- 1.01909
- 1.83948
- 0.538747
-
-
-
-
- 0.350796
- 2.90843
- 0.541018
-
-
-
-
- 1.68739
- 2.90843
- 0.541018
-
-
-
-
- 0.527531
- 0.706882
- 0.541373
-
-
-
-
- 1.51066
- 0.706882
- 0.541373
-
-
-
-
- 0.964338
- 1.83948
- 0.541878
-
-
-
-
- 1.07385
- 1.83948
- 0.541878
-
-
-
-
- 1.01909
- 2.22401
- 0.543687
-
-
-
-
- 0.405245
- 0.671238
- 0.54394
-
-
-
-
- 1.63294
- 0.671238
- 0.54394
-
-
-
-
- 0.280539
- 3.71523
- 0.544453
-
-
-
-
- 1.75765
- 3.71523
- 0.544453
-
-
-
-
- 1.01909
- 2.03169
- 0.545214
-
-
-
-
- 0.786189
- 2.79825
- 0.54539
-
-
-
-
- 1.252
- 2.79825
- 0.54539
-
-
-
-
- 0.850255
- 2.60761
- 0.54589
-
-
-
-
- 1.18793
- 2.60761
- 0.54589
-
-
-
-
- 0.964902
- 2.22401
- 0.546786
-
-
-
-
- 1.07329
- 2.22401
- 0.546786
-
-
-
-
- 0.909259
- 2.41609
- 0.546769
-
-
-
-
- 1.12893
- 2.41609
- 0.546769
-
-
-
-
- 0.522575
- 0.706882
- 0.547093
-
-
-
-
- 1.51561
- 0.706882
- 0.547093
-
-
-
-
- 0.965076
- 2.03169
- 0.548303
-
-
-
-
- 1.07311
- 2.03169
- 0.548303
-
-
-
-
- 0.910297
- 1.83948
- 0.55123
-
-
-
-
- 1.12789
- 1.83948
- 0.55123
-
-
-
-
- 0.852817
- 1.6477
- 0.553071
-
-
-
-
- 1.18537
- 1.6477
- 0.553071
-
-
-
-
- 1.01909
- 3.07104
- 0.554521
-
-
-
-
- 0.790891
- 1.45669
- 0.554952
-
-
-
-
- 1.2473
- 1.45669
- 0.554952
-
-
-
-
- 0.911416
- 2.22401
- 0.556042
-
-
-
-
- 1.12677
- 2.22401
- 0.556042
-
-
-
-
- 0.981711
- 3.07104
- 0.556027
-
-
-
-
- 1.05648
- 3.07104
- 0.556027
-
-
-
-
- 0.911762
- 2.03169
- 0.55753
-
-
-
-
- 1.12643
- 2.03169
- 0.55753
-
-
-
-
- 0.723072
- 1.26678
- 0.558475
-
-
-
-
- 1.31512
- 1.26678
- 0.558475
-
-
-
-
- 0.76117
- 2.79825
- 0.559518
-
-
-
-
- 1.27702
- 2.79825
- 0.559518
-
-
-
-
- 0.427461
- 0.688228
- 0.561136
-
-
-
-
- 1.61073
- 0.688228
- 0.561136
-
-
-
-
- 0.856134
- 2.41609
- 0.562368
-
-
-
-
- 1.18205
- 2.41609
- 0.562368
-
-
-
-
- 0.648316
- 1.07829
- 0.565651
-
-
-
-
- 1.38987
- 1.07829
- 0.565651
-
-
-
-
- 0.293177
- 0.499815
- 0.566627
-
-
-
-
- 1.74501
- 0.499815
- 0.566627
-
-
-
-
- 0.857674
- 1.83948
- 0.566682
-
-
-
-
- 1.18051
- 1.83948
- 0.566682
-
-
-
-
- 0.293395
- 0.532646
- 0.566762
-
-
-
-
- 1.74479
- 0.532646
- 0.566762
-
-
-
-
- 0.907914
- 3.07104
- 0.56802
-
-
-
-
- 1.13027
- 3.07104
- 0.56802
-
-
-
-
- 0.797414
- 2.60761
- 0.568221
-
-
-
-
- 1.24077
- 2.60761
- 0.568221
-
-
-
-
- 0.297673
- 0.467414
- 0.569429
-
-
-
-
- 1.74051
- 0.467414
- 0.569429
-
-
-
-
- 0.298319
- 0.56496
- 0.569831
-
-
-
-
- 1.73987
- 0.56496
- 0.569831
-
-
-
-
- 0.859334
- 2.22401
- 0.571334
-
-
-
-
- 1.17885
- 2.22401
- 0.571334
-
-
-
-
- 0.859847
- 2.03169
- 0.572773
-
-
-
-
- 1.17834
- 2.03169
- 0.572773
-
-
-
-
- 0.326238
- 2.90843
- 0.573823
-
-
-
-
- 1.71195
- 2.90843
- 0.573823
-
-
-
-
- 0.733709
- 2.79825
- 0.575027
-
-
-
-
- 1.30448
- 2.79825
- 0.575027
-
-
-
-
- 0.800778
- 1.6477
- 0.575063
-
-
-
-
- 1.23741
- 1.6477
- 0.575063
-
-
-
-
- 0.306751
- 0.436374
- 0.575087
-
-
-
-
- 1.73144
- 0.436374
- 0.575087
-
-
-
-
- 0.307807
- 0.59583
- 0.575745
-
-
-
-
- 1.73038
- 0.59583
- 0.575745
-
-
-
-
- 0.566056
- 0.891547
- 0.578814
-
-
-
-
- 1.47213
- 0.891547
- 0.578814
-
-
-
-
- 0.451628
- 0.700224
- 0.579843
-
-
-
-
- 1.58656
- 0.700224
- 0.579843
-
-
-
-
- 0.320152
- 0.407589
- 0.58344
-
-
-
-
- 1.71804
- 0.407589
- 0.58344
-
-
-
-
- 0.805134
- 2.41609
- 0.583921
-
-
-
-
- 1.23305
- 2.41609
- 0.583921
-
-
-
-
- 0.73947
- 1.45669
- 0.583991
-
-
-
-
- 1.29872
- 1.45669
- 0.583991
-
-
-
-
- 0.321587
- 0.624364
- 0.584335
-
-
-
-
- 1.7166
- 0.624364
- 0.584335
-
-
-
-
- 0.807155
- 1.83948
- 0.588031
-
-
-
-
- 1.23103
- 1.83948
- 0.588031
-
-
-
-
- 0.836997
- 3.07104
- 0.591696
-
-
-
-
- 1.20119
- 3.07104
- 0.591696
-
-
-
-
- 0.495669
- 3.71523
- 0.591731
-
-
-
-
- 1.54252
- 3.71523
- 0.591731
-
-
-
-
- 0.809334
- 2.22401
- 0.592464
-
-
-
-
- 1.22885
- 2.22401
- 0.592464
-
-
-
-
- 0.810008
- 2.03169
- 0.593835
-
-
-
-
- 1.22818
- 2.03169
- 0.593835
-
-
-
-
- 0.672495
- 1.26678
- 0.595222
-
-
-
-
- 1.36569
- 1.26678
- 0.595222
-
-
-
-
- 0.339263
- 0.649744
- 0.595352
-
-
-
-
- 1.69893
- 0.649744
- 0.595352
-
-
-
-
- 0.747464
- 2.60761
- 0.596429
-
-
-
-
- 1.29072
- 2.60761
- 0.596429
-
-
-
-
- 0.477105
- 0.706882
- 0.599568
-
-
-
-
- 1.56108
- 0.706882
- 0.599568
-
-
-
-
- 0.476279
- 0.706882
- 0.600521
-
-
-
-
- 1.56191
- 0.706882
- 0.600521
-
-
-
-
- 0.696851
- 2.79825
- 0.601806
-
-
-
-
- 1.34134
- 2.79825
- 0.601806
-
-
-
-
- 0.751586
- 1.6477
- 0.602843
-
-
-
-
- 1.2866
- 1.6477
- 0.602843
-
-
-
-
- 0.306658
- 0.407589
- 0.60775
-
-
-
-
- 1.73153
- 0.407589
- 0.60775
-
-
-
-
- 0.360324
- 0.671238
- 0.608479
-
-
-
-
- 1.67786
- 0.671238
- 0.608479
-
-
-
-
- 0.684949
- 2.79825
- 0.610452
-
-
-
-
- 1.35324
- 2.79825
- 0.610452
-
-
-
-
- 0.599044
- 1.07829
- 0.610873
-
-
-
-
- 1.43914
- 1.07829
- 0.610873
-
-
-
-
- 0.756923
- 2.41609
- 0.611147
-
-
-
-
- 1.28126
- 2.41609
- 0.611147
-
-
-
-
- 0.759399
- 1.83948
- 0.615
-
-
-
-
- 1.27879
- 1.83948
- 0.615
-
-
-
-
- 0.691695
- 1.45669
- 0.618702
-
-
-
-
- 1.34649
- 1.45669
- 0.618702
-
-
-
-
- 0.762069
- 2.22401
- 0.619156
-
-
-
-
- 1.27612
- 2.22401
- 0.619156
-
-
-
-
- 0.762895
- 2.03169
- 0.620441
-
-
-
-
- 1.27529
- 2.03169
- 0.620441
-
-
-
-
- 0.384166
- 0.688228
- 0.62334
-
-
-
-
- 1.65402
- 0.688228
- 0.62334
-
-
-
-
- 0.770795
- 3.07104
- 0.626441
-
-
-
-
- 1.26739
- 3.07104
- 0.626441
-
-
-
-
- 0.0775739
- 0
- 0.629103
-
-
-
-
- 1.96061
- 0
- 0.629103
-
-
-
-
- 0.701054
- 2.60761
- 0.630148
-
-
-
-
- 1.33713
- 2.60761
- 0.630148
-
-
-
-
- 0.518821
- 0.891547
- 0.633326
-
-
-
-
- 1.51937
- 0.891547
- 0.633326
-
-
-
-
- 0.70588
- 1.6477
- 0.63605
-
-
-
-
- 1.33231
- 1.6477
- 0.63605
-
-
-
-
- 0.626437
- 1.26678
- 0.637494
-
-
-
-
- 1.41175
- 1.26678
- 0.637494
-
-
-
-
- 0.410102
- 0.700224
- 0.639506
-
-
-
-
- 1.62809
- 0.700224
- 0.639506
-
-
-
-
- 0.251126
- 0.499815
- 0.642388
-
-
-
-
- 1.78706
- 0.499815
- 0.642388
-
-
-
-
- 0.251357
- 0.532646
- 0.642501
-
-
-
-
- 1.78683
- 0.532646
- 0.642501
-
-
-
-
- 0.28825
- 2.90843
- 0.643393
-
-
-
-
- 1.74994
- 2.90843
- 0.643393
-
-
-
-
- 0.712129
- 2.41609
- 0.643692
-
-
-
-
- 1.32606
- 2.41609
- 0.643692
-
-
-
-
- 0.255882
- 0.467414
- 0.644721
-
-
-
-
- 1.78231
- 0.467414
- 0.644721
-
-
-
-
- 0.256566
- 0.56496
- 0.645056
-
-
-
-
- 1.78162
- 0.56496
- 0.645056
-
-
-
-
- 0.715028
- 1.83948
- 0.647237
-
-
-
-
- 1.32316
- 1.83948
- 0.647237
-
-
-
-
- 0.265486
- 0.436374
- 0.649432
-
-
-
-
- 1.7727
- 0.436374
- 0.649432
-
-
-
-
- 0.266604
- 0.59583
- 0.64998
-
-
-
-
- 1.77158
- 0.59583
- 0.64998
-
-
-
-
- 0.718155
- 2.22401
- 0.651062
-
-
-
-
- 1.32003
- 2.22401
- 0.651062
-
-
-
-
- 0.640546
- 2.79825
- 0.651206
-
-
-
-
- 1.39764
- 2.79825
- 0.651206
-
-
-
-
- 0.719122
- 2.03169
- 0.652244
-
-
-
-
- 1.31907
- 2.03169
- 0.652244
-
-
-
-
- 0.63917
- 2.79825
- 0.652793
-
-
-
-
- 1.39902
- 2.79825
- 0.652793
-
-
-
-
- 0.220508
- 3.71523
- 0.654392
-
-
-
-
- 1.81768
- 3.71523
- 0.654392
-
-
-
-
- 0.279663
- 0.407589
- 0.656386
-
-
-
-
- 1.75852
- 0.407589
- 0.656386
-
-
-
-
- 0.4378
- 0.706882
- 0.656796
-
-
-
-
- 1.60039
- 0.706882
- 0.656796
-
-
-
-
- 0.281182
- 0.624364
- 0.657131
-
-
-
-
- 1.75701
- 0.624364
- 0.657131
-
-
-
-
- 0.648187
- 1.45669
- 0.658632
-
-
-
-
- 1.39
- 1.45669
- 0.658632
-
-
-
-
- 0.555248
- 1.07829
- 0.661415
-
-
-
-
- 1.48294
- 1.07829
- 0.661415
-
-
-
-
- 0.432104
- 0.706882
- 0.665126
-
-
-
-
- 1.60608
- 0.706882
- 0.665126
-
-
-
-
- 0.299881
- 0.649744
- 0.666303
-
-
-
-
- 1.73831
- 0.649744
- 0.666303
-
-
-
-
- 0.658791
- 2.60761
- 0.668937
-
-
-
-
- 1.3794
- 2.60761
- 0.668937
-
-
-
-
- 0.711025
- 3.07104
- 0.671356
-
-
-
-
- 1.32716
- 3.07104
- 0.671356
-
-
-
-
- 0.664258
- 1.6477
- 0.67425
-
-
-
-
- 1.37393
- 1.6477
- 0.67425
-
-
-
-
- 0.269922
- 2.90843
- 0.676959
-
-
-
-
- 1.76827
- 2.90843
- 0.676959
-
-
-
-
- 0.322163
- 0.671238
- 0.677233
-
-
-
-
- 1.71602
- 0.671238
- 0.677233
-
-
-
-
- 0.671337
- 2.41609
- 0.68113
-
-
-
-
- 1.36685
- 2.41609
- 0.68113
-
-
-
-
- 0.433893
- 3.71523
- 0.681228
-
-
-
-
- 1.60429
- 3.71523
- 0.681228
-
-
-
-
- 0.674622
- 1.83948
- 0.684322
-
-
-
-
- 1.36357
- 1.83948
- 0.684322
-
-
-
-
- 0.585497
- 1.26678
- 0.684741
-
-
-
-
- 1.45269
- 1.26678
- 0.684741
-
-
-
-
- 0.678164
- 2.22401
- 0.687765
-
-
-
-
- 1.36002
- 2.22401
- 0.687765
-
-
-
-
- 0.67926
- 2.03169
- 0.688829
-
-
-
-
- 1.35893
- 2.03169
- 0.688829
-
-
-
-
- 0.347386
- 0.688228
- 0.689605
-
-
-
-
- 1.6908
- 0.688228
- 0.689605
-
-
-
-
- 0.478108
- 0.891547
- 0.692867
-
-
-
-
- 1.56008
- 0.891547
- 0.692867
-
-
-
-
- 0.601077
- 2.79825
- 0.696755
-
-
-
-
- 1.43711
- 2.79825
- 0.696755
-
-
-
-
- 0.374824
- 0.700224
- 0.703064
-
-
-
-
- 1.66336
- 0.700224
- 0.703064
-
-
-
-
- 0.609516
- 1.45669
- 0.703262
-
-
-
-
- 1.42867
- 1.45669
- 0.703262
-
-
-
-
- 0.259099
- 0.407589
- 0.704307
-
-
-
-
- 1.77909
- 0.407589
- 0.704307
-
-
-
-
- 0.621224
- 2.60761
- 0.712291
-
-
-
-
- 1.41696
- 2.60761
- 0.712291
-
-
-
-
- 0.5904
- 2.79825
- 0.71237
-
-
-
-
- 1.44779
- 2.79825
- 0.71237
-
-
-
-
- 0.5175
- 1.07829
- 0.716621
-
-
-
-
- 1.52069
- 1.07829
- 0.716621
-
-
-
-
- 0.627262
- 1.6477
- 0.716946
-
-
-
-
- 1.41093
- 1.6477
- 0.716946
-
-
-
-
- 0.404413
- 0.706882
- 0.717605
-
-
-
-
- 1.63377
- 0.706882
- 0.717605
-
-
-
-
- 0.216956
- 0.499815
- 0.722015
-
-
-
-
- 1.82123
- 0.499815
- 0.722015
-
-
-
-
- 0.217196
- 0.532646
- 0.722104
-
-
-
-
- 1.82099
- 0.532646
- 0.722104
-
-
-
-
- 0.635079
- 2.41609
- 0.722974
-
-
-
-
- 1.40311
- 2.41609
- 0.722974
-
-
-
-
- 0.221923
- 0.467414
- 0.723854
-
-
-
-
- 1.81626
- 0.467414
- 0.723854
-
-
-
-
- 0.222637
- 0.56496
- 0.724119
-
-
-
-
- 1.81555
- 0.56496
- 0.724119
-
-
-
-
- 0.659233
- 3.07104
- 0.725277
-
-
-
-
- 1.37895
- 3.07104
- 0.725277
-
-
-
-
- 0.638706
- 1.83948
- 0.725771
-
-
-
-
- 1.39948
- 1.83948
- 0.725771
-
-
-
-
- 0.231955
- 0.436374
- 0.72757
-
-
-
-
- 1.80623
- 0.436374
- 0.72757
-
-
-
-
- 0.233122
- 0.59583
- 0.728002
-
-
-
-
- 1.80507
- 0.59583
- 0.728002
-
-
-
-
- 0.642618
- 2.22401
- 0.728788
-
-
-
-
- 1.39557
- 2.22401
- 0.728788
-
-
-
-
- 0.643828
- 2.03169
- 0.72972
-
-
-
-
- 1.39436
- 2.03169
- 0.72972
-
-
-
-
- 0.246762
- 0.407589
- 0.733054
-
-
-
-
- 1.79143
- 0.407589
- 0.733054
-
-
-
-
- 0.248349
- 0.624364
- 0.733641
-
-
-
-
- 1.78984
- 0.624364
- 0.733641
-
-
-
-
- 0.395581
- 0.706882
- 0.734345
-
-
-
-
- 1.64261
- 0.706882
- 0.734345
-
-
-
-
- 0.55021
- 1.26678
- 0.736347
-
-
-
-
- 1.48798
- 1.26678
- 0.736347
-
-
-
-
- 0.26788
- 0.649744
- 0.740875
-
-
-
-
- 1.77031
- 0.649744
- 0.740875
-
-
-
-
- 0.567058
- 2.79825
- 0.746506
-
-
-
-
- 1.47113
- 2.79825
- 0.746506
-
-
-
-
- 0.291153
- 0.671238
- 0.749494
-
-
-
-
- 1.74703
- 0.671238
- 0.749494
-
-
-
-
- 0.576183
- 1.45669
- 0.752009
-
-
-
-
- 1.462
- 1.45669
- 0.752009
-
-
-
-
- 0.241266
- 2.90843
- 0.753789
-
-
-
-
- 1.79692
- 2.90843
- 0.753789
-
-
-
-
- 0.0347248
- 0
- 0.755333
-
-
-
-
- 2.00346
- 0
- 0.755333
-
-
-
-
- 0.444447
- 0.891547
- 0.756662
-
-
-
-
- 1.59374
- 0.891547
- 0.756662
-
-
-
-
- 0.317498
- 0.688228
- 0.759251
-
-
-
-
- 1.72069
- 0.688228
- 0.759251
-
-
-
-
- 0.588845
- 2.60761
- 0.759644
-
-
-
-
- 1.44934
- 2.60761
- 0.759644
-
-
-
-
- 0.595374
- 1.6477
- 0.763581
-
-
-
-
- 1.44281
- 1.6477
- 0.763581
-
-
-
-
- 0.603827
- 2.41609
- 0.768679
-
-
-
-
- 1.43436
- 2.41609
- 0.768679
-
-
-
-
- 0.17752
- 3.71523
- 0.769094
-
-
-
-
- 0.39131
- 3.71523
- 0.769094
-
-
-
-
- 1.64688
- 3.71523
- 0.769094
-
-
-
-
- 1.86067
- 3.71523
- 0.769094
-
-
-
-
- 0.346157
- 0.700224
- 0.769866
-
-
-
-
- 1.69203
- 0.700224
- 0.769866
-
-
-
-
- 0.607749
- 1.83948
- 0.771044
-
-
-
-
- 1.43044
- 1.83948
- 0.771044
-
-
-
-
- 0.178187
- 3.69362
- 0.772131
-
-
-
-
- 1.86
- 3.69362
- 0.772131
-
-
-
-
- 0.61198
- 2.22401
- 0.773595
-
-
-
-
- 1.42621
- 2.22401
- 0.773595
-
-
-
-
- 0.613288
- 2.03169
- 0.774384
-
-
-
-
- 1.4249
- 2.03169
- 0.774384
-
-
-
-
- 0.48629
- 1.07829
- 0.77577
-
-
-
-
- 1.5519
- 1.07829
- 0.77577
-
-
-
-
- 0.550377
- 2.79825
- 0.77812
-
-
-
-
- 1.48781
- 2.79825
- 0.77812
-
-
-
-
- 0.377259
- 0.706882
- 0.781403
-
-
-
-
- 1.66093
- 0.706882
- 0.781403
-
-
-
-
- 0.616762
- 3.07104
- 0.786807
-
-
-
-
- 1.42143
- 3.07104
- 0.786807
-
-
-
-
- 0.228857
- 2.90843
- 0.787059
-
-
-
-
- 1.80933
- 2.90843
- 0.787059
-
-
-
-
- 0.521036
- 1.26678
- 0.791638
-
-
-
-
- 1.51715
- 1.26678
- 0.791638
-
-
-
-
- 0.538932
- 2.79825
- 0.799811
-
-
-
-
- 1.49926
- 2.79825
- 0.799811
-
-
-
-
- 0.548625
- 1.45669
- 0.804238
-
-
-
-
- 1.48956
- 1.45669
- 0.804238
-
-
-
-
- 0.185243
- 3.46523
- 0.804229
-
-
-
-
- 0.465548
- 3.46523
- 0.804229
-
-
-
-
- 1.57264
- 3.46523
- 0.804229
-
-
-
-
- 1.85294
- 3.46523
- 0.804229
-
-
-
-
- 0.191016
- 0.499815
- 0.80469
-
-
-
-
- 1.84717
- 0.499815
- 0.80469
-
-
-
-
- 0.191265
- 0.532646
- 0.804754
-
-
-
-
- 1.84692
- 0.532646
- 0.804754
-
-
-
-
- 0.223867
- 0.407589
- 0.806027
-
-
-
-
- 1.81432
- 0.407589
- 0.806027
-
-
-
-
- 0.196144
- 0.467414
- 0.806017
-
-
-
-
- 1.84204
- 0.467414
- 0.806017
-
-
-
-
- 0.196881
- 0.56496
- 0.806208
-
-
-
-
- 1.84131
- 0.56496
- 0.806208
-
-
-
-
- 0.367186
- 0.706882
- 0.807276
-
-
-
-
- 1.671
- 0.706882
- 0.807276
-
-
-
-
- 0.463895
- 3.46523
- 0.808535
-
-
-
-
- 1.57429
- 3.46523
- 0.808535
-
-
-
-
- 0.2065
- 0.436374
- 0.808699
-
-
-
-
- 1.83169
- 0.436374
- 0.808699
-
-
-
-
- 0.207705
- 0.59583
- 0.809011
-
-
-
-
- 1.83048
- 0.59583
- 0.809011
-
-
-
-
- 0.562074
- 2.60761
- 0.81038
-
-
-
-
- 1.47611
- 2.60761
- 0.81038
-
-
-
-
- 0.221787
- 0.407589
- 0.812657
-
-
-
-
- 1.8164
- 0.407589
- 0.812657
-
-
-
-
- 0.223425
- 0.624364
- 0.813081
-
-
-
-
- 1.81476
- 0.624364
- 0.813081
-
-
-
-
- 0.56901
- 1.6477
- 0.813547
-
-
-
-
- 1.46918
- 1.6477
- 0.813547
-
-
-
-
- 0.577989
- 2.41609
- 0.817648
-
-
-
-
- 1.4602
- 2.41609
- 0.817648
-
-
-
-
- 0.243587
- 0.649744
- 0.818301
-
-
-
-
- 1.7946
- 0.649744
- 0.818301
-
-
-
-
- 0.582155
- 1.83948
- 0.819551
-
-
-
-
- 1.45603
- 1.83948
- 0.819551
-
-
-
-
- 0.586648
- 2.22401
- 0.821603
-
-
-
-
- 1.45154
- 2.22401
- 0.821603
-
-
-
-
- 0.588038
- 2.03169
- 0.822237
-
-
-
-
- 1.45015
- 2.03169
- 0.822237
-
-
-
-
- 0.418278
- 0.891547
- 0.823877
-
-
-
-
- 1.61991
- 0.891547
- 0.823877
-
-
-
-
- 0.267613
- 0.671238
- 0.824522
-
-
-
-
- 1.77057
- 0.671238
- 0.824522
-
-
-
-
- 0.29481
- 0.688228
- 0.831564
-
-
-
-
- 1.74338
- 0.688228
- 0.831564
-
-
-
-
- 0.462026
- 1.07829
- 0.838091
-
-
-
-
- 1.57616
- 1.07829
- 0.838091
-
-
-
-
- 0.324396
- 0.700224
- 0.839224
-
-
-
-
- 1.71379
- 0.700224
- 0.839224
-
-
-
-
- 0.356596
- 0.706882
- 0.847565
-
-
-
-
- 1.68159
- 0.706882
- 0.847565
-
-
-
-
- 0.51986
- 2.79825
- 0.848796
-
-
-
-
- 1.51833
- 2.79825
- 0.848796
-
-
-
-
- 0.498354
- 1.26678
- 0.849895
-
-
-
-
- 1.53983
- 1.26678
- 0.849895
-
-
-
-
- 0.58471
- 3.07104
- 0.854354
-
-
-
-
- 1.45348
- 3.07104
- 0.854354
-
-
-
-
- 0.517065
- 2.79825
- 0.855975
-
-
-
-
- 1.52112
- 2.79825
- 0.855975
-
-
-
-
- 0.5272
- 1.45669
- 0.859268
-
-
-
-
- 1.51099
- 1.45669
- 0.859268
-
-
-
-
- 0.541262
- 2.60761
- 0.863837
-
-
-
-
- 1.49693
- 2.60761
- 0.863837
-
-
-
-
- 0.548513
- 1.6477
- 0.866193
-
-
-
-
- 1.48967
- 1.6477
- 0.866193
-
-
-
-
- 0.557901
- 2.41609
- 0.869243
-
-
-
-
- 1.48029
- 2.41609
- 0.869243
-
-
-
-
- 0.210845
- 2.90843
- 0.869857
-
-
-
-
- 1.82734
- 2.90843
- 0.869857
-
-
-
-
- 0.562257
- 1.83948
- 0.870658
-
-
-
-
- 1.47593
- 1.83948
- 0.870658
-
-
-
-
- 0.566955
- 2.22401
- 0.872185
-
-
-
-
- 1.47123
- 2.22401
- 0.872185
-
-
-
-
- 0.568408
- 2.03169
- 0.872657
-
-
-
-
- 1.46978
- 2.03169
- 0.872657
-
-
-
-
- 0.34729
- 0.706882
- 0.882969
-
-
-
-
- 1.6909
- 0.706882
- 0.882969
-
-
-
-
- 0.0087185
- 0
- 0.886075
-
-
-
-
- 2.02947
- 0
- 0.886075
-
-
-
-
- 0.173574
- 0.499815
- 0.889565
-
-
-
-
- 1.86461
- 0.499815
- 0.889565
-
-
-
-
- 0.173827
- 0.532646
- 0.889604
-
-
-
-
- 1.86436
- 0.532646
- 0.889604
-
-
-
-
- 0.17881
- 0.467414
- 0.890367
-
-
-
-
- 1.85938
- 0.467414
- 0.890367
-
-
-
-
- 0.179563
- 0.56496
- 0.890482
-
-
-
-
- 1.85863
- 0.56496
- 0.890482
-
-
-
-
- 0.189384
- 0.436374
- 0.891987
-
-
-
-
- 1.8488
- 0.436374
- 0.891987
-
-
-
-
- 0.190614
- 0.59583
- 0.892175
-
-
-
-
- 1.84757
- 0.59583
- 0.892175
-
-
-
-
- 0.399941
- 0.891547
- 0.893637
-
-
-
-
- 1.63825
- 0.891547
- 0.893637
-
-
-
-
- 0.204993
- 0.407589
- 0.894378
-
-
-
-
- 1.83319
- 0.407589
- 0.894378
-
-
-
-
- 0.206665
- 0.624364
- 0.894634
-
-
-
-
- 1.83152
- 0.624364
- 0.894634
-
-
-
-
- 0.166769
- 3.46523
- 0.896548
-
-
-
-
- 1.87142
- 3.46523
- 0.896548
-
-
-
-
- 0.227252
- 0.649744
- 0.897788
-
-
-
-
- 1.81094
- 0.649744
- 0.897788
-
-
-
-
- 0.437309
- 3.46523
- 0.900322
-
-
-
-
- 1.60088
- 3.46523
- 0.900322
-
-
-
-
- 0.251784
- 0.671238
- 0.901546
-
-
-
-
- 1.7864
- 0.671238
- 0.901546
-
-
-
-
- 0.203878
- 2.90843
- 0.901883
-
-
-
-
- 1.83431
- 2.90843
- 0.901883
-
-
-
-
- 0.445024
- 1.07829
- 0.902772
-
-
-
-
- 1.59316
- 1.07829
- 0.902772
-
-
-
-
- 0.279554
- 0.688228
- 0.9058
-
-
-
-
- 1.75863
- 0.688228
- 0.9058
-
-
-
-
- 0.482461
- 1.26678
- 0.910358
-
-
-
-
- 1.55573
- 1.26678
- 0.910358
-
-
-
-
- 0.309763
- 0.700224
- 0.910428
-
-
-
-
- 1.72842
- 0.700224
- 0.910428
-
-
-
-
- 0.203235
- 0.407589
- 0.911663
-
-
-
-
- 1.83495
- 0.407589
- 0.911663
-
-
-
-
- 0.501744
- 2.79825
- 0.914265
-
-
-
-
- 1.53644
- 2.79825
- 0.914265
-
-
-
-
- 0.34262
- 0.706882
- 0.915452
-
-
-
-
- 1.69557
- 0.706882
- 0.915452
-
-
-
-
- 0.512187
- 1.45669
- 0.916381
-
-
-
-
- 1.526
- 1.45669
- 0.916381
-
-
-
-
- 0.526678
- 2.60761
- 0.919317
-
-
-
-
- 1.51151
- 2.60761
- 0.919317
-
-
-
-
- 0.534151
- 1.6477
- 0.920832
-
-
-
-
- 1.50404
- 1.6477
- 0.920832
-
-
-
-
- 0.543826
- 2.41609
- 0.922792
-
-
-
-
- 1.49436
- 2.41609
- 0.922792
-
-
-
-
- 0.500448
- 2.79825
- 0.923277
-
-
-
-
- 1.53774
- 2.79825
- 0.923277
-
-
-
-
- 0.548314
- 1.83948
- 0.923702
-
-
-
-
- 1.48987
- 1.83948
- 0.923702
-
-
-
-
- 0.553156
- 2.22401
- 0.924683
-
-
-
-
- 1.48503
- 2.22401
- 0.924683
-
-
-
-
- 0.554653
- 2.03169
- 0.924986
-
-
-
-
- 1.48353
- 2.03169
- 0.924986
-
-
-
-
- 0.563909
- 3.07104
- 0.926167
-
-
-
-
- 1.47428
- 3.07104
- 0.926167
-
-
-
-
- 0.336152
- 0.706882
- 0.960436
-
-
-
-
- 1.70204
- 0.706882
- 0.960436
-
-
-
-
- 0.389676
- 0.891547
- 0.965033
-
-
-
-
- 1.64851
- 0.891547
- 0.965033
-
-
-
-
- 0.435507
- 1.07829
- 0.968969
-
-
-
-
- 1.60268
- 1.07829
- 0.968969
-
-
-
-
- 0.473564
- 1.26678
- 0.972238
-
-
-
-
- 1.56462
- 1.26678
- 0.972238
-
-
-
-
- 0.493166
- 2.79825
- 0.973922
-
-
-
-
- 1.54502
- 2.79825
- 0.973922
-
-
-
-
- 0.503783
- 1.45669
- 0.974834
-
-
-
-
- 1.5344
- 1.45669
- 0.974834
-
-
-
-
- 0.164808
- 0.499815
- 0.975769
-
-
-
-
- 1.87338
- 0.499815
- 0.975769
-
-
-
-
- 0.165064
- 0.532646
- 0.975782
-
-
-
-
- 1.87312
- 0.532646
- 0.975782
-
-
-
-
- 0.170098
- 0.467414
- 0.976038
-
-
-
-
- 1.86809
- 0.467414
- 0.976038
-
-
-
-
- 0.170859
- 0.56496
- 0.976076
-
-
-
-
- 1.86733
- 0.56496
- 0.976076
-
-
-
-
- 0.518514
- 2.60761
- 0.976099
-
-
-
-
- 1.51967
- 2.60761
- 0.976099
-
-
-
-
- 0.180782
- 0.436374
- 0.976579
-
-
-
-
- 1.85741
- 0.436374
- 0.976579
-
-
-
-
- 0.182025
- 0.59583
- 0.976642
-
-
-
-
- 1.85616
- 0.59583
- 0.976642
-
-
-
-
- 0.526111
- 1.6477
- 0.976751
-
-
-
-
- 1.51208
- 1.6477
- 0.976751
-
-
-
-
- 0.196552
- 0.407589
- 0.977379
-
-
-
-
- 1.84164
- 0.407589
- 0.977379
-
-
-
-
- 0.198242
- 0.624364
- 0.977465
-
-
-
-
- 1.83995
- 0.624364
- 0.977465
-
-
-
-
- 0.535946
- 2.41609
- 0.977596
-
-
-
-
- 1.50224
- 2.41609
- 0.977596
-
-
-
-
- 0.540509
- 1.83948
- 0.977988
-
-
-
-
- 1.49768
- 1.83948
- 0.977988
-
-
-
-
- 0.545431
- 2.22401
- 0.978411
-
-
-
-
- 1.49276
- 2.22401
- 0.978411
-
-
-
-
- 0.219043
- 0.649744
- 0.97852
-
-
-
-
- 1.81914
- 0.649744
- 0.97852
-
-
-
-
- 0.546953
- 2.03169
- 0.978542
-
-
-
-
- 1.49123
- 2.03169
- 0.978542
-
-
-
-
- 0.243829
- 0.671238
- 0.979777
-
-
-
-
- 1.79436
- 0.671238
- 0.979777
-
-
-
-
- 0.271887
- 0.688228
- 0.9812
-
-
-
-
- 1.7663
- 0.688228
- 0.9812
-
-
-
-
- 0.302409
- 0.700224
- 0.982748
-
-
-
-
- 1.73578
- 0.700224
- 0.982748
-
-
-
-
- 0.335467
- 0.706882
- 0.984403
-
-
-
-
- 1.70272
- 0.706882
- 0.984403
-
-
-
-
- 0.197638
- 2.90843
- 0.989128
-
-
-
-
- 1.84055
- 2.90843
- 0.989128
-
-
-
-
- 0.425791
- 3.46523
- 0.995184
-
-
-
-
- 1.6124
- 3.46523
- 0.995184
-
-
-
-
- 0.492426
- 2.79825
- 0.999839
-
-
-
-
- 1.54576
- 2.79825
- 0.999839
-
-
-
-
- 0.554897
- 3.07104
- 1.00039
-
-
-
-
- 1.48329
- 3.07104
- 1.00039
-
-
-
-
- 0
- 0
- 1.01909
-
-
-
-
- 2.03819
- 0
- 1.01909
-
-
-
-
- 0.196552
- 0.407589
- 1.01909
-
-
-
-
- 1.84164
- 0.407589
- 1.01909
-
-
-
-
- 0.195495
- 2.90843
- 1.01909
-
-
-
-
- 1.84269
- 2.90843
- 1.01909
-
-
-
-
- 0.158005
- 3.46523
- 1.01909
-
-
-
-
- 1.88018
- 3.46523
- 1.01909
-
-
-
-
- 0.545408
- 2.03169
- 1.03263
-
-
-
-
- 1.49278
- 2.03169
- 1.03263
-
-
-
-
- 0.543881
- 2.22401
- 1.03267
-
-
-
-
- 1.49431
- 2.22401
- 1.03267
-
-
-
-
- 0.538943
- 1.83948
- 1.03281
-
-
-
-
- 1.49924
- 1.83948
- 1.03281
-
-
-
-
- 0.534365
- 2.41609
- 1.03294
-
-
-
-
- 1.50382
- 2.41609
- 1.03294
-
-
-
-
- 0.524498
- 1.6477
- 1.03322
-
-
-
-
- 1.51369
- 1.6477
- 1.03322
-
-
-
-
- 0.516876
- 2.60761
- 1.03344
-
-
-
-
- 1.52131
- 2.60761
- 1.03344
-
-
-
-
- 0.502097
- 1.45669
- 1.03386
-
-
-
-
- 1.53609
- 1.45669
- 1.03386
-
-
-
-
- 0.491445
- 2.79825
- 1.03417
-
-
-
-
- 1.54674
- 2.79825
- 1.03417
-
-
-
-
- 0.471779
- 1.26678
- 1.03473
-
-
-
-
- 1.56641
- 1.26678
- 1.03473
-
-
-
-
- 0.433597
- 1.07829
- 1.03582
-
-
-
-
- 1.60459
- 1.07829
- 1.03582
-
-
-
-
- 0.387616
- 0.891547
- 1.03713
-
-
-
-
- 1.65057
- 0.891547
- 1.03713
-
-
-
-
- 0.333917
- 0.706882
- 1.03867
-
-
-
-
- 1.70427
- 0.706882
- 1.03867
-
-
-
-
- 0.335212
- 0.706882
- 1.05375
-
-
-
-
- 1.70298
- 0.706882
- 1.05375
-
-
-
-
- 0.302409
- 0.700224
- 1.05544
-
-
-
-
- 1.73578
- 0.700224
- 1.05544
-
-
-
-
- 0.271887
- 0.688228
- 1.05699
-
-
-
-
- 1.7663
- 0.688228
- 1.05699
-
-
-
-
- 0.243829
- 0.671238
- 1.05841
-
-
-
-
- 1.79436
- 0.671238
- 1.05841
-
-
-
-
- 0.219043
- 0.649744
- 1.05967
-
-
-
-
- 1.81914
- 0.649744
- 1.05967
-
-
-
-
- 0.198242
- 0.624364
- 1.06072
-
-
-
-
- 1.83995
- 0.624364
- 1.06072
-
-
-
-
- 0.196552
- 0.407589
- 1.06081
-
-
-
-
- 1.84164
- 0.407589
- 1.06081
-
-
-
-
- 0.182025
- 0.59583
- 1.06155
-
-
-
-
- 1.85616
- 0.59583
- 1.06155
-
-
-
-
- 0.180782
- 0.436374
- 1.06161
-
-
-
-
- 1.85741
- 0.436374
- 1.06161
-
-
-
-
- 0.170859
- 0.56496
- 1.06211
-
-
-
-
- 1.86733
- 0.56496
- 1.06211
-
-
-
-
- 0.170098
- 0.467414
- 1.06215
-
-
-
-
- 1.86809
- 0.467414
- 1.06215
-
-
-
-
- 0.164808
- 0.499815
- 1.06242
-
-
-
-
- 1.87338
- 0.499815
- 1.06242
-
-
-
-
- 0.165064
- 0.532646
- 1.06241
-
-
-
-
- 1.87312
- 0.532646
- 1.06241
-
-
-
-
- 0.557908
- 3.07104
- 1.07509
-
-
-
-
- 1.48028
- 3.07104
- 1.07509
-
-
-
-
- 0.495104
- 2.79825
- 1.07677
-
-
-
-
- 1.54308
- 2.79825
- 1.07677
-
-
-
-
- 0.550038
- 2.03169
- 1.08653
-
-
-
-
- 1.48815
- 2.03169
- 1.08653
-
-
-
-
- 0.548526
- 2.22401
- 1.08675
-
-
-
-
- 1.48966
- 2.22401
- 1.08675
-
-
-
-
- 0.543636
- 1.83948
- 1.08745
-
-
-
-
- 1.49455
- 1.83948
- 1.08745
-
-
-
-
- 0.539103
- 2.41609
- 1.08811
-
-
-
-
- 1.49908
- 2.41609
- 1.08811
-
-
-
-
- 0.529332
- 1.6477
- 1.08951
-
-
-
-
- 1.50886
- 1.6477
- 1.08951
-
-
-
-
- 0.521785
- 2.60761
- 1.0906
-
-
-
-
- 1.5164
- 2.60761
- 1.0906
-
-
-
-
- 0.429639
- 3.46523
- 1.09067
-
-
-
-
- 1.60855
- 3.46523
- 1.09067
-
-
-
-
- 0.50715
- 1.45669
- 1.0927
-
-
-
-
- 1.53104
- 1.45669
- 1.0927
-
-
-
-
- 0.496603
- 2.79825
- 1.09422
-
-
-
-
- 1.54158
- 2.79825
- 1.09422
-
-
-
-
- 0.477129
- 1.26678
- 1.09702
-
-
-
-
- 1.56106
- 1.26678
- 1.09702
-
-
-
-
- 0.43932
- 1.07829
- 1.10245
-
-
-
-
- 1.59887
- 1.07829
- 1.10245
-
-
-
-
- 0.393789
- 0.891547
- 1.109
-
-
-
-
- 1.6444
- 0.891547
- 1.109
-
-
-
-
- 0.20193
- 2.90843
- 1.10906
-
-
-
-
- 1.83626
- 2.90843
- 1.10906
-
-
-
-
- 0.340614
- 0.706882
- 1.11664
-
-
-
-
- 1.69757
- 0.706882
- 1.11664
-
-
-
-
- 0.341867
- 0.706882
- 1.12283
-
-
-
-
- 1.69632
- 0.706882
- 1.12283
-
-
-
-
- 0.203235
- 0.407589
- 1.12652
-
-
-
-
- 1.83495
- 0.407589
- 1.12652
-
-
-
-
- 0.309763
- 0.700224
- 1.12776
-
-
-
-
- 1.72842
- 0.700224
- 1.12776
-
-
-
-
- 0.279554
- 0.688228
- 1.13239
-
-
-
-
- 1.75863
- 0.688228
- 1.13239
-
-
-
-
- 0.203878
- 2.90843
- 1.1363
-
-
-
-
- 1.83431
- 2.90843
- 1.1363
-
-
-
-
- 0.251784
- 0.671238
- 1.13664
-
-
-
-
- 1.7864
- 0.671238
- 1.13664
-
-
-
-
- 0.560783
- 2.03169
- 1.13956
-
-
-
-
- 1.4774
- 2.03169
- 1.13956
-
-
-
-
- 0.559305
- 2.22401
- 1.13995
-
-
-
-
- 1.47888
- 2.22401
- 1.13995
-
-
-
-
- 0.227252
- 0.649744
- 1.1404
-
-
-
-
- 1.81094
- 0.649744
- 1.1404
-
-
-
-
- 0.554528
- 1.83948
- 1.14121
-
-
-
-
- 1.48366
- 1.83948
- 1.14121
-
-
-
-
- 0.166769
- 3.46523
- 1.14164
-
-
-
-
- 1.87142
- 3.46523
- 1.14164
-
-
-
-
- 0.550098
- 2.41609
- 1.14237
-
-
-
-
- 1.48809
- 2.41609
- 1.14237
-
-
-
-
- 0.206665
- 0.624364
- 1.14355
-
-
-
-
- 1.83152
- 0.624364
- 1.14355
-
-
-
-
- 0.204993
- 0.407589
- 1.14381
-
-
-
-
- 1.83319
- 0.407589
- 1.14381
-
-
-
-
- 0.540551
- 1.6477
- 1.14488
-
-
-
-
- 1.49764
- 1.6477
- 1.14488
-
-
-
-
- 0.190614
- 0.59583
- 1.14601
-
-
-
-
- 1.84757
- 0.59583
- 1.14601
-
-
-
-
- 0.189384
- 0.436374
- 1.1462
-
-
-
-
- 1.8488
- 0.436374
- 1.1462
-
-
-
-
- 0.533177
- 2.60761
- 1.14682
-
-
-
-
- 1.50501
- 2.60761
- 1.14682
-
-
-
-
- 0.179563
- 0.56496
- 1.14771
-
-
-
-
- 1.85863
- 0.56496
- 1.14771
-
-
-
-
- 0.17881
- 0.467414
- 1.14782
-
-
-
-
- 1.85938
- 0.467414
- 1.14782
-
-
-
-
- 0.572863
- 3.07104
- 1.14835
-
-
-
-
- 1.46532
- 3.07104
- 1.14835
-
-
-
-
- 0.173827
- 0.532646
- 1.14858
-
-
-
-
- 1.86436
- 0.532646
- 1.14858
-
-
-
-
- 0.173574
- 0.499815
- 1.14862
-
-
-
-
- 1.86461
- 0.499815
- 1.14862
-
-
-
-
- 0.518878
- 1.45669
- 1.15058
-
-
-
-
- 1.51931
- 1.45669
- 1.15058
-
-
-
-
- 0.0087185
- 0
- 1.15211
-
-
-
-
- 2.02947
- 0
- 1.15211
-
-
-
-
- 0.508433
- 2.79825
- 1.1526
-
-
-
-
- 1.52975
- 2.79825
- 1.1526
-
-
-
-
- 0.508572
- 2.79825
- 1.15329
-
-
-
-
- 1.52962
- 2.79825
- 1.15329
-
-
-
-
- 0.489544
- 1.26678
- 1.15829
-
-
-
-
- 1.54864
- 1.26678
- 1.15829
-
-
-
-
- 0.452601
- 1.07829
- 1.168
-
-
-
-
- 1.58559
- 1.07829
- 1.168
-
-
-
-
- 0.408113
- 0.891547
- 1.17969
-
-
-
-
- 1.63007
- 0.891547
- 1.17969
-
-
-
-
- 0.448753
- 3.46523
- 1.1843
-
-
-
-
- 1.58943
- 3.46523
- 1.1843
-
-
-
-
- 0.355656
- 0.706882
- 1.19088
-
-
-
-
- 1.68253
- 0.706882
- 1.19088
-
-
-
-
- 0.577503
- 2.03169
- 1.19102
-
-
-
-
- 1.46068
- 2.03169
- 1.19102
-
-
-
-
- 0.576079
- 2.22401
- 1.19158
-
-
-
-
- 1.46211
- 2.22401
- 1.19158
-
-
-
-
- 0.356157
- 0.706882
- 1.19335
-
-
-
-
- 1.68203
- 0.706882
- 1.19335
-
-
-
-
- 0.571476
- 1.83948
- 1.19337
-
-
-
-
- 1.46671
- 1.83948
- 1.19337
-
-
-
-
- 0.567208
- 2.41609
- 1.19503
-
-
-
-
- 1.47098
- 2.41609
- 1.19503
-
-
-
-
- 0.558009
- 1.6477
- 1.19861
-
-
-
-
- 1.48018
- 1.6477
- 1.19861
-
-
-
-
- 0.324396
- 0.700224
- 1.19896
-
-
-
-
- 1.71379
- 0.700224
- 1.19896
-
-
-
-
- 0.550904
- 2.60761
- 1.20138
-
-
-
-
- 1.48728
- 2.60761
- 1.20138
-
-
-
-
- 0.29481
- 0.688228
- 1.20662
-
-
-
-
- 1.74338
- 0.688228
- 1.20662
-
-
-
-
- 0.537126
- 1.45669
- 1.20674
-
-
-
-
- 1.50106
- 1.45669
- 1.20674
-
-
-
-
- 0.527197
- 2.79825
- 1.21061
-
-
-
-
- 1.51099
- 2.79825
- 1.21061
-
-
-
-
- 0.267613
- 0.671238
- 1.21367
-
-
-
-
- 1.77057
- 0.671238
- 1.21367
-
-
-
-
- 0.508863
- 1.26678
- 1.21774
-
-
-
-
- 1.52932
- 1.26678
- 1.21774
-
-
-
-
- 0.599375
- 3.07104
- 1.21825
-
-
-
-
- 1.43881
- 3.07104
- 1.21825
-
-
-
-
- 0.243587
- 0.649744
- 1.21989
-
-
-
-
- 1.7946
- 0.649744
- 1.21989
-
-
-
-
- 0.223425
- 0.624364
- 1.22511
-
-
-
-
- 1.81476
- 0.624364
- 1.22511
-
-
-
-
- 0.53389
- 2.79825
- 1.22526
-
-
-
-
- 1.5043
- 2.79825
- 1.22526
-
-
-
-
- 0.221787
- 0.407589
- 1.22553
-
-
-
-
- 1.8164
- 0.407589
- 1.22553
-
-
-
-
- 0.223633
- 2.90843
- 1.22711
-
-
-
-
- 1.81455
- 2.90843
- 1.22711
-
-
-
-
- 0.207705
- 0.59583
- 1.22918
-
-
-
-
- 1.83048
- 0.59583
- 1.22918
-
-
-
-
- 0.2065
- 0.436374
- 1.22949
-
-
-
-
- 1.83169
- 0.436374
- 1.22949
-
-
-
-
- 0.473268
- 1.07829
- 1.2316
-
-
-
-
- 1.56492
- 1.07829
- 1.2316
-
-
-
-
- 0.196881
- 0.56496
- 1.23198
-
-
-
-
- 1.84131
- 0.56496
- 1.23198
-
-
-
-
- 0.223867
- 0.407589
- 1.23216
-
-
-
-
- 1.81432
- 0.407589
- 1.23216
-
-
-
-
- 0.196144
- 0.467414
- 1.23217
-
-
-
-
- 1.84204
- 0.467414
- 1.23217
-
-
-
-
- 0.191265
- 0.532646
- 1.23343
-
-
-
-
- 1.84692
- 0.532646
- 1.23343
-
-
-
-
- 0.191016
- 0.499815
- 1.2335
-
-
-
-
- 1.84717
- 0.499815
- 1.2335
-
-
-
-
- 0.185243
- 3.46523
- 1.23396
-
-
-
-
- 0.465548
- 3.46523
- 1.23396
-
-
-
-
- 1.57264
- 3.46523
- 1.23396
-
-
-
-
- 1.85294
- 3.46523
- 1.23396
-
-
-
-
- 0.599979
- 2.03169
- 1.24024
-
-
-
-
- 1.43821
- 2.03169
- 1.24024
-
-
-
-
- 0.598628
- 2.22401
- 1.24095
-
-
-
-
- 1.43956
- 2.22401
- 1.24095
-
-
-
-
- 0.594259
- 1.83948
- 1.24326
-
-
-
-
- 1.44393
- 1.83948
- 1.24326
-
-
-
-
- 0.590209
- 2.41609
- 1.24539
-
-
-
-
- 1.44798
- 2.41609
- 1.24539
-
-
-
-
- 0.430403
- 0.891547
- 1.24829
-
-
-
-
- 1.60778
- 0.891547
- 1.24829
-
-
-
-
- 0.581478
- 1.6477
- 1.25
-
-
-
-
- 1.45671
- 1.6477
- 1.25
-
-
-
-
- 0.228857
- 2.90843
- 1.25113
-
-
-
-
- 1.80933
- 2.90843
- 1.25113
-
-
-
-
- 0.574735
- 2.60761
- 1.25356
-
-
-
-
- 1.46345
- 2.60761
- 1.25356
-
-
-
-
- 0.376833
- 0.706882
- 1.25698
-
-
-
-
- 1.66135
- 0.706882
- 1.25698
-
-
-
-
- 0.561658
- 1.45669
- 1.26046
-
-
-
-
- 1.47653
- 1.45669
- 1.26046
-
-
-
-
- 0.552234
- 2.79825
- 1.26543
-
-
-
-
- 1.48595
- 2.79825
- 1.26543
-
-
-
-
- 0.178187
- 3.69362
- 1.26606
-
-
-
-
- 1.86
- 3.69362
- 1.26606
-
-
-
-
- 0.380342
- 0.706882
- 1.26778
-
-
-
-
- 1.65785
- 0.706882
- 1.26778
-
-
-
-
- 0.346157
- 0.700224
- 1.26832
-
-
-
-
- 1.69203
- 0.700224
- 1.26832
-
-
-
-
- 0.17752
- 3.71523
- 1.26909
-
-
-
-
- 0.39131
- 3.71523
- 1.26909
-
-
-
-
- 1.64688
- 3.71523
- 1.26909
-
-
-
-
- 1.86067
- 3.71523
- 1.26909
-
-
-
-
- 0.534833
- 1.26678
- 1.27461
-
-
-
-
- 1.50335
- 1.26678
- 1.27461
-
-
-
-
- 0.317498
- 0.688228
- 1.27894
-
-
-
-
- 1.72069
- 0.688228
- 1.27894
-
-
-
-
- 0.0347248
- 0
- 1.28285
-
-
-
-
- 2.00346
- 0
- 1.28285
-
-
-
-
- 0.636758
- 3.07104
- 1.283
-
-
-
-
- 1.40143
- 3.07104
- 1.283
-
-
-
-
- 0.62792
- 2.03169
- 1.28657
-
-
-
-
- 1.41027
- 2.03169
- 1.28657
-
-
-
-
- 0.626659
- 2.22401
- 1.28743
-
-
-
-
- 1.41153
- 2.22401
- 1.28743
-
-
-
-
- 0.291153
- 0.671238
- 1.28869
-
-
-
-
- 1.74703
- 0.671238
- 1.28869
-
-
-
-
- 0.622581
- 1.83948
- 1.29022
-
-
-
-
- 1.41561
- 1.83948
- 1.29022
-
-
-
-
- 0.50105
- 1.07829
- 1.29244
-
-
-
-
- 1.53714
- 1.07829
- 1.29244
-
-
-
-
- 0.6188
- 2.41609
- 1.29281
-
-
-
-
- 1.41939
- 2.41609
- 1.29281
-
-
-
-
- 0.569244
- 2.79825
- 1.29364
-
-
-
-
- 1.46894
- 2.79825
- 1.29364
-
-
-
-
- 0.26788
- 0.649744
- 1.29731
-
-
-
-
- 1.77031
- 0.649744
- 1.29731
-
-
-
-
- 0.610652
- 1.6477
- 1.29838
-
-
-
-
- 1.42754
- 1.6477
- 1.29838
-
-
-
-
- 0.604358
- 2.60761
- 1.30268
-
-
-
-
- 1.43383
- 2.60761
- 1.30268
-
-
-
-
- 0.248349
- 0.624364
- 1.30455
-
-
-
-
- 1.78984
- 0.624364
- 1.30455
-
-
-
-
- 0.246762
- 0.407589
- 1.30513
-
-
-
-
- 1.79143
- 0.407589
- 1.30513
-
-
-
-
- 0.408604
- 3.71523
- 1.30877
-
-
-
-
- 1.62958
- 3.71523
- 1.30877
-
-
-
-
- 0.233122
- 0.59583
- 1.31019
-
-
-
-
- 1.80507
- 0.59583
- 1.31019
-
-
-
-
- 0.231955
- 0.436374
- 1.31062
-
-
-
-
- 1.80623
- 0.436374
- 1.31062
-
-
-
-
- 0.592153
- 1.45669
- 1.31103
-
-
-
-
- 1.44603
- 1.45669
- 1.31103
-
-
-
-
- 0.460366
- 0.891547
- 1.3139
-
-
-
-
- 1.57782
- 0.891547
- 1.3139
-
-
-
-
- 0.222637
- 0.56496
- 1.31407
-
-
-
-
- 1.81555
- 0.56496
- 1.31407
-
-
-
-
- 0.221923
- 0.467414
- 1.31433
-
-
-
-
- 1.81626
- 0.467414
- 1.31433
-
-
-
-
- 0.217196
- 0.532646
- 1.31608
-
-
-
-
- 1.82099
- 0.532646
- 1.31608
-
-
-
-
- 0.216956
- 0.499815
- 1.31617
-
-
-
-
- 1.82123
- 0.499815
- 1.31617
-
-
-
-
- 0.583357
- 2.79825
- 1.31704
-
-
-
-
- 1.45483
- 2.79825
- 1.31704
-
-
-
-
- 0.404467
- 0.706882
- 1.32061
-
-
-
-
- 1.63372
- 0.706882
- 1.32061
-
-
-
-
- 0.567116
- 1.26678
- 1.32815
-
-
-
-
- 1.47107
- 1.26678
- 1.32815
-
-
-
-
- 0.66096
- 2.03169
- 1.32942
-
-
-
-
- 1.37723
- 2.03169
- 1.32942
-
-
-
-
- 0.659805
- 2.22401
- 1.33042
-
-
-
-
- 1.37838
- 2.22401
- 1.33042
-
-
-
-
- 0.656072
- 1.83948
- 1.33365
-
-
-
-
- 1.38212
- 1.83948
- 1.33365
-
-
-
-
- 0.259099
- 0.407589
- 1.33388
-
-
-
-
- 1.77909
- 0.407589
- 1.33388
-
-
-
-
- 0.374824
- 0.700224
- 1.33512
-
-
-
-
- 1.66336
- 0.700224
- 1.33512
-
-
-
-
- 0.652611
- 2.41609
- 1.33665
-
-
-
-
- 1.38558
- 2.41609
- 1.33665
-
-
-
-
- 0.412853
- 0.706882
- 1.33897
-
-
-
-
- 1.62533
- 0.706882
- 1.33897
-
-
-
-
- 0.262289
- 2.90843
- 1.34076
-
-
-
-
- 1.7759
- 2.90843
- 1.34076
-
-
-
-
- 0.684043
- 3.07104
- 1.34091
-
-
-
-
- 1.35415
- 3.07104
- 1.34091
-
-
-
-
- 0.64515
- 1.6477
- 1.34312
-
-
-
-
- 1.39304
- 1.6477
- 1.34312
-
-
-
-
- 0.639388
- 2.60761
- 1.34811
-
-
-
-
- 1.3988
- 2.60761
- 1.34811
-
-
-
-
- 0.347386
- 0.688228
- 1.34858
-
-
-
-
- 1.6908
- 0.688228
- 1.34858
-
-
-
-
- 0.535585
- 1.07829
- 1.34971
-
-
-
-
- 1.5026
- 1.07829
- 1.34971
-
-
-
-
- 0.613745
- 2.79825
- 1.35645
-
-
-
-
- 1.42444
- 2.79825
- 1.35645
-
-
-
-
- 0.628214
- 1.45669
- 1.35779
-
-
-
-
- 1.40997
- 1.45669
- 1.35779
-
-
-
-
- 0.322163
- 0.671238
- 1.36095
-
-
-
-
- 1.71602
- 0.671238
- 1.36095
-
-
-
-
- 0.269922
- 2.90843
- 1.36123
-
-
-
-
- 1.76827
- 2.90843
- 1.36123
-
-
-
-
- 0.620161
- 2.79825
- 1.36477
-
-
-
-
- 1.41803
- 2.79825
- 1.36477
-
-
-
-
- 0.698668
- 2.03169
- 1.36822
-
-
-
-
- 1.33952
- 2.03169
- 1.36822
-
-
-
-
- 0.697636
- 2.22401
- 1.36935
-
-
-
-
- 1.34055
- 2.22401
- 1.36935
-
-
-
-
- 0.299881
- 0.649744
- 1.37188
-
-
-
-
- 1.73831
- 0.649744
- 1.37188
-
-
-
-
- 0.694295
- 1.83948
- 1.37299
-
-
-
-
- 1.34389
- 1.83948
- 1.37299
-
-
-
-
- 0.497614
- 0.891547
- 1.37567
-
-
-
-
- 1.54057
- 0.891547
- 1.37567
-
-
-
-
- 0.691199
- 2.41609
- 1.37636
-
-
-
-
- 1.34699
- 2.41609
- 1.37636
-
-
-
-
- 0.605292
- 1.26678
- 1.37765
-
-
-
-
- 1.4329
- 1.26678
- 1.37765
-
-
-
-
- 0.281182
- 0.624364
- 1.38106
-
-
-
-
- 1.75701
- 0.624364
- 1.38106
-
-
-
-
- 0.438279
- 0.706882
- 1.38114
-
-
-
-
- 1.59991
- 0.706882
- 1.38114
-
-
-
-
- 0.279663
- 0.407589
- 1.3818
-
-
-
-
- 1.75852
- 0.407589
- 1.3818
-
-
-
-
- 0.684524
- 1.6477
- 1.38363
-
-
-
-
- 1.35366
- 1.6477
- 1.38363
-
-
-
-
- 0.220508
- 3.71523
- 1.3838
-
-
-
-
- 1.81768
- 3.71523
- 1.3838
-
-
-
-
- 0.266604
- 0.59583
- 1.38821
-
-
-
-
- 1.77158
- 0.59583
- 1.38821
-
-
-
-
- 0.265486
- 0.436374
- 1.38876
-
-
-
-
- 1.7727
- 0.436374
- 1.38876
-
-
-
-
- 0.679368
- 2.60761
- 1.38925
-
-
-
-
- 1.35882
- 2.60761
- 1.38925
-
-
-
-
- 0.740005
- 3.07104
- 1.39049
-
-
-
-
- 1.29818
- 3.07104
- 1.39049
-
-
-
-
- 0.256566
- 0.56496
- 1.39313
-
-
-
-
- 1.78162
- 0.56496
- 1.39313
-
-
-
-
- 0.255882
- 0.467414
- 1.39347
-
-
-
-
- 1.78231
- 0.467414
- 1.39347
-
-
-
-
- 0.251357
- 0.532646
- 1.39569
-
-
-
-
- 1.78683
- 0.532646
- 1.39569
-
-
-
-
- 0.251126
- 0.499815
- 1.3958
-
-
-
-
- 1.78706
- 0.499815
- 1.3958
-
-
-
-
- 0.410102
- 0.700224
- 1.39868
-
-
-
-
- 1.62809
- 0.700224
- 1.39868
-
-
-
-
- 0.669371
- 1.45669
- 1.40014
-
-
-
-
- 1.36882
- 1.45669
- 1.40014
-
-
-
-
- 0.740555
- 2.03169
- 1.40247
-
-
-
-
- 1.29763
- 2.03169
- 1.40247
-
-
-
-
- 0.576424
- 1.07829
- 1.40267
-
-
-
-
- 1.46176
- 1.07829
- 1.40267
-
-
-
-
- 0.462978
- 3.71523
- 1.40295
-
-
-
-
- 1.57521
- 3.71523
- 1.40295
-
-
-
-
- 0.739657
- 2.22401
- 1.40371
-
-
-
-
- 1.29853
- 2.22401
- 1.40371
-
-
-
-
- 0.453269
- 0.706882
- 1.406
-
-
-
-
- 1.58492
- 0.706882
- 1.406
-
-
-
-
- 0.736753
- 1.83948
- 1.4077
-
-
-
-
- 1.30143
- 1.83948
- 1.4077
-
-
-
-
- 0.662166
- 2.79825
- 1.40799
-
-
-
-
- 1.37602
- 2.79825
- 1.40799
-
-
-
-
- 0.0775739
- 0
- 1.40908
-
-
-
-
- 1.96061
- 0
- 1.40908
-
-
-
-
- 0.734061
- 2.41609
- 1.41141
-
-
-
-
- 1.30413
- 2.41609
- 1.41141
-
-
-
-
- 0.667045
- 2.79825
- 1.41198
-
-
-
-
- 1.37114
- 2.79825
- 1.41198
-
-
-
-
- 0.384166
- 0.688228
- 1.41485
-
-
-
-
- 1.65402
- 0.688228
- 1.41485
-
-
-
-
- 0.728259
- 1.6477
- 1.41939
-
-
-
-
- 1.30993
- 1.6477
- 1.41939
-
-
-
-
- 0.648862
- 1.26678
- 1.42249
-
-
-
-
- 1.38933
- 1.26678
- 1.42249
-
-
-
-
- 0.723777
- 2.60761
- 1.42556
-
-
-
-
- 1.31441
- 2.60761
- 1.42556
-
-
-
-
- 0.360324
- 0.671238
- 1.42971
-
-
-
-
- 1.67786
- 0.671238
- 1.42971
-
-
-
-
- 0.306658
- 0.407589
- 1.43044
-
-
-
-
- 1.73153
- 0.407589
- 1.43044
-
-
-
-
- 0.803196
- 3.07104
- 1.43045
-
-
-
-
- 1.23499
- 3.07104
- 1.43045
-
-
-
-
- 0.786072
- 2.03169
- 1.43172
-
-
-
-
- 1.25212
- 2.03169
- 1.43172
-
-
-
-
- 0.54166
- 0.891547
- 1.43279
-
-
-
-
- 1.49653
- 0.891547
- 1.43279
-
-
-
-
- 0.785321
- 2.22401
- 1.43305
-
-
-
-
- 1.25287
- 2.22401
- 1.43305
-
-
-
-
- 0.782891
- 1.83948
- 1.43735
-
-
-
-
- 1.2553
- 1.83948
- 1.43735
-
-
-
-
- 0.715087
- 1.45669
- 1.43752
-
-
-
-
- 1.3231
- 1.45669
- 1.43752
-
-
-
-
- 0.477936
- 0.706882
- 1.43798
-
-
-
-
- 1.56025
- 0.706882
- 1.43798
-
-
-
-
- 0.780639
- 2.41609
- 1.44134
-
-
-
-
- 1.25755
- 2.41609
- 1.44134
-
-
-
-
- 0.339263
- 0.649744
- 1.44284
-
-
-
-
- 1.69893
- 0.649744
- 1.44284
-
-
-
-
- 0.708823
- 2.79825
- 1.44614
-
-
-
-
- 1.32936
- 2.79825
- 1.44614
-
-
-
-
- 0.31708
- 2.90843
- 1.44759
-
-
-
-
- 1.72111
- 2.90843
- 1.44759
-
-
-
-
- 0.775785
- 1.6477
- 1.44994
-
-
-
-
- 1.2624
- 1.6477
- 1.44994
-
-
-
-
- 0.623034
- 1.07829
- 1.45063
-
-
-
-
- 1.41515
- 1.07829
- 1.45063
-
-
-
-
- 0.321587
- 0.624364
- 1.45385
-
-
-
-
- 1.7166
- 0.624364
- 1.45385
-
-
-
-
- 0.320152
- 0.407589
- 1.45475
-
-
-
-
- 1.71804
- 0.407589
- 1.45475
-
-
-
-
- 0.834627
- 2.03169
- 1.4556
-
-
-
-
- 1.20356
- 2.03169
- 1.4556
-
-
-
-
- 0.772036
- 2.60761
- 1.45658
-
-
-
-
- 1.26615
- 2.60761
- 1.45658
-
-
-
-
- 0.834032
- 2.22401
- 1.457
-
-
-
-
- 1.20416
- 2.22401
- 1.457
-
-
-
-
- 0.451628
- 0.700224
- 1.45834
-
-
-
-
- 1.58656
- 0.700224
- 1.45834
-
-
-
-
- 0.728276
- 2.79825
- 1.45865
-
-
-
-
- 1.30991
- 2.79825
- 1.45865
-
-
-
-
- 0.871978
- 3.07104
- 1.45976
-
-
-
-
- 1.16621
- 3.07104
- 1.45976
-
-
-
-
- 0.832109
- 1.83948
- 1.46155
-
-
-
-
- 1.20608
- 1.83948
- 1.46155
-
-
-
-
- 0.697259
- 1.26678
- 1.46206
-
-
-
-
- 1.34093
- 1.26678
- 1.46206
-
-
-
-
- 0.307807
- 0.59583
- 1.46244
-
-
-
-
- 1.73038
- 0.59583
- 1.46244
-
-
-
-
- 0.306751
- 0.436374
- 1.4631
-
-
-
-
- 1.73144
- 0.436374
- 1.4631
-
-
-
-
- 0.326238
- 2.90843
- 1.46436
-
-
-
-
- 1.71195
- 2.90843
- 1.46436
-
-
-
-
- 0.830326
- 2.41609
- 1.46577
-
-
-
-
- 1.20786
- 2.41609
- 1.46577
-
-
-
-
- 0.50106
- 0.706882
- 1.46797
-
-
-
-
- 1.53713
- 0.706882
- 1.46797
-
-
-
-
- 0.298319
- 0.56496
- 1.46836
-
-
-
-
- 1.73987
- 0.56496
- 1.46836
-
-
-
-
- 0.297673
- 0.467414
- 1.46876
-
-
-
-
- 1.74051
- 0.467414
- 1.46876
-
-
-
-
- 0.764766
- 1.45669
- 1.46945
-
-
-
-
- 1.27342
- 1.45669
- 1.46945
-
-
-
-
- 0.293395
- 0.532646
- 1.47143
-
-
-
-
- 1.74479
- 0.532646
- 1.47143
-
-
-
-
- 0.293177
- 0.499815
- 1.47156
-
-
-
-
- 1.74501
- 0.499815
- 1.47156
-
-
-
-
- 0.885587
- 2.03169
- 1.47378
-
-
-
-
- 1.1526
- 2.03169
- 1.47378
-
-
-
-
- 0.826484
- 1.6477
- 1.47486
-
-
-
-
- 1.2117
- 1.6477
- 1.47486
-
-
-
-
- 0.885156
- 2.22401
- 1.47524
-
-
-
-
- 1.15303
- 2.22401
- 1.47524
-
-
-
-
- 0.427461
- 0.688228
- 1.47705
-
-
-
-
- 1.61073
- 0.688228
- 1.47705
-
-
-
-
- 0.944571
- 3.07104
- 1.47765
-
-
-
-
- 1.09362
- 3.07104
- 1.47765
-
-
-
-
- 0.759526
- 2.79825
- 1.47873
-
-
-
-
- 1.27866
- 2.79825
- 1.47873
-
-
-
-
- 0.883765
- 1.83948
- 1.47998
-
-
-
-
- 1.15442
- 1.83948
- 1.47998
-
-
-
-
- 0.823516
- 2.60761
- 1.48189
-
-
-
-
- 1.21467
- 2.60761
- 1.48189
-
-
-
-
- 1.01909
- 3.07104
- 1.48367
-
-
-
-
- 0.882474
- 2.41609
- 1.48438
-
-
-
-
- 1.15571
- 2.41609
- 1.48438
-
-
-
-
- 0.59193
- 0.891547
- 1.48452
-
-
-
-
- 1.44626
- 0.891547
- 1.48452
-
-
-
-
- 0.938287
- 2.03169
- 1.48603
-
-
-
-
- 1.0999
- 2.03169
- 1.48603
-
-
-
-
- 0.531755
- 3.71523
- 1.48719
-
-
-
-
- 1.50643
- 3.71523
- 1.48719
-
-
-
-
- 0.938026
- 2.22401
- 1.48754
-
-
-
-
- 1.10016
- 2.22401
- 1.48754
-
-
-
-
- 0.523052
- 0.706882
- 1.4906
-
-
-
-
- 1.51514
- 0.706882
- 1.4906
-
-
-
-
- 0.992041
- 2.03169
- 1.4922
-
-
-
-
- 1.04615
- 2.03169
- 1.4922
-
-
-
-
- 0.937184
- 1.83948
- 1.49241
-
-
-
-
- 1.101
- 1.83948
- 1.49241
-
-
-
-
- 0.674807
- 1.07829
- 1.49296
-
-
-
-
- 1.36338
- 1.07829
- 1.49296
-
-
-
-
- 0.991953
- 2.22401
- 1.49373
-
-
-
-
- 1.04623
- 2.22401
- 1.49373
-
-
-
-
- 0.280539
- 3.71523
- 1.49373
-
-
-
-
- 1.75765
- 3.71523
- 1.49373
-
-
-
-
- 0.879693
- 1.6477
- 1.49385
-
-
-
-
- 1.15849
- 1.6477
- 1.49385
-
-
-
-
- 0.405245
- 0.671238
- 1.49425
-
-
-
-
- 1.63294
- 0.671238
- 1.49425
-
-
-
-
- 0.81776
- 1.45669
- 1.49551
-
-
-
-
- 1.22043
- 1.45669
- 1.49551
-
-
-
-
- 0.749851
- 1.26678
- 1.49586
-
-
-
-
- 1.28834
- 1.26678
- 1.49586
-
-
-
-
- 0.795378
- 2.79825
- 1.49636
-
-
-
-
- 1.24281
- 2.79825
- 1.49636
-
-
-
-
- 0.936403
- 2.41609
- 1.49692
-
-
-
-
- 1.10178
- 2.41609
- 1.49692
-
-
-
-
- 0.991671
- 1.83948
- 1.49866
-
-
-
-
- 1.04652
- 1.83948
- 1.49866
-
-
-
-
- 0.877545
- 2.60761
- 1.50116
-
-
-
-
- 1.16064
- 2.60761
- 1.50116
-
-
-
-
- 0.99141
- 2.41609
- 1.50323
-
-
-
-
- 1.04678
- 2.41609
- 1.50323
-
-
-
-
- 0.813612
- 2.79825
- 1.50532
-
-
-
-
- 1.22458
- 2.79825
- 1.50532
-
-
-
-
- 0.93472
- 1.6477
- 1.50664
-
-
-
-
- 1.10347
- 1.6477
- 1.50664
-
-
-
-
- 0.38562
- 0.649744
- 1.50944
-
-
-
-
- 1.65257
- 0.649744
- 1.50944
-
-
-
-
- 0.990846
- 1.6477
- 1.51308
-
-
-
-
- 1.04734
- 1.6477
- 1.51308
-
-
-
-
- 0.498978
- 0.700224
- 1.5135
-
-
-
-
- 1.53921
- 0.700224
- 1.5135
-
-
-
-
- 0.93342
- 2.60761
- 1.51416
-
-
-
-
- 1.10477
- 2.60761
- 1.51416
-
-
-
-
- 0.873379
- 1.45669
- 1.51535
-
-
-
-
- 1.16481
- 1.45669
- 1.51535
-
-
-
-
- 0.365828
- 0.407589
- 1.52037
-
-
-
-
- 1.67236
- 0.407589
- 1.52037
-
-
-
-
- 0.990411
- 2.60761
- 1.5207
-
-
-
-
- 1.04778
- 2.60761
- 1.5207
-
-
-
-
- 0.36915
- 0.624364
- 1.52219
-
-
-
-
- 1.66904
- 0.624364
- 1.52219
-
-
-
-
- 0.367812
- 0.407589
- 1.52322
-
-
-
-
- 1.67038
- 0.407589
- 1.52322
-
-
-
-
- 0.805954
- 1.26678
- 1.52344
-
-
-
-
- 1.23223
- 1.26678
- 1.52344
-
-
-
-
- 0.555605
- 0.706882
- 1.5241
-
-
-
-
- 1.48258
- 0.706882
- 1.5241
-
-
-
-
- 0.86708
- 2.79825
- 1.5244
-
-
-
-
- 1.17111
- 2.79825
- 1.5244
-
-
-
-
- 0.870377
- 2.79825
- 1.52558
-
-
-
-
- 1.16781
- 2.79825
- 1.52558
-
-
-
-
- 0.136533
- 0
- 1.52864
-
-
-
-
- 1.90165
- 0
- 1.52864
-
-
-
-
- 0.930898
- 1.45669
- 1.52873
-
-
-
-
- 1.10729
- 1.45669
- 1.52873
-
-
-
-
- 0.731068
- 1.07829
- 1.52912
-
-
-
-
- 1.30712
- 1.07829
- 1.52912
-
-
-
-
- 0.647769
- 0.891547
- 1.53018
-
-
-
-
- 1.39042
- 0.891547
- 1.53018
-
-
-
-
- 0.356309
- 0.59583
- 1.53213
-
-
-
-
- 1.68188
- 0.59583
- 1.53213
-
-
-
-
- 0.355325
- 0.436374
- 1.53289
-
-
-
-
- 1.68286
- 0.436374
- 1.53289
-
-
-
-
- 0.476827
- 0.688228
- 1.53456
-
-
-
-
- 1.56136
- 0.688228
- 1.53456
-
-
-
-
- 0.989567
- 1.45669
- 1.53546
-
-
-
-
- 1.04862
- 1.45669
- 1.53546
-
-
-
-
- 0.573189
- 0.706882
- 1.53848
-
-
-
-
- 1.465
- 0.706882
- 1.53848
-
-
-
-
- 0.347468
- 0.56496
- 1.53897
-
-
-
-
- 1.69072
- 0.56496
- 1.53897
-
-
-
-
- 0.929081
- 2.79825
- 1.53923
-
-
-
-
- 1.10911
- 2.79825
- 1.53923
-
-
-
-
- 0.346866
- 0.467414
- 1.53944
-
-
-
-
- 1.69132
- 0.467414
- 1.53944
-
-
-
-
- 0.942304
- 2.79825
- 1.54074
-
-
-
-
- 1.09588
- 2.79825
- 1.54074
-
-
-
-
- 0.34288
- 0.532646
- 1.54252
-
-
-
-
- 1.69531
- 0.532646
- 1.54252
-
-
-
-
- 0.342677
- 0.499815
- 1.54268
-
-
-
-
- 1.69551
- 0.499815
- 1.54268
-
-
-
-
- 0.864834
- 1.26678
- 1.54445
-
-
-
-
- 1.17335
- 1.26678
- 1.54445
-
-
-
-
- 0.386844
- 2.90843
- 1.54532
-
-
-
-
- 1.65134
- 2.90843
- 1.54532
-
-
-
-
- 0.988959
- 2.79825
- 1.5461
-
-
-
-
- 1.01909
- 2.79825
- 1.5461
-
-
-
-
- 1.04923
- 2.79825
- 1.5461
-
-
-
-
- 0.456465
- 0.671238
- 1.55391
-
-
-
-
- 1.58172
- 0.671238
- 1.55391
-
-
-
-
- 0.396659
- 2.90843
- 1.55844
-
-
-
-
- 1.64153
- 2.90843
- 1.55844
-
-
-
-
- 0.791084
- 1.07829
- 1.55863
-
-
-
-
- 1.2471
- 1.07829
- 1.55863
-
-
-
-
- 0.925726
- 1.26678
- 1.55861
-
-
-
-
- 1.11246
- 1.26678
- 1.55861
-
-
-
-
- 0.613153
- 3.71523
- 1.5593
-
-
-
-
- 1.42503
- 3.71523
- 1.5593
-
-
-
-
- 0.551665
- 0.700224
- 1.56358
-
-
-
-
- 1.48652
- 0.700224
- 1.56358
-
-
-
-
- 0.987836
- 1.26678
- 1.56574
-
-
-
-
- 1.05035
- 1.26678
- 1.56574
-
-
-
-
- 0.708449
- 0.891547
- 1.56917
-
-
-
-
- 1.32974
- 0.891547
- 1.56917
-
-
-
-
- 0.438477
- 0.649744
- 1.57101
-
-
-
-
- 1.59971
- 0.649744
- 1.57101
-
-
-
-
- 0.804229
- 3.46523
- 1.57264
-
-
-
-
- 1.23396
- 3.46523
- 1.57264
-
-
-
-
- 0.616193
- 0.706882
- 1.57364
-
-
-
-
- 1.42199
- 0.706882
- 1.57364
-
-
-
-
- 0.854073
- 1.07829
- 1.5811
-
-
-
-
- 1.18411
- 1.07829
- 1.5811
-
-
-
-
- 0.627867
- 0.706882
- 1.58114
-
-
-
-
- 1.41032
- 0.706882
- 1.58114
-
-
-
-
- 0.831061
- 3.46523
- 1.58232
-
-
-
-
- 1.20713
- 3.46523
- 1.58232
-
-
-
-
- 0.423382
- 0.624364
- 1.58536
-
-
-
-
- 1.61481
- 0.624364
- 1.58536
-
-
-
-
- 0.422155
- 0.407589
- 1.58653
-
-
-
-
- 1.61603
- 0.407589
- 1.58653
-
-
-
-
- 0.531758
- 0.688228
- 1.58677
-
-
-
-
- 1.50643
- 0.688228
- 1.58677
-
-
-
-
- 0.355605
- 3.71523
- 1.59401
-
-
-
-
- 1.68258
- 3.71523
- 1.59401
-
-
-
-
- 0.919213
- 1.07829
- 1.59625
-
-
-
-
- 1.11897
- 1.07829
- 1.59625
-
-
-
-
- 0.411613
- 0.59583
- 1.59655
-
-
-
-
- 1.62657
- 0.59583
- 1.59655
-
-
-
-
- 0.410711
- 0.436374
- 1.59741
-
-
-
-
- 1.62748
- 0.436374
- 1.59741
-
-
-
-
- 0.437268
- 0.407589
- 1.60089
-
-
-
-
- 1.60092
- 0.407589
- 1.60089
-
-
-
-
- 0.773178
- 0.891547
- 1.601
-
-
-
-
- 1.26501
- 0.891547
- 1.601
-
-
-
-
- 0.985655
- 1.07829
- 1.60387
-
-
-
-
- 1.05253
- 1.07829
- 1.60387
-
-
-
-
- 0.403509
- 0.56496
- 1.60425
-
-
-
-
- 1.63468
- 0.56496
- 1.60425
-
-
-
-
- 0.402957
- 0.467414
- 1.60478
-
-
-
-
- 1.63523
- 0.467414
- 1.60478
-
-
-
-
- 0.923844
- 3.46523
- 1.60519
-
-
-
-
- 1.11434
- 3.46523
- 1.60519
-
-
-
-
- 0.513459
- 0.671238
- 1.60809
-
-
-
-
- 1.52473
- 0.671238
- 1.60809
-
-
-
-
- 0.609148
- 0.700224
- 1.60808
-
-
-
-
- 1.42904
- 0.700224
- 1.60808
-
-
-
-
- 0.399304
- 0.532646
- 1.60825
-
-
-
-
- 1.63888
- 0.532646
- 1.60825
-
-
-
-
- 0.399118
- 0.499815
- 1.60842
-
-
-
-
- 1.63907
- 0.499815
- 1.60842
-
-
-
-
- 1.01909
- 3.46523
- 1.61288
-
-
-
-
- 0.682032
- 0.706882
- 1.61595
-
-
-
-
- 1.35616
- 0.706882
- 1.61595
-
-
-
-
- 0.705066
- 3.71523
- 1.61742
-
-
-
-
- 1.33312
- 3.71523
- 1.61742
-
-
-
-
- 0.686559
- 0.706882
- 1.61818
-
-
-
-
- 1.35163
- 0.706882
- 1.61818
-
-
-
-
- 0.841113
- 0.891547
- 1.62524
-
-
-
-
- 1.19707
- 0.891547
- 1.62524
-
-
-
-
- 0.497293
- 0.649744
- 1.62692
-
-
-
-
- 1.54089
- 0.649744
- 1.62692
-
-
-
-
- 0.470101
- 2.90843
- 1.63188
-
-
-
-
- 1.56809
- 2.90843
- 1.63188
-
-
-
-
- 0.59169
- 0.688228
- 1.63316
-
-
-
-
- 1.4465
- 0.688228
- 1.63316
-
-
-
-
- 0.210592
- 0
- 1.63948
-
-
-
-
- 1.8276
- 0
- 1.63948
-
-
-
-
- 0.479751
- 2.90843
- 1.64153
-
-
-
-
- 1.55844
- 2.90843
- 1.64153
-
-
-
-
- 0.911369
- 0.891547
- 1.64158
-
-
-
-
- 1.12682
- 0.891547
- 1.64158
-
-
-
-
- 0.483726
- 0.624364
- 1.64272
-
-
-
-
- 1.55446
- 0.624364
- 1.64272
-
-
-
-
- 0.482624
- 0.407589
- 1.64401
-
-
-
-
- 1.55556
- 0.407589
- 1.64401
-
-
-
-
- 0.670838
- 0.700224
- 1.64653
-
-
-
-
- 1.36735
- 0.700224
- 1.64653
-
-
-
-
- 0.769094
- 3.71523
- 1.64688
-
-
-
-
- 1.26909
- 3.71523
- 1.64688
-
-
-
-
- 0.748871
- 0.706882
- 1.64881
-
-
-
-
- 1.28932
- 0.706882
- 1.64881
-
-
-
-
- 0.983029
- 0.891547
- 1.6498
-
-
-
-
- 1.05516
- 0.891547
- 1.6498
-
-
-
-
- 0.752266
- 0.706882
- 1.65048
-
-
-
-
- 1.28592
- 0.706882
- 1.65048
-
-
-
-
- 0.47315
- 0.59583
- 1.65504
-
-
-
-
- 1.56504
- 0.59583
- 1.65504
-
-
-
-
- 0.472339
- 0.436374
- 1.65599
-
-
-
-
- 1.56585
- 0.436374
- 1.65599
-
-
-
-
- 0.57564
- 0.671238
- 1.65622
-
-
-
-
- 1.46255
- 0.671238
- 1.65622
-
-
-
-
- 0.465867
- 0.56496
- 1.66353
-
-
-
-
- 1.57232
- 0.56496
- 1.66353
-
-
-
-
- 0.465371
- 0.467414
- 1.6641
-
-
-
-
- 1.57282
- 0.467414
- 1.6641
-
-
-
-
- 0.462087
- 0.532646
- 1.66793
-
-
-
-
- 1.5761
- 0.532646
- 1.66793
-
-
-
-
- 0.46192
- 0.499815
- 1.66812
-
-
-
-
- 1.57627
- 0.499815
- 1.66812
-
-
-
-
- 0.518361
- 0.407589
- 1.67167
-
-
-
-
- 1.51983
- 0.407589
- 1.67167
-
-
-
-
- 0.814097
- 0.706882
- 1.67255
-
-
-
-
- 1.22409
- 0.706882
- 1.67255
-
-
-
-
- 0.656007
- 0.688228
- 1.67325
-
-
-
-
- 1.38218
- 0.688228
- 1.67325
-
-
-
-
- 0.561463
- 0.649744
- 1.67659
-
-
-
-
- 1.47672
- 0.649744
- 1.67659
-
-
-
-
- 0.825978
- 0.706882
- 1.67678
-
-
-
-
- 1.21221
- 0.706882
- 1.67678
-
-
-
-
- 0.736102
- 0.700224
- 1.67854
-
-
-
-
- 1.30209
- 0.700224
- 1.67854
-
-
-
-
- 0.444177
- 3.71523
- 1.68258
-
-
-
-
- 1.59401
- 3.71523
- 1.68258
-
-
-
-
- 0.881314
- 0.706882
- 1.68965
-
-
-
-
- 1.15687
- 0.706882
- 1.68965
-
-
-
-
- 0.549565
- 0.624364
- 1.69368
-
-
-
-
- 1.48862
- 0.624364
- 1.69368
-
-
-
-
- 0.902208
- 0.706882
- 1.69451
-
-
-
-
- 1.13598
- 0.706882
- 1.69451
-
-
-
-
- 0.548598
- 0.407589
- 1.69507
-
-
-
-
- 1.48959
- 0.407589
- 1.69507
-
-
-
-
- 0.642373
- 0.671238
- 1.69782
-
-
-
-
- 1.39581
- 0.671238
- 1.69782
-
-
-
-
- 0.949868
- 0.706882
- 1.69998
-
-
-
-
- 1.08832
- 0.706882
- 1.69998
-
-
-
-
- 0.979962
- 0.706882
- 1.70343
-
-
-
-
- 1.01909
- 0.706882
- 1.70343
-
-
-
-
- 1.05823
- 0.706882
- 1.70343
-
-
-
-
- 0.804269
- 0.700224
- 1.70379
-
-
-
-
- 1.23392
- 0.700224
- 1.70379
-
-
-
-
- 0.565083
- 2.90843
- 1.70541
-
-
-
-
- 1.4731
- 2.90843
- 1.70541
-
-
-
-
- 0.72405
- 0.688228
- 1.70663
-
-
-
-
- 1.31414
- 0.688228
- 1.70663
-
-
-
-
- 0.540288
- 0.59583
- 1.70701
-
-
-
-
- 1.4979
- 0.59583
- 1.70701
-
-
-
-
- 0.539577
- 0.436374
- 1.70803
-
-
-
-
- 1.49861
- 0.436374
- 1.70803
-
-
-
-
- 0.573823
- 2.90843
- 1.71195
-
-
-
-
- 1.46436
- 2.90843
- 1.71195
-
-
-
-
- 0.533901
- 0.56496
- 1.71619
-
-
-
-
- 1.50429
- 0.56496
- 1.71619
-
-
-
-
- 0.533466
- 0.467414
- 1.71681
-
-
-
-
- 1.50472
- 0.467414
- 1.71681
-
-
-
-
- 0.630328
- 0.649744
- 1.71951
-
-
-
-
- 1.40786
- 0.649744
- 1.71951
-
-
-
-
- 0.530587
- 0.532646
- 1.72095
-
-
-
-
- 1.5076
- 0.532646
- 1.72095
-
-
-
-
- 0.53044
- 0.499815
- 1.72116
-
-
-
-
- 1.50775
- 0.499815
- 1.72116
-
-
-
-
- 0.874641
- 0.700224
- 1.72201
-
-
-
-
- 1.16355
- 0.700224
- 1.72201
-
-
-
-
- 0.607605
- 0.407589
- 1.73185
-
-
-
-
- 1.43058
- 0.407589
- 1.73185
-
-
-
-
- 0.712971
- 0.671238
- 1.73245
-
-
-
-
- 1.32522
- 0.671238
- 1.73245
-
-
-
-
- 0.79512
- 0.688228
- 1.73295
-
-
-
-
- 1.24307
- 0.688228
- 1.73295
-
-
-
-
- 0.946495
- 0.700224
- 1.73302
-
-
-
-
- 1.09169
- 0.700224
- 1.73302
-
-
-
-
- 1.01909
- 0.700224
- 1.7367
-
-
-
-
- 0.620221
- 0.624364
- 1.73773
-
-
-
-
- 1.41797
- 0.624364
- 1.73773
-
-
-
-
- 0.6194
- 0.407589
- 1.7392
-
-
-
-
- 1.41879
- 0.407589
- 1.7392
-
-
-
-
- 0.298486
- 0
- 1.7397
-
-
-
-
- 1.7397
- 0
- 1.7397
-
-
-
-
- 0.612341
- 0.59583
- 1.75192
-
-
-
-
- 1.42585
- 0.59583
- 1.75192
-
-
-
-
- 0.868489
- 0.688228
- 1.75195
-
-
-
-
- 1.1697
- 0.688228
- 1.75195
-
-
-
-
- 0.611737
- 0.436374
- 1.75301
-
-
-
-
- 1.42645
- 0.436374
- 1.75301
-
-
-
-
- 0.703184
- 0.649744
- 1.75525
-
-
-
-
- 1.335
- 0.649744
- 1.75525
-
-
-
-
- 0.544453
- 3.71523
- 1.75765
-
-
-
-
- 1.49373
- 3.71523
- 1.75765
-
-
-
-
- 0.78671
- 0.671238
- 1.75976
-
-
-
-
- 1.25148
- 0.671238
- 1.75976
-
-
-
-
- 0.606915
- 0.56496
- 1.7617
-
-
-
-
- 1.43127
- 0.56496
- 1.7617
-
-
-
-
- 0.606545
- 0.467414
- 1.76236
-
-
-
-
- 1.43164
- 0.467414
- 1.76236
-
-
-
-
- 0.943403
- 0.688228
- 1.76342
-
-
-
-
- 1.09478
- 0.688228
- 1.76342
-
-
-
-
- 0.669773
- 2.90843
- 1.76434
-
-
-
-
- 1.36841
- 2.90843
- 1.76434
-
-
-
-
- 0.604099
- 0.532646
- 1.76677
-
-
-
-
- 1.43409
- 0.532646
- 1.76677
-
-
-
-
- 0.603974
- 0.499815
- 1.767
-
-
-
-
- 1.43421
- 0.499815
- 1.767
-
-
-
-
- 1.01909
- 0.688228
- 1.76726
-
-
-
-
- 0.676959
- 2.90843
- 1.76827
-
-
-
-
- 1.36123
- 2.90843
- 1.76827
-
-
-
-
- 0.69497
- 0.624364
- 1.77439
-
-
-
-
- 1.34322
- 0.624364
- 1.77439
-
-
-
-
- 0.694303
- 0.407589
- 1.77595
-
-
-
-
- 1.34388
- 0.407589
- 1.77595
-
-
-
-
- 0.862834
- 0.671238
- 1.77946
-
-
-
-
- 1.17535
- 0.671238
- 1.77946
-
-
-
-
- 0.704077
- 0.407589
- 1.77957
-
-
-
-
- 1.33411
- 0.407589
- 1.77957
-
-
-
-
- 0.77928
- 0.649744
- 1.78343
-
-
-
-
- 1.25891
- 0.649744
- 1.78343
-
-
-
-
- 0.688567
- 0.59583
- 1.78931
-
-
-
-
- 1.34962
- 0.59583
- 1.78931
-
-
-
-
- 0.688076
- 0.436374
- 1.79046
-
-
-
-
- 1.35011
- 0.436374
- 1.79046
-
-
-
-
- 0.940561
- 0.671238
- 1.79137
-
-
-
-
- 1.09763
- 0.671238
- 1.79137
-
-
-
-
- 1.01909
- 0.671238
- 1.79536
-
-
-
-
- 0.684157
- 0.56496
- 1.79959
-
-
-
-
- 1.35403
- 0.56496
- 1.79959
-
-
-
-
- 0.683857
- 0.467414
- 1.80029
-
-
-
-
- 1.35433
- 0.467414
- 1.80029
-
-
-
-
- 0.773045
- 0.624364
- 1.80331
-
-
-
-
- 1.26514
- 0.624364
- 1.80331
-
-
-
-
- 0.857838
- 0.649744
- 1.80377
-
-
-
-
- 1.18035
- 0.649744
- 1.80377
-
-
-
-
- 0.772539
- 0.407589
- 1.80492
-
-
-
-
- 1.26565
- 0.407589
- 1.80492
-
-
-
-
- 0.681869
- 0.532646
- 1.80492
-
-
-
-
- 1.35632
- 0.532646
- 1.80492
-
-
-
-
- 0.681768
- 0.499815
- 1.80516
-
-
-
-
- 1.35642
- 0.499815
- 1.80516
-
-
-
-
- 0.781946
- 2.90843
- 1.80742
-
-
-
-
- 1.25624
- 2.90843
- 1.80742
-
-
-
-
- 0.787059
- 2.90843
- 1.80933
-
-
-
-
- 1.25113
- 2.90843
- 1.80933
-
-
-
-
- 0.806188
- 0.407589
- 1.81363
-
-
-
-
- 1.232
- 0.407589
- 1.81363
-
-
-
-
- 0.93805
- 0.649744
- 1.81606
-
-
-
-
- 1.10014
- 0.649744
- 1.81606
-
-
-
-
- 0.654392
- 3.71523
- 1.81768
-
-
-
-
- 1.3838
- 3.71523
- 1.81768
-
-
-
-
- 0.768184
- 0.59583
- 1.8188
-
-
-
-
- 1.27
- 0.59583
- 1.8188
-
-
-
-
- 0.767812
- 0.436374
- 1.81999
-
-
-
-
- 1.27038
- 0.436374
- 1.81999
-
-
-
-
- 1.01909
- 0.649744
- 1.82017
-
-
-
-
- 0.853645
- 0.624364
- 1.82418
-
-
-
-
- 1.18454
- 0.624364
- 1.82418
-
-
-
-
- 0.853305
- 0.407589
- 1.82583
-
-
-
-
- 1.18488
- 0.407589
- 1.82583
-
-
-
-
- 0.398709
- 0
- 1.8276
-
-
-
-
- 1.63948
- 0
- 1.8276
-
-
-
-
- 0.764837
- 0.56496
- 1.82947
-
-
-
-
- 1.27335
- 0.56496
- 1.82947
-
-
-
-
- 0.764609
- 0.467414
- 1.83019
-
-
-
-
- 1.27358
- 0.467414
- 1.83019
-
-
-
-
- 0.899217
- 2.90843
- 1.83373
-
-
-
-
- 1.13897
- 2.90843
- 1.83373
-
-
-
-
- 0.901883
- 2.90843
- 1.83431
-
-
-
-
- 1.1363
- 2.90843
- 1.83431
-
-
-
-
- 0.911725
- 0.407589
- 1.83478
-
-
-
-
- 1.12646
- 0.407589
- 1.83478
-
-
-
-
- 0.7631
- 0.532646
- 1.835
-
-
-
-
- 1.27509
- 0.532646
- 1.835
-
-
-
-
- 0.763023
- 0.499815
- 1.83525
-
-
-
-
- 1.27516
- 0.499815
- 1.83525
-
-
-
-
- 0.935943
- 0.624364
- 1.83678
-
-
-
-
- 1.10224
- 0.624364
- 1.83678
-
-
-
-
- 0.935772
- 0.407589
- 1.83847
-
-
-
-
- 1.10242
- 0.407589
- 1.83847
-
-
-
-
- 0.850377
- 0.59583
- 1.84008
-
-
-
-
- 1.18781
- 0.59583
- 1.84008
-
-
-
-
- 1.01909
- 0.624364
- 1.841
-
-
-
-
- 0.850126
- 0.436374
- 1.8413
-
-
-
-
- 1.18806
- 0.436374
- 1.8413
-
-
-
-
- 1.01909
- 0.407589
- 1.84269
-
-
-
-
- 1.01909
- 2.90843
- 1.84269
-
-
-
-
- 0.848126
- 0.56496
- 1.85103
-
-
-
-
- 1.19006
- 0.56496
- 1.85103
-
-
-
-
- 0.847973
- 0.467414
- 1.85178
-
-
-
-
- 1.19021
- 0.467414
- 1.85178
-
-
-
-
- 0.9343
- 0.59583
- 1.85294
-
-
-
-
- 1.10389
- 0.59583
- 1.85294
-
-
-
-
- 0.804229
- 3.46523
- 1.85294
-
-
-
-
- 1.23396
- 3.46523
- 1.85294
-
-
-
-
- 0.934174
- 0.436374
- 1.85418
-
-
-
-
- 1.10401
- 0.436374
- 1.85418
-
-
-
-
- 0.846958
- 0.532646
- 1.85672
-
-
-
-
- 1.19123
- 0.532646
- 1.85672
-
-
-
-
- 0.846906
- 0.499815
- 1.85697
-
-
-
-
- 1.19128
- 0.499815
- 1.85697
-
-
-
-
- 1.01909
- 0.59583
- 1.85724
-
-
-
-
- 1.01909
- 0.436374
- 1.85848
-
-
-
-
- 0.772131
- 3.69362
- 1.86
-
-
-
-
- 1.26606
- 3.69362
- 1.86
-
-
-
-
- 0.769094
- 3.71523
- 1.86067
-
-
-
-
- 1.26909
- 3.71523
- 1.86067
-
-
-
-
- 0.933169
- 0.56496
- 1.86406
-
-
-
-
- 1.10502
- 0.56496
- 1.86406
-
-
-
-
- 0.933092
- 0.467414
- 1.86482
-
-
-
-
- 1.1051
- 0.467414
- 1.86482
-
-
-
-
- 1.01909
- 0.56496
- 1.86842
-
-
-
-
- 1.01909
- 0.467414
- 1.86918
-
-
-
-
- 0.932582
- 0.532646
- 1.86983
-
-
-
-
- 1.10561
- 0.532646
- 1.86983
-
-
-
-
- 0.932556
- 0.499815
- 1.87009
-
-
-
-
- 1.10563
- 0.499815
- 1.87009
-
-
-
-
- 0.896548
- 3.46523
- 1.87142
-
-
-
-
- 1.14164
- 3.46523
- 1.87142
-
-
-
-
- 1.01909
- 0.532646
- 1.87422
-
-
-
-
- 1.01909
- 0.499815
- 1.87448
-
-
-
-
- 1.01909
- 3.46523
- 1.88018
-
-
-
-
- 0.509547
- 0
- 1.90165
-
-
-
-
- 1.52864
- 0
- 1.90165
-
-
-
-
- 0.629103
- 0
- 1.96061
-
-
-
-
- 1.40908
- 0
- 1.96061
-
-
-
-
- 0.755333
- 0
- 2.00346
-
-
-
-
- 1.28285
- 0
- 2.00346
-
-
-
-
- 0.886075
- 0
- 2.02947
-
-
-
-
- 1.15211
- 0
- 2.02947
-
-
-
-
- 1.01909
- 0
- 2.03819
-
-
-
-
- Default
-
- 1582
- 1606
- 1818
-
-
- 1157
- 1156
- 1273
-
-
- 1273
- 1156
- 1191
-
-
- 1273
- 1191
- 1430
-
-
- 1430
- 1191
- 1299
-
-
- 1430
- 1299
- 1551
-
-
- 1551
- 1299
- 1416
-
-
- 1551
- 1416
- 1640
-
-
- 1640
- 1416
- 1525
-
-
- 1640
- 1525
- 1704
-
-
- 1704
- 1525
- 1582
-
-
- 1704
- 1582
- 1762
-
-
- 1762
- 1582
- 1818
-
-
- 1155
- 1154
- 1190
-
-
- 1190
- 1154
- 1272
-
-
- 1190
- 1272
- 1298
-
-
- 1298
- 1272
- 1429
-
-
- 1298
- 1429
- 1415
-
-
- 1415
- 1429
- 1550
-
-
- 1415
- 1550
- 1524
-
-
- 1817
- 1605
- 1761
-
-
- 1761
- 1605
- 1581
-
-
- 1761
- 1581
- 1703
-
-
- 1703
- 1581
- 1524
-
-
- 1703
- 1524
- 1639
-
-
- 1639
- 1524
- 1550
-
-
- 686
- 687
- 574
-
-
- 574
- 687
- 602
-
-
- 235
- 24
- 247
-
-
- 247
- 24
- 82
-
-
- 247
- 82
- 292
-
-
- 292
- 82
- 138
-
-
- 292
- 138
- 363
-
-
- 363
- 138
- 202
-
-
- 363
- 202
- 494
-
-
- 494
- 202
- 290
-
-
- 494
- 290
- 602
-
-
- 602
- 290
- 412
-
-
- 602
- 412
- 574
-
-
- 536
- 361
- 249
-
-
- 1840
- 1838
- 1836
-
-
- 1308
- 1162
- 1052
-
-
- 7
- 5
- 69
-
-
- 69
- 5
- 149
-
-
- 69
- 149
- 148
-
-
- 1693
- 1593
- 1594
-
-
- 1594
- 1593
- 1479
-
-
- 1594
- 1479
- 1308
-
-
- 1308
- 1052
- 1594
-
-
- 1594
- 1052
- 914
-
-
- 1594
- 914
- 794
-
-
- 1163
- 1309
- 1053
-
-
- 1053
- 1309
- 1480
-
-
- 1053
- 1480
- 249
-
-
- 249
- 1480
- 1594
-
-
- 249
- 1594
- 536
-
-
- 536
- 1594
- 794
-
-
- 536
- 794
- 674
-
-
- 0
- 2
- 1
-
-
- 1
- 2
- 149
-
-
- 1
- 149
- 3
-
-
- 3
- 149
- 5
-
-
- 70
- 149
- 8
-
-
- 8
- 149
- 2
-
-
- 8
- 2
- 6
-
-
- 6
- 2
- 4
-
-
- 148
- 149
- 249
-
-
- 249
- 149
- 250
-
-
- 249
- 250
- 362
-
-
- 915
- 1053
- 795
-
-
- 795
- 1053
- 249
-
-
- 795
- 249
- 675
-
-
- 675
- 249
- 362
-
-
- 675
- 362
- 537
-
-
- 1772
- 1693
- 1834
-
-
- 1834
- 1693
- 1594
-
-
- 1834
- 1594
- 1836
-
-
- 1836
- 1594
- 1694
-
-
- 1836
- 1694
- 1840
-
-
- 1840
- 1694
- 1773
-
-
- 1840
- 1773
- 1835
-
-
- 1842
- 1840
- 1841
-
-
- 1841
- 1840
- 1835
-
-
- 1841
- 1835
- 1839
-
-
- 1839
- 1835
- 1837
-
-
- 366
- 373
- 250
-
-
- 1103
- 1115
- 1163
-
-
- 1725
- 1729
- 1837
-
-
- 1790
- 1782
- 1840
-
-
- 1469
- 1463
- 1593
-
-
- 740
- 724
- 674
-
-
- 119
- 115
- 5
-
-
- 3
- 86
- 71
-
-
- 3
- 71
- 1
-
-
- 5
- 115
- 3
-
-
- 3
- 115
- 92
-
-
- 3
- 92
- 86
-
-
- 119
- 5
- 150
-
-
- 150
- 5
- 7
-
-
- 150
- 7
- 163
-
-
- 163
- 7
- 194
-
-
- 194
- 7
- 69
-
-
- 194
- 69
- 212
-
-
- 249
- 372
- 365
-
-
- 249
- 365
- 148
-
-
- 365
- 300
- 148
-
-
- 148
- 300
- 280
-
-
- 148
- 280
- 69
-
-
- 69
- 280
- 241
-
-
- 69
- 241
- 212
-
-
- 372
- 249
- 482
-
-
- 482
- 249
- 361
-
-
- 482
- 361
- 514
-
-
- 514
- 361
- 576
-
-
- 576
- 361
- 536
-
-
- 576
- 536
- 622
-
-
- 674
- 724
- 536
-
-
- 536
- 724
- 656
-
-
- 536
- 656
- 622
-
-
- 740
- 674
- 810
-
-
- 810
- 674
- 794
-
-
- 810
- 794
- 832
-
-
- 832
- 794
- 884
-
-
- 884
- 794
- 914
-
-
- 884
- 914
- 916
-
-
- 1162
- 1114
- 1102
-
-
- 1162
- 1102
- 1052
-
-
- 1102
- 1030
- 1052
-
-
- 1052
- 1030
- 1006
-
-
- 1052
- 1006
- 914
-
-
- 914
- 1006
- 958
-
-
- 914
- 958
- 916
-
-
- 1114
- 1162
- 1188
-
-
- 1188
- 1162
- 1308
-
-
- 1188
- 1308
- 1220
-
-
- 1593
- 1463
- 1479
-
-
- 1463
- 1354
- 1479
-
-
- 1479
- 1354
- 1324
-
-
- 1479
- 1324
- 1308
-
-
- 1308
- 1324
- 1268
-
-
- 1308
- 1268
- 1220
-
-
- 1469
- 1593
- 1546
-
-
- 1546
- 1593
- 1693
-
-
- 1546
- 1693
- 1558
-
-
- 1558
- 1693
- 1601
-
-
- 1601
- 1693
- 1772
-
-
- 1601
- 1772
- 1627
-
-
- 1836
- 1728
- 1724
-
-
- 1836
- 1724
- 1834
-
-
- 1724
- 1691
- 1834
-
-
- 1834
- 1691
- 1680
-
-
- 1834
- 1680
- 1772
-
-
- 1772
- 1680
- 1647
-
-
- 1772
- 1647
- 1627
-
-
- 1728
- 1836
- 1747
-
-
- 1747
- 1836
- 1838
-
-
- 1747
- 1838
- 1757
-
-
- 1840
- 1782
- 1838
-
-
- 1838
- 1782
- 1770
-
-
- 1838
- 1770
- 1757
-
-
- 1790
- 1840
- 1797
-
-
- 1797
- 1840
- 1842
-
-
- 1797
- 1842
- 1791
-
-
- 1791
- 1842
- 1841
-
-
- 1791
- 1841
- 1783
-
-
- 1783
- 1841
- 1771
-
-
- 1771
- 1841
- 1839
-
-
- 1771
- 1839
- 1758
-
-
- 1837
- 1729
- 1839
-
-
- 1839
- 1729
- 1748
-
-
- 1839
- 1748
- 1758
-
-
- 1725
- 1837
- 1692
-
-
- 1692
- 1837
- 1835
-
-
- 1692
- 1835
- 1681
-
-
- 1681
- 1835
- 1648
-
-
- 1648
- 1835
- 1773
-
-
- 1648
- 1773
- 1628
-
-
- 1594
- 1464
- 1470
-
-
- 1594
- 1470
- 1694
-
-
- 1470
- 1547
- 1694
-
-
- 1694
- 1547
- 1559
-
-
- 1694
- 1559
- 1773
-
-
- 1773
- 1559
- 1602
-
-
- 1773
- 1602
- 1628
-
-
- 1464
- 1594
- 1355
-
-
- 1355
- 1594
- 1480
-
-
- 1355
- 1480
- 1325
-
-
- 1325
- 1480
- 1269
-
-
- 1269
- 1480
- 1309
-
-
- 1269
- 1309
- 1221
-
-
- 1163
- 1115
- 1309
-
-
- 1309
- 1115
- 1189
-
-
- 1309
- 1189
- 1221
-
-
- 1103
- 1163
- 1031
-
-
- 1031
- 1163
- 1053
-
-
- 1031
- 1053
- 1007
-
-
- 1007
- 1053
- 959
-
-
- 959
- 1053
- 915
-
-
- 959
- 915
- 917
-
-
- 675
- 725
- 741
-
-
- 675
- 741
- 795
-
-
- 741
- 811
- 795
-
-
- 795
- 811
- 833
-
-
- 795
- 833
- 915
-
-
- 915
- 833
- 885
-
-
- 915
- 885
- 917
-
-
- 725
- 675
- 657
-
-
- 657
- 675
- 537
-
-
- 657
- 537
- 623
-
-
- 250
- 373
- 362
-
-
- 373
- 483
- 362
-
-
- 362
- 483
- 515
-
-
- 362
- 515
- 537
-
-
- 537
- 515
- 577
-
-
- 537
- 577
- 623
-
-
- 366
- 250
- 301
-
-
- 301
- 250
- 149
-
-
- 301
- 149
- 281
-
-
- 281
- 149
- 242
-
-
- 242
- 149
- 70
-
-
- 242
- 70
- 213
-
-
- 6
- 116
- 120
-
-
- 6
- 120
- 8
-
-
- 120
- 151
- 8
-
-
- 8
- 151
- 164
-
-
- 8
- 164
- 70
-
-
- 70
- 164
- 195
-
-
- 70
- 195
- 213
-
-
- 116
- 6
- 93
-
-
- 93
- 6
- 4
-
-
- 93
- 4
- 87
-
-
- 2
- 62
- 4
-
-
- 4
- 62
- 72
-
-
- 4
- 72
- 87
-
-
- 71
- 61
- 1
-
-
- 1
- 61
- 51
-
-
- 1
- 51
- 0
-
-
- 0
- 51
- 44
-
-
- 0
- 44
- 2
-
-
- 2
- 44
- 52
-
-
- 2
- 52
- 62
-
-
- 254
- 260
- 240
-
-
- 287
- 307
- 272
-
-
- 328
- 345
- 316
-
-
- 406
- 424
- 380
-
-
- 793
- 837
- 831
-
-
- 857
- 905
- 903
-
-
- 945
- 947
- 949
-
-
- 1003
- 1005
- 1009
-
-
- 1381
- 1420
- 1458
-
-
- 1474
- 1496
- 1527
-
-
- 1537
- 1541
- 1573
-
-
- 1580
- 1584
- 1604
-
-
- 1653
- 1651
- 1686
-
-
- 1645
- 1641
- 1678
-
-
- 1635
- 1629
- 1656
-
-
- 1611
- 1607
- 1637
-
-
- 1302
- 1266
- 1290
-
-
- 1226
- 1210
- 1222
-
-
- 1150
- 1142
- 1152
-
-
- 1072
- 1066
- 1080
-
-
- 730
- 704
- 690
-
-
- 660
- 632
- 618
-
-
- 586
- 578
- 546
-
-
- 508
- 506
- 480
-
-
- 220
- 210
- 186
-
-
- 200
- 198
- 165
-
-
- 190
- 188
- 157
-
-
- 52
- 44
- 28
-
-
- 62
- 52
- 35
-
-
- 164
- 151
- 143
-
-
- 373
- 366
- 358
-
-
- 833
- 811
- 805
-
-
- 1115
- 1103
- 1109
-
-
- 1559
- 1547
- 1557
-
-
- 1729
- 1725
- 1735
-
-
- 1790
- 1797
- 1814
-
-
- 1782
- 1790
- 1807
-
-
- 1680
- 1691
- 1699
-
-
- 1463
- 1469
- 1489
-
-
- 1006
- 1030
- 1036
-
-
- 724
- 740
- 734
-
-
- 280
- 300
- 282
-
-
- 115
- 119
- 107
-
-
- 44
- 51
- 34
-
-
- 34
- 51
- 61
-
-
- 61
- 71
- 46
-
-
- 46
- 71
- 86
-
-
- 86
- 92
- 78
-
-
- 78
- 92
- 115
-
-
- 119
- 150
- 142
-
-
- 142
- 150
- 163
-
-
- 163
- 194
- 179
-
-
- 179
- 194
- 212
-
-
- 212
- 241
- 228
-
-
- 228
- 241
- 280
-
-
- 300
- 365
- 357
-
-
- 357
- 365
- 372
-
-
- 372
- 482
- 474
-
-
- 474
- 482
- 514
-
-
- 514
- 576
- 562
-
-
- 562
- 576
- 622
-
-
- 622
- 656
- 648
-
-
- 648
- 656
- 724
-
-
- 740
- 810
- 804
-
-
- 804
- 810
- 832
-
-
- 832
- 884
- 878
-
-
- 878
- 884
- 916
-
-
- 916
- 958
- 962
-
-
- 962
- 958
- 1006
-
-
- 1030
- 1102
- 1108
-
-
- 1108
- 1102
- 1114
-
-
- 1114
- 1188
- 1194
-
-
- 1194
- 1188
- 1220
-
-
- 1220
- 1268
- 1276
-
-
- 1276
- 1268
- 1324
-
-
- 1324
- 1354
- 1374
-
-
- 1374
- 1354
- 1463
-
-
- 1469
- 1546
- 1556
-
-
- 1556
- 1546
- 1558
-
-
- 1558
- 1601
- 1615
-
-
- 1615
- 1601
- 1627
-
-
- 1627
- 1647
- 1664
-
-
- 1664
- 1647
- 1680
-
-
- 1691
- 1724
- 1734
-
-
- 1734
- 1724
- 1728
-
-
- 1728
- 1747
- 1765
-
-
- 1765
- 1747
- 1757
-
-
- 1757
- 1770
- 1795
-
-
- 1795
- 1770
- 1782
-
-
- 1797
- 1791
- 1808
-
-
- 1808
- 1791
- 1783
-
-
- 1783
- 1771
- 1796
-
-
- 1796
- 1771
- 1758
-
-
- 1758
- 1748
- 1766
-
-
- 1766
- 1748
- 1729
-
-
- 1725
- 1692
- 1700
-
-
- 1700
- 1692
- 1681
-
-
- 1681
- 1648
- 1665
-
-
- 1665
- 1648
- 1628
-
-
- 1628
- 1602
- 1616
-
-
- 1616
- 1602
- 1559
-
-
- 1547
- 1470
- 1490
-
-
- 1490
- 1470
- 1464
-
-
- 1464
- 1355
- 1375
-
-
- 1375
- 1355
- 1325
-
-
- 1325
- 1269
- 1277
-
-
- 1277
- 1269
- 1221
-
-
- 1221
- 1189
- 1195
-
-
- 1195
- 1189
- 1115
-
-
- 1103
- 1031
- 1037
-
-
- 1037
- 1031
- 1007
-
-
- 1007
- 959
- 963
-
-
- 963
- 959
- 917
-
-
- 917
- 885
- 879
-
-
- 879
- 885
- 833
-
-
- 811
- 741
- 735
-
-
- 735
- 741
- 725
-
-
- 725
- 657
- 649
-
-
- 649
- 657
- 623
-
-
- 623
- 577
- 563
-
-
- 563
- 577
- 515
-
-
- 515
- 483
- 475
-
-
- 475
- 483
- 373
-
-
- 366
- 301
- 283
-
-
- 283
- 301
- 281
-
-
- 281
- 242
- 229
-
-
- 229
- 242
- 213
-
-
- 213
- 195
- 180
-
-
- 180
- 195
- 164
-
-
- 151
- 120
- 108
-
-
- 108
- 120
- 116
-
-
- 116
- 93
- 79
-
-
- 79
- 93
- 87
-
-
- 87
- 72
- 47
-
-
- 47
- 72
- 62
-
-
- 44
- 34
- 28
-
-
- 28
- 34
- 20
-
-
- 28
- 20
- 18
-
-
- 18
- 20
- 14
-
-
- 18
- 14
- 10
-
-
- 10
- 14
- 16
-
-
- 10
- 16
- 11
-
-
- 11
- 16
- 22
-
-
- 11
- 22
- 19
-
-
- 19
- 22
- 36
-
-
- 19
- 36
- 29
-
-
- 29
- 36
- 55
-
-
- 29
- 55
- 48
-
-
- 48
- 55
- 84
-
-
- 48
- 84
- 77
-
-
- 77
- 84
- 105
-
-
- 77
- 105
- 104
-
-
- 104
- 105
- 130
-
-
- 104
- 130
- 125
-
-
- 125
- 130
- 157
-
-
- 125
- 157
- 154
-
-
- 154
- 157
- 188
-
-
- 154
- 188
- 185
-
-
- 61
- 46
- 34
-
-
- 34
- 46
- 40
-
-
- 34
- 40
- 20
-
-
- 20
- 40
- 30
-
-
- 20
- 30
- 14
-
-
- 14
- 30
- 32
-
-
- 14
- 32
- 16
-
-
- 16
- 32
- 42
-
-
- 16
- 42
- 22
-
-
- 22
- 42
- 49
-
-
- 22
- 49
- 36
-
-
- 36
- 49
- 73
-
-
- 36
- 73
- 55
-
-
- 55
- 73
- 96
-
-
- 55
- 96
- 84
-
-
- 84
- 96
- 117
-
-
- 84
- 117
- 105
-
-
- 105
- 117
- 144
-
-
- 105
- 144
- 130
-
-
- 130
- 144
- 165
-
-
- 130
- 165
- 157
-
-
- 157
- 165
- 198
-
-
- 157
- 198
- 190
-
-
- 86
- 78
- 46
-
-
- 46
- 78
- 65
-
-
- 46
- 65
- 40
-
-
- 40
- 65
- 57
-
-
- 40
- 57
- 30
-
-
- 30
- 57
- 59
-
-
- 30
- 59
- 32
-
-
- 32
- 59
- 67
-
-
- 32
- 67
- 42
-
-
- 42
- 67
- 80
-
-
- 42
- 80
- 49
-
-
- 49
- 80
- 98
-
-
- 49
- 98
- 73
-
-
- 73
- 98
- 113
-
-
- 73
- 113
- 96
-
-
- 96
- 113
- 136
-
-
- 96
- 136
- 117
-
-
- 117
- 136
- 159
-
-
- 117
- 159
- 144
-
-
- 144
- 159
- 186
-
-
- 144
- 186
- 165
-
-
- 165
- 186
- 210
-
-
- 165
- 210
- 200
-
-
- 115
- 107
- 78
-
-
- 78
- 107
- 100
-
-
- 78
- 100
- 65
-
-
- 65
- 100
- 90
-
-
- 65
- 90
- 57
-
-
- 57
- 90
- 94
-
-
- 57
- 94
- 59
-
-
- 59
- 94
- 102
-
-
- 59
- 102
- 67
-
-
- 67
- 102
- 109
-
-
- 67
- 109
- 80
-
-
- 80
- 109
- 121
-
-
- 80
- 121
- 98
-
-
- 98
- 121
- 140
-
-
- 98
- 140
- 113
-
-
- 113
- 140
- 161
-
-
- 113
- 161
- 136
-
-
- 136
- 161
- 183
-
-
- 136
- 183
- 159
-
-
- 159
- 183
- 204
-
-
- 159
- 204
- 186
-
-
- 186
- 204
- 233
-
-
- 186
- 233
- 220
-
-
- 239
- 259
- 253
-
-
- 119
- 142
- 107
-
-
- 107
- 142
- 132
-
-
- 107
- 132
- 100
-
-
- 100
- 132
- 126
-
-
- 100
- 126
- 90
-
-
- 90
- 126
- 128
-
-
- 90
- 128
- 94
-
-
- 94
- 128
- 134
-
-
- 94
- 134
- 102
-
-
- 102
- 134
- 146
-
-
- 102
- 146
- 109
-
-
- 109
- 146
- 152
-
-
- 109
- 152
- 121
-
-
- 121
- 152
- 171
-
-
- 121
- 171
- 140
-
-
- 140
- 171
- 192
-
-
- 140
- 192
- 161
-
-
- 161
- 192
- 208
-
-
- 161
- 208
- 183
-
-
- 183
- 208
- 239
-
-
- 183
- 239
- 204
-
-
- 204
- 239
- 253
-
-
- 204
- 253
- 233
-
-
- 271
- 306
- 286
-
-
- 163
- 179
- 142
-
-
- 142
- 179
- 173
-
-
- 142
- 173
- 132
-
-
- 132
- 173
- 167
-
-
- 132
- 167
- 126
-
-
- 126
- 167
- 169
-
-
- 126
- 169
- 128
-
-
- 128
- 169
- 175
-
-
- 128
- 175
- 134
-
-
- 134
- 175
- 181
-
-
- 134
- 181
- 146
-
-
- 146
- 181
- 196
-
-
- 146
- 196
- 152
-
-
- 152
- 196
- 206
-
-
- 152
- 206
- 171
-
-
- 171
- 206
- 226
-
-
- 171
- 226
- 192
-
-
- 192
- 226
- 255
-
-
- 192
- 255
- 208
-
-
- 208
- 255
- 271
-
-
- 208
- 271
- 239
-
-
- 239
- 271
- 286
-
-
- 239
- 286
- 259
-
-
- 315
- 344
- 327
-
-
- 212
- 228
- 179
-
-
- 179
- 228
- 222
-
-
- 179
- 222
- 173
-
-
- 173
- 222
- 216
-
-
- 173
- 216
- 167
-
-
- 167
- 216
- 218
-
-
- 167
- 218
- 169
-
-
- 169
- 218
- 224
-
-
- 169
- 224
- 175
-
-
- 175
- 224
- 230
-
-
- 175
- 230
- 181
-
-
- 181
- 230
- 243
-
-
- 181
- 243
- 196
-
-
- 196
- 243
- 257
-
-
- 196
- 257
- 206
-
-
- 206
- 257
- 269
-
-
- 206
- 269
- 226
-
-
- 226
- 269
- 298
-
-
- 226
- 298
- 255
-
-
- 255
- 298
- 315
-
-
- 255
- 315
- 271
-
-
- 271
- 315
- 327
-
-
- 271
- 327
- 306
-
-
- 379
- 423
- 405
-
-
- 280
- 282
- 228
-
-
- 228
- 282
- 274
-
-
- 228
- 274
- 222
-
-
- 222
- 274
- 265
-
-
- 222
- 265
- 216
-
-
- 216
- 265
- 267
-
-
- 216
- 267
- 218
-
-
- 218
- 267
- 276
-
-
- 218
- 276
- 224
-
-
- 224
- 276
- 284
-
-
- 224
- 284
- 230
-
-
- 230
- 284
- 304
-
-
- 230
- 304
- 243
-
-
- 243
- 304
- 310
-
-
- 243
- 310
- 257
-
-
- 257
- 310
- 321
-
-
- 257
- 321
- 269
-
-
- 269
- 321
- 349
-
-
- 269
- 349
- 298
-
-
- 298
- 349
- 379
-
-
- 298
- 379
- 315
-
-
- 315
- 379
- 405
-
-
- 315
- 405
- 344
-
-
- 300
- 357
- 282
-
-
- 282
- 357
- 340
-
-
- 282
- 340
- 274
-
-
- 274
- 340
- 336
-
-
- 274
- 336
- 265
-
-
- 265
- 336
- 338
-
-
- 265
- 338
- 267
-
-
- 267
- 338
- 342
-
-
- 267
- 342
- 276
-
-
- 276
- 342
- 359
-
-
- 276
- 359
- 284
-
-
- 284
- 359
- 369
-
-
- 284
- 369
- 304
-
-
- 304
- 369
- 389
-
-
- 304
- 389
- 310
-
-
- 310
- 389
- 410
-
-
- 310
- 410
- 321
-
-
- 321
- 410
- 444
-
-
- 321
- 444
- 349
-
-
- 349
- 444
- 480
-
-
- 349
- 480
- 379
-
-
- 379
- 480
- 506
-
-
- 379
- 506
- 423
-
-
- 372
- 474
- 357
-
-
- 357
- 474
- 460
-
-
- 357
- 460
- 340
-
-
- 340
- 460
- 450
-
-
- 340
- 450
- 336
-
-
- 336
- 450
- 454
-
-
- 336
- 454
- 338
-
-
- 338
- 454
- 462
-
-
- 338
- 462
- 342
-
-
- 342
- 462
- 476
-
-
- 342
- 476
- 359
-
-
- 359
- 476
- 488
-
-
- 359
- 488
- 369
-
-
- 369
- 488
- 502
-
-
- 369
- 502
- 389
-
-
- 389
- 502
- 516
-
-
- 389
- 516
- 410
-
-
- 410
- 516
- 532
-
-
- 410
- 532
- 444
-
-
- 444
- 532
- 546
-
-
- 444
- 546
- 480
-
-
- 480
- 546
- 578
-
-
- 480
- 578
- 508
-
-
- 514
- 562
- 474
-
-
- 474
- 562
- 556
-
-
- 474
- 556
- 460
-
-
- 460
- 556
- 548
-
-
- 460
- 548
- 450
-
-
- 450
- 548
- 550
-
-
- 450
- 550
- 454
-
-
- 454
- 550
- 558
-
-
- 454
- 558
- 462
-
-
- 462
- 558
- 564
-
-
- 462
- 564
- 476
-
-
- 476
- 564
- 580
-
-
- 476
- 580
- 488
-
-
- 488
- 580
- 588
-
-
- 488
- 588
- 502
-
-
- 502
- 588
- 598
-
-
- 502
- 598
- 516
-
-
- 516
- 598
- 612
-
-
- 516
- 612
- 532
-
-
- 532
- 612
- 618
-
-
- 532
- 618
- 546
-
-
- 546
- 618
- 632
-
-
- 546
- 632
- 586
-
-
- 622
- 648
- 562
-
-
- 562
- 648
- 640
-
-
- 562
- 640
- 556
-
-
- 556
- 640
- 634
-
-
- 556
- 634
- 548
-
-
- 548
- 634
- 636
-
-
- 548
- 636
- 550
-
-
- 550
- 636
- 642
-
-
- 550
- 642
- 558
-
-
- 558
- 642
- 650
-
-
- 558
- 650
- 564
-
-
- 564
- 650
- 658
-
-
- 564
- 658
- 580
-
-
- 580
- 658
- 664
-
-
- 580
- 664
- 588
-
-
- 588
- 664
- 668
-
-
- 588
- 668
- 598
-
-
- 598
- 668
- 678
-
-
- 598
- 678
- 612
-
-
- 612
- 678
- 690
-
-
- 612
- 690
- 618
-
-
- 618
- 690
- 704
-
-
- 618
- 704
- 660
-
-
- 724
- 734
- 648
-
-
- 648
- 734
- 726
-
-
- 648
- 726
- 640
-
-
- 640
- 726
- 720
-
-
- 640
- 720
- 634
-
-
- 634
- 720
- 722
-
-
- 634
- 722
- 636
-
-
- 636
- 722
- 728
-
-
- 636
- 728
- 642
-
-
- 642
- 728
- 736
-
-
- 642
- 736
- 650
-
-
- 650
- 736
- 742
-
-
- 650
- 742
- 658
-
-
- 658
- 742
- 748
-
-
- 658
- 748
- 664
-
-
- 664
- 748
- 758
-
-
- 664
- 758
- 668
-
-
- 668
- 758
- 760
-
-
- 668
- 760
- 678
-
-
- 678
- 760
- 764
-
-
- 678
- 764
- 690
-
-
- 690
- 764
- 766
-
-
- 690
- 766
- 730
-
-
- 830
- 836
- 792
-
-
- 740
- 804
- 734
-
-
- 734
- 804
- 800
-
-
- 734
- 800
- 726
-
-
- 726
- 800
- 796
-
-
- 726
- 796
- 720
-
-
- 720
- 796
- 798
-
-
- 720
- 798
- 722
-
-
- 722
- 798
- 802
-
-
- 722
- 802
- 728
-
-
- 728
- 802
- 806
-
-
- 728
- 806
- 736
-
-
- 736
- 806
- 812
-
-
- 736
- 812
- 742
-
-
- 742
- 812
- 816
-
-
- 742
- 816
- 748
-
-
- 748
- 816
- 820
-
-
- 748
- 820
- 758
-
-
- 758
- 820
- 826
-
-
- 758
- 826
- 760
-
-
- 760
- 826
- 830
-
-
- 760
- 830
- 764
-
-
- 764
- 830
- 792
-
-
- 764
- 792
- 766
-
-
- 902
- 904
- 856
-
-
- 832
- 878
- 804
-
-
- 804
- 878
- 872
-
-
- 804
- 872
- 800
-
-
- 800
- 872
- 868
-
-
- 800
- 868
- 796
-
-
- 796
- 868
- 870
-
-
- 796
- 870
- 798
-
-
- 798
- 870
- 874
-
-
- 798
- 874
- 802
-
-
- 802
- 874
- 880
-
-
- 802
- 880
- 806
-
-
- 806
- 880
- 886
-
-
- 806
- 886
- 812
-
-
- 812
- 886
- 894
-
-
- 812
- 894
- 816
-
-
- 816
- 894
- 898
-
-
- 816
- 898
- 820
-
-
- 820
- 898
- 900
-
-
- 820
- 900
- 826
-
-
- 826
- 900
- 902
-
-
- 826
- 902
- 830
-
-
- 830
- 902
- 856
-
-
- 830
- 856
- 836
-
-
- 948
- 946
- 944
-
-
- 916
- 962
- 878
-
-
- 878
- 962
- 966
-
-
- 878
- 966
- 872
-
-
- 872
- 966
- 968
-
-
- 872
- 968
- 868
-
-
- 868
- 968
- 970
-
-
- 868
- 970
- 870
-
-
- 870
- 970
- 964
-
-
- 870
- 964
- 874
-
-
- 874
- 964
- 960
-
-
- 874
- 960
- 880
-
-
- 880
- 960
- 956
-
-
- 880
- 956
- 886
-
-
- 886
- 956
- 954
-
-
- 886
- 954
- 894
-
-
- 894
- 954
- 952
-
-
- 894
- 952
- 898
-
-
- 898
- 952
- 950
-
-
- 898
- 950
- 900
-
-
- 900
- 950
- 948
-
-
- 900
- 948
- 902
-
-
- 902
- 948
- 944
-
-
- 902
- 944
- 904
-
-
- 1008
- 1004
- 1002
-
-
- 1006
- 1036
- 962
-
-
- 962
- 1036
- 1042
-
-
- 962
- 1042
- 966
-
-
- 966
- 1042
- 1048
-
-
- 966
- 1048
- 968
-
-
- 968
- 1048
- 1046
-
-
- 968
- 1046
- 970
-
-
- 970
- 1046
- 1040
-
-
- 970
- 1040
- 964
-
-
- 964
- 1040
- 1034
-
-
- 964
- 1034
- 960
-
-
- 960
- 1034
- 1028
-
-
- 960
- 1028
- 956
-
-
- 956
- 1028
- 1020
-
-
- 956
- 1020
- 954
-
-
- 954
- 1020
- 1014
-
-
- 954
- 1014
- 952
-
-
- 952
- 1014
- 1010
-
-
- 952
- 1010
- 950
-
-
- 950
- 1010
- 1008
-
-
- 950
- 1008
- 948
-
-
- 948
- 1008
- 1002
-
-
- 948
- 1002
- 946
-
-
- 1030
- 1108
- 1036
-
-
- 1036
- 1108
- 1116
-
-
- 1036
- 1116
- 1042
-
-
- 1042
- 1116
- 1120
-
-
- 1042
- 1120
- 1048
-
-
- 1048
- 1120
- 1118
-
-
- 1048
- 1118
- 1046
-
-
- 1046
- 1118
- 1112
-
-
- 1046
- 1112
- 1040
-
-
- 1040
- 1112
- 1106
-
-
- 1040
- 1106
- 1034
-
-
- 1034
- 1106
- 1098
-
-
- 1034
- 1098
- 1028
-
-
- 1028
- 1098
- 1096
-
-
- 1028
- 1096
- 1020
-
-
- 1020
- 1096
- 1090
-
-
- 1020
- 1090
- 1014
-
-
- 1014
- 1090
- 1084
-
-
- 1014
- 1084
- 1010
-
-
- 1010
- 1084
- 1080
-
-
- 1010
- 1080
- 1008
-
-
- 1008
- 1080
- 1066
-
-
- 1008
- 1066
- 1004
-
-
- 1114
- 1194
- 1108
-
-
- 1108
- 1194
- 1202
-
-
- 1108
- 1202
- 1116
-
-
- 1116
- 1202
- 1206
-
-
- 1116
- 1206
- 1120
-
-
- 1120
- 1206
- 1204
-
-
- 1120
- 1204
- 1118
-
-
- 1118
- 1204
- 1200
-
-
- 1118
- 1200
- 1112
-
-
- 1112
- 1200
- 1192
-
-
- 1112
- 1192
- 1106
-
-
- 1106
- 1192
- 1186
-
-
- 1106
- 1186
- 1098
-
-
- 1098
- 1186
- 1180
-
-
- 1098
- 1180
- 1096
-
-
- 1096
- 1180
- 1170
-
-
- 1096
- 1170
- 1090
-
-
- 1090
- 1170
- 1160
-
-
- 1090
- 1160
- 1084
-
-
- 1084
- 1160
- 1152
-
-
- 1084
- 1152
- 1080
-
-
- 1080
- 1152
- 1142
-
-
- 1080
- 1142
- 1072
-
-
- 1220
- 1276
- 1194
-
-
- 1194
- 1276
- 1284
-
-
- 1194
- 1284
- 1202
-
-
- 1202
- 1284
- 1288
-
-
- 1202
- 1288
- 1206
-
-
- 1206
- 1288
- 1286
-
-
- 1206
- 1286
- 1204
-
-
- 1204
- 1286
- 1282
-
-
- 1204
- 1282
- 1200
-
-
- 1200
- 1282
- 1274
-
-
- 1200
- 1274
- 1192
-
-
- 1192
- 1274
- 1264
-
-
- 1192
- 1264
- 1186
-
-
- 1186
- 1264
- 1254
-
-
- 1186
- 1254
- 1180
-
-
- 1180
- 1254
- 1244
-
-
- 1180
- 1244
- 1170
-
-
- 1170
- 1244
- 1236
-
-
- 1170
- 1236
- 1160
-
-
- 1160
- 1236
- 1222
-
-
- 1160
- 1222
- 1152
-
-
- 1152
- 1222
- 1210
-
-
- 1152
- 1210
- 1150
-
-
- 1324
- 1374
- 1276
-
-
- 1276
- 1374
- 1384
-
-
- 1276
- 1384
- 1284
-
-
- 1284
- 1384
- 1390
-
-
- 1284
- 1390
- 1288
-
-
- 1288
- 1390
- 1388
-
-
- 1288
- 1388
- 1286
-
-
- 1286
- 1388
- 1382
-
-
- 1286
- 1382
- 1282
-
-
- 1282
- 1382
- 1372
-
-
- 1282
- 1372
- 1274
-
-
- 1274
- 1372
- 1352
-
-
- 1274
- 1352
- 1264
-
-
- 1264
- 1352
- 1342
-
-
- 1264
- 1342
- 1254
-
-
- 1254
- 1342
- 1322
-
-
- 1254
- 1322
- 1244
-
-
- 1244
- 1322
- 1314
-
-
- 1244
- 1314
- 1236
-
-
- 1236
- 1314
- 1290
-
-
- 1236
- 1290
- 1222
-
-
- 1222
- 1290
- 1266
-
-
- 1222
- 1266
- 1226
-
-
- 1463
- 1489
- 1374
-
-
- 1374
- 1489
- 1501
-
-
- 1374
- 1501
- 1384
-
-
- 1384
- 1501
- 1507
-
-
- 1384
- 1507
- 1390
-
-
- 1390
- 1507
- 1505
-
-
- 1390
- 1505
- 1388
-
-
- 1388
- 1505
- 1497
-
-
- 1388
- 1497
- 1382
-
-
- 1382
- 1497
- 1487
-
-
- 1382
- 1487
- 1372
-
-
- 1372
- 1487
- 1467
-
-
- 1372
- 1467
- 1352
-
-
- 1352
- 1467
- 1453
-
-
- 1352
- 1453
- 1342
-
-
- 1342
- 1453
- 1433
-
-
- 1342
- 1433
- 1322
-
-
- 1322
- 1433
- 1398
-
-
- 1322
- 1398
- 1314
-
-
- 1314
- 1398
- 1362
-
-
- 1314
- 1362
- 1290
-
-
- 1290
- 1362
- 1338
-
-
- 1290
- 1338
- 1302
-
-
- 1457
- 1419
- 1380
-
-
- 1469
- 1556
- 1489
-
-
- 1489
- 1556
- 1566
-
-
- 1489
- 1566
- 1501
-
-
- 1501
- 1566
- 1576
-
-
- 1501
- 1576
- 1507
-
-
- 1507
- 1576
- 1574
-
-
- 1507
- 1574
- 1505
-
-
- 1505
- 1574
- 1564
-
-
- 1505
- 1564
- 1497
-
-
- 1497
- 1564
- 1554
-
-
- 1497
- 1554
- 1487
-
-
- 1487
- 1554
- 1544
-
-
- 1487
- 1544
- 1467
-
-
- 1467
- 1544
- 1532
-
-
- 1467
- 1532
- 1453
-
-
- 1453
- 1532
- 1516
-
-
- 1453
- 1516
- 1433
-
-
- 1433
- 1516
- 1491
-
-
- 1433
- 1491
- 1398
-
-
- 1398
- 1491
- 1457
-
-
- 1398
- 1457
- 1362
-
-
- 1362
- 1457
- 1380
-
-
- 1362
- 1380
- 1338
-
-
- 1526
- 1495
- 1473
-
-
- 1558
- 1615
- 1556
-
-
- 1556
- 1615
- 1621
-
-
- 1556
- 1621
- 1566
-
-
- 1566
- 1621
- 1625
-
-
- 1566
- 1625
- 1576
-
-
- 1576
- 1625
- 1623
-
-
- 1576
- 1623
- 1574
-
-
- 1574
- 1623
- 1619
-
-
- 1574
- 1619
- 1564
-
-
- 1564
- 1619
- 1613
-
-
- 1564
- 1613
- 1554
-
-
- 1554
- 1613
- 1599
-
-
- 1554
- 1599
- 1544
-
-
- 1544
- 1599
- 1587
-
-
- 1544
- 1587
- 1532
-
-
- 1532
- 1587
- 1570
-
-
- 1532
- 1570
- 1516
-
-
- 1516
- 1570
- 1548
-
-
- 1516
- 1548
- 1491
-
-
- 1491
- 1548
- 1526
-
-
- 1491
- 1526
- 1457
-
-
- 1457
- 1526
- 1473
-
-
- 1457
- 1473
- 1419
-
-
- 1572
- 1540
- 1536
-
-
- 1627
- 1664
- 1615
-
-
- 1615
- 1664
- 1670
-
-
- 1615
- 1670
- 1621
-
-
- 1621
- 1670
- 1676
-
-
- 1621
- 1676
- 1625
-
-
- 1625
- 1676
- 1674
-
-
- 1625
- 1674
- 1623
-
-
- 1623
- 1674
- 1668
-
-
- 1623
- 1668
- 1619
-
-
- 1619
- 1668
- 1662
-
-
- 1619
- 1662
- 1613
-
-
- 1613
- 1662
- 1643
-
-
- 1613
- 1643
- 1599
-
-
- 1599
- 1643
- 1633
-
-
- 1599
- 1633
- 1587
-
-
- 1587
- 1633
- 1617
-
-
- 1587
- 1617
- 1570
-
-
- 1570
- 1617
- 1591
-
-
- 1570
- 1591
- 1548
-
-
- 1548
- 1591
- 1572
-
-
- 1548
- 1572
- 1526
-
-
- 1526
- 1572
- 1536
-
-
- 1526
- 1536
- 1495
-
-
- 1603
- 1583
- 1579
-
-
- 1680
- 1699
- 1664
-
-
- 1664
- 1699
- 1709
-
-
- 1664
- 1709
- 1670
-
-
- 1670
- 1709
- 1717
-
-
- 1670
- 1717
- 1676
-
-
- 1676
- 1717
- 1715
-
-
- 1676
- 1715
- 1674
-
-
- 1674
- 1715
- 1707
-
-
- 1674
- 1707
- 1668
-
-
- 1668
- 1707
- 1695
-
-
- 1668
- 1695
- 1662
-
-
- 1662
- 1695
- 1689
-
-
- 1662
- 1689
- 1643
-
-
- 1643
- 1689
- 1672
-
-
- 1643
- 1672
- 1633
-
-
- 1633
- 1672
- 1649
-
-
- 1633
- 1649
- 1617
-
-
- 1617
- 1649
- 1631
-
-
- 1617
- 1631
- 1591
-
-
- 1591
- 1631
- 1603
-
-
- 1591
- 1603
- 1572
-
-
- 1572
- 1603
- 1579
-
-
- 1572
- 1579
- 1540
-
-
- 1691
- 1734
- 1699
-
-
- 1699
- 1734
- 1741
-
-
- 1699
- 1741
- 1709
-
-
- 1709
- 1741
- 1751
-
-
- 1709
- 1751
- 1717
-
-
- 1717
- 1751
- 1749
-
-
- 1717
- 1749
- 1715
-
-
- 1715
- 1749
- 1739
-
-
- 1715
- 1739
- 1707
-
-
- 1707
- 1739
- 1732
-
-
- 1707
- 1732
- 1695
-
-
- 1695
- 1732
- 1722
-
-
- 1695
- 1722
- 1689
-
-
- 1689
- 1722
- 1701
-
-
- 1689
- 1701
- 1672
-
-
- 1672
- 1701
- 1682
-
-
- 1672
- 1682
- 1649
-
-
- 1649
- 1682
- 1660
-
-
- 1649
- 1660
- 1631
-
-
- 1631
- 1660
- 1637
-
-
- 1631
- 1637
- 1603
-
-
- 1603
- 1637
- 1607
-
-
- 1603
- 1607
- 1583
-
-
- 1728
- 1765
- 1734
-
-
- 1734
- 1765
- 1776
-
-
- 1734
- 1776
- 1741
-
-
- 1741
- 1776
- 1786
-
-
- 1741
- 1786
- 1751
-
-
- 1751
- 1786
- 1784
-
-
- 1751
- 1784
- 1749
-
-
- 1749
- 1784
- 1774
-
-
- 1749
- 1774
- 1739
-
-
- 1739
- 1774
- 1763
-
-
- 1739
- 1763
- 1732
-
-
- 1732
- 1763
- 1743
-
-
- 1732
- 1743
- 1722
-
-
- 1722
- 1743
- 1730
-
-
- 1722
- 1730
- 1701
-
-
- 1701
- 1730
- 1705
-
-
- 1701
- 1705
- 1682
-
-
- 1682
- 1705
- 1684
-
-
- 1682
- 1684
- 1660
-
-
- 1660
- 1684
- 1656
-
-
- 1660
- 1656
- 1637
-
-
- 1637
- 1656
- 1629
-
-
- 1637
- 1629
- 1611
-
-
- 1757
- 1795
- 1765
-
-
- 1765
- 1795
- 1801
-
-
- 1765
- 1801
- 1776
-
-
- 1776
- 1801
- 1811
-
-
- 1776
- 1811
- 1786
-
-
- 1786
- 1811
- 1809
-
-
- 1786
- 1809
- 1784
-
-
- 1784
- 1809
- 1799
-
-
- 1784
- 1799
- 1774
-
-
- 1774
- 1799
- 1792
-
-
- 1774
- 1792
- 1763
-
-
- 1763
- 1792
- 1768
-
-
- 1763
- 1768
- 1743
-
-
- 1743
- 1768
- 1745
-
-
- 1743
- 1745
- 1730
-
-
- 1730
- 1745
- 1726
-
-
- 1730
- 1726
- 1705
-
-
- 1705
- 1726
- 1697
-
-
- 1705
- 1697
- 1684
-
-
- 1684
- 1697
- 1678
-
-
- 1684
- 1678
- 1656
-
-
- 1656
- 1678
- 1641
-
-
- 1656
- 1641
- 1635
-
-
- 1782
- 1807
- 1795
-
-
- 1795
- 1807
- 1821
-
-
- 1795
- 1821
- 1801
-
-
- 1801
- 1821
- 1827
-
-
- 1801
- 1827
- 1811
-
-
- 1811
- 1827
- 1825
-
-
- 1811
- 1825
- 1809
-
-
- 1809
- 1825
- 1819
-
-
- 1809
- 1819
- 1799
-
-
- 1799
- 1819
- 1803
-
-
- 1799
- 1803
- 1792
-
-
- 1792
- 1803
- 1788
-
-
- 1792
- 1788
- 1768
-
-
- 1768
- 1788
- 1759
-
-
- 1768
- 1759
- 1745
-
-
- 1745
- 1759
- 1736
-
-
- 1745
- 1736
- 1726
-
-
- 1726
- 1736
- 1711
-
-
- 1726
- 1711
- 1697
-
-
- 1697
- 1711
- 1686
-
-
- 1697
- 1686
- 1678
-
-
- 1678
- 1686
- 1651
-
-
- 1678
- 1651
- 1645
-
-
- 1790
- 1814
- 1807
-
-
- 1807
- 1814
- 1824
-
-
- 1807
- 1824
- 1821
-
-
- 1821
- 1824
- 1832
-
-
- 1821
- 1832
- 1827
-
-
- 1827
- 1832
- 1831
-
-
- 1827
- 1831
- 1825
-
-
- 1825
- 1831
- 1823
-
-
- 1825
- 1823
- 1819
-
-
- 1819
- 1823
- 1813
-
-
- 1819
- 1813
- 1803
-
-
- 1803
- 1813
- 1794
-
-
- 1803
- 1794
- 1788
-
-
- 1788
- 1794
- 1767
-
-
- 1788
- 1767
- 1759
-
-
- 1759
- 1767
- 1738
-
-
- 1759
- 1738
- 1736
-
-
- 1736
- 1738
- 1719
-
-
- 1736
- 1719
- 1711
-
-
- 1711
- 1719
- 1688
-
-
- 1711
- 1688
- 1686
-
-
- 1686
- 1688
- 1654
-
-
- 1686
- 1654
- 1653
-
-
- 1687
- 1652
- 1655
-
-
- 1797
- 1808
- 1814
-
-
- 1814
- 1808
- 1822
-
-
- 1814
- 1822
- 1824
-
-
- 1824
- 1822
- 1828
-
-
- 1824
- 1828
- 1832
-
-
- 1832
- 1828
- 1826
-
-
- 1832
- 1826
- 1831
-
-
- 1831
- 1826
- 1820
-
-
- 1831
- 1820
- 1823
-
-
- 1823
- 1820
- 1804
-
-
- 1823
- 1804
- 1813
-
-
- 1813
- 1804
- 1789
-
-
- 1813
- 1789
- 1794
-
-
- 1794
- 1789
- 1760
-
-
- 1794
- 1760
- 1767
-
-
- 1767
- 1760
- 1737
-
-
- 1767
- 1737
- 1738
-
-
- 1738
- 1737
- 1712
-
-
- 1738
- 1712
- 1719
-
-
- 1719
- 1712
- 1687
-
-
- 1719
- 1687
- 1688
-
-
- 1688
- 1687
- 1655
-
-
- 1688
- 1655
- 1654
-
-
- 1679
- 1642
- 1646
-
-
- 1783
- 1796
- 1808
-
-
- 1808
- 1796
- 1802
-
-
- 1808
- 1802
- 1822
-
-
- 1822
- 1802
- 1812
-
-
- 1822
- 1812
- 1828
-
-
- 1828
- 1812
- 1810
-
-
- 1828
- 1810
- 1826
-
-
- 1826
- 1810
- 1800
-
-
- 1826
- 1800
- 1820
-
-
- 1820
- 1800
- 1793
-
-
- 1820
- 1793
- 1804
-
-
- 1804
- 1793
- 1769
-
-
- 1804
- 1769
- 1789
-
-
- 1789
- 1769
- 1746
-
-
- 1789
- 1746
- 1760
-
-
- 1760
- 1746
- 1727
-
-
- 1760
- 1727
- 1737
-
-
- 1737
- 1727
- 1698
-
-
- 1737
- 1698
- 1712
-
-
- 1712
- 1698
- 1679
-
-
- 1712
- 1679
- 1687
-
-
- 1687
- 1679
- 1646
-
-
- 1687
- 1646
- 1652
-
-
- 1657
- 1630
- 1636
-
-
- 1758
- 1766
- 1796
-
-
- 1796
- 1766
- 1777
-
-
- 1796
- 1777
- 1802
-
-
- 1802
- 1777
- 1787
-
-
- 1802
- 1787
- 1812
-
-
- 1812
- 1787
- 1785
-
-
- 1812
- 1785
- 1810
-
-
- 1810
- 1785
- 1775
-
-
- 1810
- 1775
- 1800
-
-
- 1800
- 1775
- 1764
-
-
- 1800
- 1764
- 1793
-
-
- 1793
- 1764
- 1744
-
-
- 1793
- 1744
- 1769
-
-
- 1769
- 1744
- 1731
-
-
- 1769
- 1731
- 1746
-
-
- 1746
- 1731
- 1706
-
-
- 1746
- 1706
- 1727
-
-
- 1727
- 1706
- 1685
-
-
- 1727
- 1685
- 1698
-
-
- 1698
- 1685
- 1657
-
-
- 1698
- 1657
- 1679
-
-
- 1679
- 1657
- 1636
-
-
- 1679
- 1636
- 1642
-
-
- 1638
- 1608
- 1612
-
-
- 1729
- 1735
- 1766
-
-
- 1766
- 1735
- 1742
-
-
- 1766
- 1742
- 1777
-
-
- 1777
- 1742
- 1752
-
-
- 1777
- 1752
- 1787
-
-
- 1787
- 1752
- 1750
-
-
- 1787
- 1750
- 1785
-
-
- 1785
- 1750
- 1740
-
-
- 1785
- 1740
- 1775
-
-
- 1775
- 1740
- 1733
-
-
- 1775
- 1733
- 1764
-
-
- 1764
- 1733
- 1723
-
-
- 1764
- 1723
- 1744
-
-
- 1744
- 1723
- 1702
-
-
- 1744
- 1702
- 1731
-
-
- 1731
- 1702
- 1683
-
-
- 1731
- 1683
- 1706
-
-
- 1706
- 1683
- 1661
-
-
- 1706
- 1661
- 1685
-
-
- 1685
- 1661
- 1638
-
-
- 1685
- 1638
- 1657
-
-
- 1657
- 1638
- 1612
-
-
- 1657
- 1612
- 1630
-
-
- 1725
- 1700
- 1735
-
-
- 1735
- 1700
- 1710
-
-
- 1735
- 1710
- 1742
-
-
- 1742
- 1710
- 1718
-
-
- 1742
- 1718
- 1752
-
-
- 1752
- 1718
- 1716
-
-
- 1752
- 1716
- 1750
-
-
- 1750
- 1716
- 1708
-
-
- 1750
- 1708
- 1740
-
-
- 1740
- 1708
- 1696
-
-
- 1740
- 1696
- 1733
-
-
- 1733
- 1696
- 1690
-
-
- 1733
- 1690
- 1723
-
-
- 1723
- 1690
- 1673
-
-
- 1723
- 1673
- 1702
-
-
- 1702
- 1673
- 1650
-
-
- 1702
- 1650
- 1683
-
-
- 1683
- 1650
- 1632
-
-
- 1683
- 1632
- 1661
-
-
- 1661
- 1632
- 1604
-
-
- 1661
- 1604
- 1638
-
-
- 1638
- 1604
- 1584
-
-
- 1638
- 1584
- 1608
-
-
- 1681
- 1665
- 1700
-
-
- 1700
- 1665
- 1671
-
-
- 1700
- 1671
- 1710
-
-
- 1710
- 1671
- 1677
-
-
- 1710
- 1677
- 1718
-
-
- 1718
- 1677
- 1675
-
-
- 1718
- 1675
- 1716
-
-
- 1716
- 1675
- 1669
-
-
- 1716
- 1669
- 1708
-
-
- 1708
- 1669
- 1663
-
-
- 1708
- 1663
- 1696
-
-
- 1696
- 1663
- 1644
-
-
- 1696
- 1644
- 1690
-
-
- 1690
- 1644
- 1634
-
-
- 1690
- 1634
- 1673
-
-
- 1673
- 1634
- 1618
-
-
- 1673
- 1618
- 1650
-
-
- 1650
- 1618
- 1592
-
-
- 1650
- 1592
- 1632
-
-
- 1632
- 1592
- 1573
-
-
- 1632
- 1573
- 1604
-
-
- 1604
- 1573
- 1541
-
-
- 1604
- 1541
- 1580
-
-
- 1628
- 1616
- 1665
-
-
- 1665
- 1616
- 1622
-
-
- 1665
- 1622
- 1671
-
-
- 1671
- 1622
- 1626
-
-
- 1671
- 1626
- 1677
-
-
- 1677
- 1626
- 1624
-
-
- 1677
- 1624
- 1675
-
-
- 1675
- 1624
- 1620
-
-
- 1675
- 1620
- 1669
-
-
- 1669
- 1620
- 1614
-
-
- 1669
- 1614
- 1663
-
-
- 1663
- 1614
- 1600
-
-
- 1663
- 1600
- 1644
-
-
- 1644
- 1600
- 1588
-
-
- 1644
- 1588
- 1634
-
-
- 1634
- 1588
- 1571
-
-
- 1634
- 1571
- 1618
-
-
- 1618
- 1571
- 1549
-
-
- 1618
- 1549
- 1592
-
-
- 1592
- 1549
- 1527
-
-
- 1592
- 1527
- 1573
-
-
- 1573
- 1527
- 1496
-
-
- 1573
- 1496
- 1537
-
-
- 1559
- 1557
- 1616
-
-
- 1616
- 1557
- 1567
-
-
- 1616
- 1567
- 1622
-
-
- 1622
- 1567
- 1577
-
-
- 1622
- 1577
- 1626
-
-
- 1626
- 1577
- 1575
-
-
- 1626
- 1575
- 1624
-
-
- 1624
- 1575
- 1565
-
-
- 1624
- 1565
- 1620
-
-
- 1620
- 1565
- 1555
-
-
- 1620
- 1555
- 1614
-
-
- 1614
- 1555
- 1545
-
-
- 1614
- 1545
- 1600
-
-
- 1600
- 1545
- 1533
-
-
- 1600
- 1533
- 1588
-
-
- 1588
- 1533
- 1517
-
-
- 1588
- 1517
- 1571
-
-
- 1571
- 1517
- 1492
-
-
- 1571
- 1492
- 1549
-
-
- 1549
- 1492
- 1458
-
-
- 1549
- 1458
- 1527
-
-
- 1527
- 1458
- 1420
-
-
- 1527
- 1420
- 1474
-
-
- 1547
- 1490
- 1557
-
-
- 1557
- 1490
- 1502
-
-
- 1557
- 1502
- 1567
-
-
- 1567
- 1502
- 1508
-
-
- 1567
- 1508
- 1577
-
-
- 1577
- 1508
- 1506
-
-
- 1577
- 1506
- 1575
-
-
- 1575
- 1506
- 1498
-
-
- 1575
- 1498
- 1565
-
-
- 1565
- 1498
- 1488
-
-
- 1565
- 1488
- 1555
-
-
- 1555
- 1488
- 1468
-
-
- 1555
- 1468
- 1545
-
-
- 1545
- 1468
- 1454
-
-
- 1545
- 1454
- 1533
-
-
- 1533
- 1454
- 1434
-
-
- 1533
- 1434
- 1517
-
-
- 1517
- 1434
- 1399
-
-
- 1517
- 1399
- 1492
-
-
- 1492
- 1399
- 1363
-
-
- 1492
- 1363
- 1458
-
-
- 1458
- 1363
- 1339
-
-
- 1458
- 1339
- 1381
-
-
- 1291
- 1267
- 1303
-
-
- 1464
- 1375
- 1490
-
-
- 1490
- 1375
- 1385
-
-
- 1490
- 1385
- 1502
-
-
- 1502
- 1385
- 1391
-
-
- 1502
- 1391
- 1508
-
-
- 1508
- 1391
- 1389
-
-
- 1508
- 1389
- 1506
-
-
- 1506
- 1389
- 1383
-
-
- 1506
- 1383
- 1498
-
-
- 1498
- 1383
- 1373
-
-
- 1498
- 1373
- 1488
-
-
- 1488
- 1373
- 1353
-
-
- 1488
- 1353
- 1468
-
-
- 1468
- 1353
- 1343
-
-
- 1468
- 1343
- 1454
-
-
- 1454
- 1343
- 1323
-
-
- 1454
- 1323
- 1434
-
-
- 1434
- 1323
- 1315
-
-
- 1434
- 1315
- 1399
-
-
- 1399
- 1315
- 1291
-
-
- 1399
- 1291
- 1363
-
-
- 1363
- 1291
- 1303
-
-
- 1363
- 1303
- 1339
-
-
- 1223
- 1211
- 1227
-
-
- 1325
- 1277
- 1375
-
-
- 1375
- 1277
- 1285
-
-
- 1375
- 1285
- 1385
-
-
- 1385
- 1285
- 1289
-
-
- 1385
- 1289
- 1391
-
-
- 1391
- 1289
- 1287
-
-
- 1391
- 1287
- 1389
-
-
- 1389
- 1287
- 1283
-
-
- 1389
- 1283
- 1383
-
-
- 1383
- 1283
- 1275
-
-
- 1383
- 1275
- 1373
-
-
- 1373
- 1275
- 1265
-
-
- 1373
- 1265
- 1353
-
-
- 1353
- 1265
- 1255
-
-
- 1353
- 1255
- 1343
-
-
- 1343
- 1255
- 1245
-
-
- 1343
- 1245
- 1323
-
-
- 1323
- 1245
- 1237
-
-
- 1323
- 1237
- 1315
-
-
- 1315
- 1237
- 1223
-
-
- 1315
- 1223
- 1291
-
-
- 1291
- 1223
- 1227
-
-
- 1291
- 1227
- 1267
-
-
- 1153
- 1143
- 1151
-
-
- 1221
- 1195
- 1277
-
-
- 1277
- 1195
- 1203
-
-
- 1277
- 1203
- 1285
-
-
- 1285
- 1203
- 1207
-
-
- 1285
- 1207
- 1289
-
-
- 1289
- 1207
- 1205
-
-
- 1289
- 1205
- 1287
-
-
- 1287
- 1205
- 1201
-
-
- 1287
- 1201
- 1283
-
-
- 1283
- 1201
- 1193
-
-
- 1283
- 1193
- 1275
-
-
- 1275
- 1193
- 1187
-
-
- 1275
- 1187
- 1265
-
-
- 1265
- 1187
- 1181
-
-
- 1265
- 1181
- 1255
-
-
- 1255
- 1181
- 1171
-
-
- 1255
- 1171
- 1245
-
-
- 1245
- 1171
- 1161
-
-
- 1245
- 1161
- 1237
-
-
- 1237
- 1161
- 1153
-
-
- 1237
- 1153
- 1223
-
-
- 1223
- 1153
- 1151
-
-
- 1223
- 1151
- 1211
-
-
- 1081
- 1067
- 1073
-
-
- 1115
- 1109
- 1195
-
-
- 1195
- 1109
- 1117
-
-
- 1195
- 1117
- 1203
-
-
- 1203
- 1117
- 1121
-
-
- 1203
- 1121
- 1207
-
-
- 1207
- 1121
- 1119
-
-
- 1207
- 1119
- 1205
-
-
- 1205
- 1119
- 1113
-
-
- 1205
- 1113
- 1201
-
-
- 1201
- 1113
- 1107
-
-
- 1201
- 1107
- 1193
-
-
- 1193
- 1107
- 1099
-
-
- 1193
- 1099
- 1187
-
-
- 1187
- 1099
- 1097
-
-
- 1187
- 1097
- 1181
-
-
- 1181
- 1097
- 1091
-
-
- 1181
- 1091
- 1171
-
-
- 1171
- 1091
- 1085
-
-
- 1171
- 1085
- 1161
-
-
- 1161
- 1085
- 1081
-
-
- 1161
- 1081
- 1153
-
-
- 1153
- 1081
- 1073
-
-
- 1153
- 1073
- 1143
-
-
- 1103
- 1037
- 1109
-
-
- 1109
- 1037
- 1043
-
-
- 1109
- 1043
- 1117
-
-
- 1117
- 1043
- 1049
-
-
- 1117
- 1049
- 1121
-
-
- 1121
- 1049
- 1047
-
-
- 1121
- 1047
- 1119
-
-
- 1119
- 1047
- 1041
-
-
- 1119
- 1041
- 1113
-
-
- 1113
- 1041
- 1035
-
-
- 1113
- 1035
- 1107
-
-
- 1107
- 1035
- 1029
-
-
- 1107
- 1029
- 1099
-
-
- 1099
- 1029
- 1021
-
-
- 1099
- 1021
- 1097
-
-
- 1097
- 1021
- 1015
-
-
- 1097
- 1015
- 1091
-
-
- 1091
- 1015
- 1011
-
-
- 1091
- 1011
- 1085
-
-
- 1085
- 1011
- 1009
-
-
- 1085
- 1009
- 1081
-
-
- 1081
- 1009
- 1005
-
-
- 1081
- 1005
- 1067
-
-
- 1007
- 963
- 1037
-
-
- 1037
- 963
- 967
-
-
- 1037
- 967
- 1043
-
-
- 1043
- 967
- 969
-
-
- 1043
- 969
- 1049
-
-
- 1049
- 969
- 971
-
-
- 1049
- 971
- 1047
-
-
- 1047
- 971
- 965
-
-
- 1047
- 965
- 1041
-
-
- 1041
- 965
- 961
-
-
- 1041
- 961
- 1035
-
-
- 1035
- 961
- 957
-
-
- 1035
- 957
- 1029
-
-
- 1029
- 957
- 955
-
-
- 1029
- 955
- 1021
-
-
- 1021
- 955
- 953
-
-
- 1021
- 953
- 1015
-
-
- 1015
- 953
- 951
-
-
- 1015
- 951
- 1011
-
-
- 1011
- 951
- 949
-
-
- 1011
- 949
- 1009
-
-
- 1009
- 949
- 947
-
-
- 1009
- 947
- 1003
-
-
- 917
- 879
- 963
-
-
- 963
- 879
- 873
-
-
- 963
- 873
- 967
-
-
- 967
- 873
- 869
-
-
- 967
- 869
- 969
-
-
- 969
- 869
- 871
-
-
- 969
- 871
- 971
-
-
- 971
- 871
- 875
-
-
- 971
- 875
- 965
-
-
- 965
- 875
- 881
-
-
- 965
- 881
- 961
-
-
- 961
- 881
- 887
-
-
- 961
- 887
- 957
-
-
- 957
- 887
- 895
-
-
- 957
- 895
- 955
-
-
- 955
- 895
- 899
-
-
- 955
- 899
- 953
-
-
- 953
- 899
- 901
-
-
- 953
- 901
- 951
-
-
- 951
- 901
- 903
-
-
- 951
- 903
- 949
-
-
- 949
- 903
- 905
-
-
- 949
- 905
- 945
-
-
- 833
- 805
- 879
-
-
- 879
- 805
- 801
-
-
- 879
- 801
- 873
-
-
- 873
- 801
- 797
-
-
- 873
- 797
- 869
-
-
- 869
- 797
- 799
-
-
- 869
- 799
- 871
-
-
- 871
- 799
- 803
-
-
- 871
- 803
- 875
-
-
- 875
- 803
- 807
-
-
- 875
- 807
- 881
-
-
- 881
- 807
- 813
-
-
- 881
- 813
- 887
-
-
- 887
- 813
- 817
-
-
- 887
- 817
- 895
-
-
- 895
- 817
- 821
-
-
- 895
- 821
- 899
-
-
- 899
- 821
- 827
-
-
- 899
- 827
- 901
-
-
- 901
- 827
- 831
-
-
- 901
- 831
- 903
-
-
- 903
- 831
- 837
-
-
- 903
- 837
- 857
-
-
- 811
- 735
- 805
-
-
- 805
- 735
- 727
-
-
- 805
- 727
- 801
-
-
- 801
- 727
- 721
-
-
- 801
- 721
- 797
-
-
- 797
- 721
- 723
-
-
- 797
- 723
- 799
-
-
- 799
- 723
- 729
-
-
- 799
- 729
- 803
-
-
- 803
- 729
- 737
-
-
- 803
- 737
- 807
-
-
- 807
- 737
- 743
-
-
- 807
- 743
- 813
-
-
- 813
- 743
- 749
-
-
- 813
- 749
- 817
-
-
- 817
- 749
- 759
-
-
- 817
- 759
- 821
-
-
- 821
- 759
- 761
-
-
- 821
- 761
- 827
-
-
- 827
- 761
- 765
-
-
- 827
- 765
- 831
-
-
- 831
- 765
- 767
-
-
- 831
- 767
- 793
-
-
- 691
- 705
- 731
-
-
- 725
- 649
- 735
-
-
- 735
- 649
- 641
-
-
- 735
- 641
- 727
-
-
- 727
- 641
- 635
-
-
- 727
- 635
- 721
-
-
- 721
- 635
- 637
-
-
- 721
- 637
- 723
-
-
- 723
- 637
- 643
-
-
- 723
- 643
- 729
-
-
- 729
- 643
- 651
-
-
- 729
- 651
- 737
-
-
- 737
- 651
- 659
-
-
- 737
- 659
- 743
-
-
- 743
- 659
- 665
-
-
- 743
- 665
- 749
-
-
- 749
- 665
- 669
-
-
- 749
- 669
- 759
-
-
- 759
- 669
- 679
-
-
- 759
- 679
- 761
-
-
- 761
- 679
- 691
-
-
- 761
- 691
- 765
-
-
- 765
- 691
- 731
-
-
- 765
- 731
- 767
-
-
- 619
- 633
- 661
-
-
- 623
- 563
- 649
-
-
- 649
- 563
- 557
-
-
- 649
- 557
- 641
-
-
- 641
- 557
- 549
-
-
- 641
- 549
- 635
-
-
- 635
- 549
- 551
-
-
- 635
- 551
- 637
-
-
- 637
- 551
- 559
-
-
- 637
- 559
- 643
-
-
- 643
- 559
- 565
-
-
- 643
- 565
- 651
-
-
- 651
- 565
- 581
-
-
- 651
- 581
- 659
-
-
- 659
- 581
- 589
-
-
- 659
- 589
- 665
-
-
- 665
- 589
- 599
-
-
- 665
- 599
- 669
-
-
- 669
- 599
- 613
-
-
- 669
- 613
- 679
-
-
- 679
- 613
- 619
-
-
- 679
- 619
- 691
-
-
- 691
- 619
- 661
-
-
- 691
- 661
- 705
-
-
- 547
- 579
- 587
-
-
- 515
- 475
- 563
-
-
- 563
- 475
- 461
-
-
- 563
- 461
- 557
-
-
- 557
- 461
- 451
-
-
- 557
- 451
- 549
-
-
- 549
- 451
- 455
-
-
- 549
- 455
- 551
-
-
- 551
- 455
- 463
-
-
- 551
- 463
- 559
-
-
- 559
- 463
- 477
-
-
- 559
- 477
- 565
-
-
- 565
- 477
- 489
-
-
- 565
- 489
- 581
-
-
- 581
- 489
- 503
-
-
- 581
- 503
- 589
-
-
- 589
- 503
- 517
-
-
- 589
- 517
- 599
-
-
- 599
- 517
- 533
-
-
- 599
- 533
- 613
-
-
- 613
- 533
- 547
-
-
- 613
- 547
- 619
-
-
- 619
- 547
- 587
-
-
- 619
- 587
- 633
-
-
- 481
- 507
- 509
-
-
- 373
- 358
- 475
-
-
- 475
- 358
- 341
-
-
- 475
- 341
- 461
-
-
- 461
- 341
- 337
-
-
- 461
- 337
- 451
-
-
- 451
- 337
- 339
-
-
- 451
- 339
- 455
-
-
- 455
- 339
- 343
-
-
- 455
- 343
- 463
-
-
- 463
- 343
- 360
-
-
- 463
- 360
- 477
-
-
- 477
- 360
- 370
-
-
- 477
- 370
- 489
-
-
- 489
- 370
- 390
-
-
- 489
- 390
- 503
-
-
- 503
- 390
- 411
-
-
- 503
- 411
- 517
-
-
- 517
- 411
- 445
-
-
- 517
- 445
- 533
-
-
- 533
- 445
- 481
-
-
- 533
- 481
- 547
-
-
- 547
- 481
- 509
-
-
- 547
- 509
- 579
-
-
- 366
- 283
- 358
-
-
- 358
- 283
- 275
-
-
- 358
- 275
- 341
-
-
- 341
- 275
- 266
-
-
- 341
- 266
- 337
-
-
- 337
- 266
- 268
-
-
- 337
- 268
- 339
-
-
- 339
- 268
- 277
-
-
- 339
- 277
- 343
-
-
- 343
- 277
- 285
-
-
- 343
- 285
- 360
-
-
- 360
- 285
- 305
-
-
- 360
- 305
- 370
-
-
- 370
- 305
- 311
-
-
- 370
- 311
- 390
-
-
- 390
- 311
- 322
-
-
- 390
- 322
- 411
-
-
- 411
- 322
- 350
-
-
- 411
- 350
- 445
-
-
- 445
- 350
- 380
-
-
- 445
- 380
- 481
-
-
- 481
- 380
- 424
-
-
- 481
- 424
- 507
-
-
- 281
- 229
- 283
-
-
- 283
- 229
- 223
-
-
- 283
- 223
- 275
-
-
- 275
- 223
- 217
-
-
- 275
- 217
- 266
-
-
- 266
- 217
- 219
-
-
- 266
- 219
- 268
-
-
- 268
- 219
- 225
-
-
- 268
- 225
- 277
-
-
- 277
- 225
- 231
-
-
- 277
- 231
- 285
-
-
- 285
- 231
- 244
-
-
- 285
- 244
- 305
-
-
- 305
- 244
- 258
-
-
- 305
- 258
- 311
-
-
- 311
- 258
- 270
-
-
- 311
- 270
- 322
-
-
- 322
- 270
- 299
-
-
- 322
- 299
- 350
-
-
- 350
- 299
- 316
-
-
- 350
- 316
- 380
-
-
- 380
- 316
- 345
-
-
- 380
- 345
- 406
-
-
- 213
- 180
- 229
-
-
- 229
- 180
- 174
-
-
- 229
- 174
- 223
-
-
- 223
- 174
- 168
-
-
- 223
- 168
- 217
-
-
- 217
- 168
- 170
-
-
- 217
- 170
- 219
-
-
- 219
- 170
- 176
-
-
- 219
- 176
- 225
-
-
- 225
- 176
- 182
-
-
- 225
- 182
- 231
-
-
- 231
- 182
- 197
-
-
- 231
- 197
- 244
-
-
- 244
- 197
- 207
-
-
- 244
- 207
- 258
-
-
- 258
- 207
- 227
-
-
- 258
- 227
- 270
-
-
- 270
- 227
- 256
-
-
- 270
- 256
- 299
-
-
- 299
- 256
- 272
-
-
- 299
- 272
- 316
-
-
- 316
- 272
- 307
-
-
- 316
- 307
- 328
-
-
- 164
- 143
- 180
-
-
- 180
- 143
- 133
-
-
- 180
- 133
- 174
-
-
- 174
- 133
- 127
-
-
- 174
- 127
- 168
-
-
- 168
- 127
- 129
-
-
- 168
- 129
- 170
-
-
- 170
- 129
- 135
-
-
- 170
- 135
- 176
-
-
- 176
- 135
- 147
-
-
- 176
- 147
- 182
-
-
- 182
- 147
- 153
-
-
- 182
- 153
- 197
-
-
- 197
- 153
- 172
-
-
- 197
- 172
- 207
-
-
- 207
- 172
- 193
-
-
- 207
- 193
- 227
-
-
- 227
- 193
- 209
-
-
- 227
- 209
- 256
-
-
- 256
- 209
- 240
-
-
- 256
- 240
- 272
-
-
- 272
- 240
- 260
-
-
- 272
- 260
- 287
-
-
- 151
- 108
- 143
-
-
- 143
- 108
- 101
-
-
- 143
- 101
- 133
-
-
- 133
- 101
- 91
-
-
- 133
- 91
- 127
-
-
- 127
- 91
- 95
-
-
- 127
- 95
- 129
-
-
- 129
- 95
- 103
-
-
- 129
- 103
- 135
-
-
- 135
- 103
- 110
-
-
- 135
- 110
- 147
-
-
- 147
- 110
- 122
-
-
- 147
- 122
- 153
-
-
- 153
- 122
- 141
-
-
- 153
- 141
- 172
-
-
- 172
- 141
- 162
-
-
- 172
- 162
- 193
-
-
- 193
- 162
- 184
-
-
- 193
- 184
- 209
-
-
- 209
- 184
- 205
-
-
- 209
- 205
- 240
-
-
- 240
- 205
- 234
-
-
- 240
- 234
- 254
-
-
- 187
- 211
- 221
-
-
- 116
- 79
- 108
-
-
- 108
- 79
- 66
-
-
- 108
- 66
- 101
-
-
- 101
- 66
- 58
-
-
- 101
- 58
- 91
-
-
- 91
- 58
- 60
-
-
- 91
- 60
- 95
-
-
- 95
- 60
- 68
-
-
- 95
- 68
- 103
-
-
- 103
- 68
- 81
-
-
- 103
- 81
- 110
-
-
- 110
- 81
- 99
-
-
- 110
- 99
- 122
-
-
- 122
- 99
- 114
-
-
- 122
- 114
- 141
-
-
- 141
- 114
- 137
-
-
- 141
- 137
- 162
-
-
- 162
- 137
- 160
-
-
- 162
- 160
- 184
-
-
- 184
- 160
- 187
-
-
- 184
- 187
- 205
-
-
- 205
- 187
- 221
-
-
- 205
- 221
- 234
-
-
- 166
- 199
- 201
-
-
- 87
- 47
- 79
-
-
- 79
- 47
- 41
-
-
- 79
- 41
- 66
-
-
- 66
- 41
- 31
-
-
- 66
- 31
- 58
-
-
- 58
- 31
- 33
-
-
- 58
- 33
- 60
-
-
- 60
- 33
- 43
-
-
- 60
- 43
- 68
-
-
- 68
- 43
- 50
-
-
- 68
- 50
- 81
-
-
- 81
- 50
- 74
-
-
- 81
- 74
- 99
-
-
- 99
- 74
- 97
-
-
- 99
- 97
- 114
-
-
- 114
- 97
- 118
-
-
- 114
- 118
- 137
-
-
- 137
- 118
- 145
-
-
- 137
- 145
- 160
-
-
- 160
- 145
- 166
-
-
- 160
- 166
- 187
-
-
- 187
- 166
- 201
-
-
- 187
- 201
- 211
-
-
- 158
- 189
- 191
-
-
- 62
- 35
- 47
-
-
- 47
- 35
- 21
-
-
- 47
- 21
- 41
-
-
- 41
- 21
- 15
-
-
- 41
- 15
- 31
-
-
- 31
- 15
- 17
-
-
- 31
- 17
- 33
-
-
- 33
- 17
- 23
-
-
- 33
- 23
- 43
-
-
- 43
- 23
- 37
-
-
- 43
- 37
- 50
-
-
- 50
- 37
- 56
-
-
- 50
- 56
- 74
-
-
- 74
- 56
- 85
-
-
- 74
- 85
- 97
-
-
- 97
- 85
- 106
-
-
- 97
- 106
- 118
-
-
- 118
- 106
- 131
-
-
- 118
- 131
- 145
-
-
- 145
- 131
- 158
-
-
- 145
- 158
- 166
-
-
- 166
- 158
- 191
-
-
- 166
- 191
- 199
-
-
- 52
- 28
- 35
-
-
- 35
- 28
- 18
-
-
- 35
- 18
- 21
-
-
- 21
- 18
- 10
-
-
- 21
- 10
- 15
-
-
- 15
- 10
- 11
-
-
- 15
- 11
- 17
-
-
- 17
- 11
- 19
-
-
- 17
- 19
- 23
-
-
- 23
- 19
- 29
-
-
- 23
- 29
- 37
-
-
- 37
- 29
- 48
-
-
- 37
- 48
- 56
-
-
- 56
- 48
- 77
-
-
- 56
- 77
- 85
-
-
- 85
- 77
- 104
-
-
- 85
- 104
- 106
-
-
- 106
- 104
- 125
-
-
- 106
- 125
- 131
-
-
- 131
- 125
- 154
-
-
- 131
- 154
- 158
-
-
- 158
- 154
- 185
-
-
- 158
- 185
- 189
-
-
- 331
- 335
- 375
-
-
- 443
- 471
- 505
-
-
- 627
- 667
- 681
-
-
- 703
- 713
- 739
-
-
- 911
- 937
- 933
-
-
- 975
- 993
- 987
-
-
- 1179
- 1209
- 1185
-
-
- 1365
- 1403
- 1359
-
-
- 1440
- 1450
- 1407
-
-
- 1514
- 1513
- 1465
-
-
- 1439
- 1402
- 1358
-
-
- 1364
- 1344
- 1320
-
-
- 1178
- 1146
- 1140
-
-
- 974
- 936
- 932
-
-
- 910
- 864
- 876
-
-
- 702
- 666
- 680
-
-
- 626
- 616
- 624
-
-
- 442
- 415
- 458
-
-
- 330
- 329
- 371
-
-
- 189
- 185
- 232
-
-
- 199
- 191
- 238
-
-
- 211
- 201
- 252
-
-
- 234
- 221
- 262
-
-
- 260
- 254
- 303
-
-
- 307
- 287
- 326
-
-
- 345
- 328
- 394
-
-
- 424
- 406
- 479
-
-
- 633
- 587
- 615
-
-
- 705
- 661
- 677
-
-
- 767
- 731
- 757
-
-
- 837
- 793
- 809
-
-
- 905
- 857
- 859
-
-
- 947
- 945
- 943
-
-
- 1005
- 1003
- 999
-
-
- 1211
- 1151
- 1135
-
-
- 1267
- 1227
- 1199
-
-
- 1339
- 1303
- 1259
-
-
- 1420
- 1381
- 1331
-
-
- 1496
- 1474
- 1412
-
-
- 1541
- 1537
- 1486
-
-
- 1584
- 1580
- 1531
-
-
- 1642
- 1636
- 1586
-
-
- 1652
- 1646
- 1598
-
-
- 1654
- 1655
- 1610
-
-
- 1651
- 1653
- 1609
-
-
- 1641
- 1645
- 1597
-
-
- 1629
- 1635
- 1585
-
-
- 1607
- 1611
- 1560
-
-
- 1495
- 1536
- 1485
-
-
- 1419
- 1473
- 1411
-
-
- 1338
- 1380
- 1330
-
-
- 1266
- 1302
- 1258
-
-
- 1210
- 1226
- 1198
-
-
- 1142
- 1150
- 1134
-
-
- 1066
- 1072
- 1062
-
-
- 904
- 944
- 942
-
-
- 836
- 856
- 858
-
-
- 766
- 792
- 808
-
-
- 704
- 730
- 756
-
-
- 632
- 660
- 676
-
-
- 578
- 586
- 614
-
-
- 506
- 508
- 540
-
-
- 306
- 327
- 393
-
-
- 259
- 286
- 325
-
-
- 233
- 253
- 302
-
-
- 210
- 220
- 261
-
-
- 198
- 200
- 251
-
-
- 188
- 190
- 237
-
-
- 344
- 405
- 478
-
-
- 478
- 405
- 423
-
-
- 946
- 1002
- 998
-
-
- 998
- 1002
- 1004
-
-
- 1540
- 1579
- 1530
-
-
- 1530
- 1579
- 1583
-
-
- 1630
- 1612
- 1561
-
-
- 1561
- 1612
- 1608
-
-
- 1143
- 1073
- 1063
-
-
- 1063
- 1073
- 1067
-
-
- 579
- 509
- 541
-
-
- 541
- 509
- 507
-
-
- 507
- 424
- 541
-
-
- 541
- 424
- 479
-
-
- 541
- 479
- 521
-
-
- 521
- 479
- 449
-
-
- 521
- 449
- 501
-
-
- 501
- 449
- 441
-
-
- 501
- 441
- 487
-
-
- 487
- 441
- 433
-
-
- 487
- 433
- 473
-
-
- 473
- 433
- 430
-
-
- 473
- 430
- 453
-
-
- 453
- 430
- 428
-
-
- 453
- 428
- 439
-
-
- 439
- 428
- 426
-
-
- 439
- 426
- 420
-
-
- 420
- 426
- 409
-
-
- 420
- 409
- 397
-
-
- 397
- 409
- 400
-
-
- 397
- 400
- 374
-
-
- 374
- 400
- 391
-
-
- 406
- 345
- 479
-
-
- 479
- 345
- 394
-
-
- 479
- 394
- 449
-
-
- 449
- 394
- 382
-
-
- 449
- 382
- 441
-
-
- 441
- 382
- 388
-
-
- 441
- 388
- 433
-
-
- 433
- 388
- 396
-
-
- 433
- 396
- 430
-
-
- 430
- 396
- 399
-
-
- 430
- 399
- 428
-
-
- 428
- 399
- 408
-
-
- 428
- 408
- 426
-
-
- 426
- 408
- 414
-
-
- 426
- 414
- 409
-
-
- 409
- 414
- 419
-
-
- 409
- 419
- 400
-
-
- 400
- 419
- 421
-
-
- 400
- 421
- 391
-
-
- 391
- 421
- 417
-
-
- 391
- 417
- 376
-
-
- 376
- 417
- 383
-
-
- 254
- 234
- 303
-
-
- 303
- 234
- 262
-
-
- 303
- 262
- 313
-
-
- 313
- 262
- 295
-
-
- 313
- 295
- 324
-
-
- 324
- 295
- 318
-
-
- 324
- 318
- 356
-
-
- 356
- 318
- 346
-
-
- 356
- 346
- 378
-
-
- 378
- 346
- 385
-
-
- 378
- 385
- 407
-
-
- 407
- 385
- 427
-
-
- 407
- 427
- 438
-
-
- 438
- 427
- 466
-
-
- 438
- 466
- 464
-
-
- 464
- 466
- 496
-
-
- 464
- 496
- 484
-
-
- 484
- 496
- 522
-
-
- 484
- 522
- 504
-
-
- 504
- 522
- 538
-
-
- 221
- 211
- 262
-
-
- 262
- 211
- 252
-
-
- 262
- 252
- 295
-
-
- 295
- 252
- 279
-
-
- 295
- 279
- 318
-
-
- 318
- 279
- 314
-
-
- 318
- 314
- 346
-
-
- 346
- 314
- 355
-
-
- 346
- 355
- 385
-
-
- 385
- 355
- 398
-
-
- 385
- 398
- 427
-
-
- 427
- 398
- 452
-
-
- 427
- 452
- 466
-
-
- 466
- 452
- 498
-
-
- 466
- 498
- 496
-
-
- 496
- 498
- 528
-
-
- 496
- 528
- 522
-
-
- 522
- 528
- 554
-
-
- 522
- 554
- 538
-
-
- 538
- 554
- 590
-
-
- 538
- 590
- 568
-
-
- 568
- 590
- 572
-
-
- 190
- 198
- 237
-
-
- 237
- 198
- 251
-
-
- 237
- 251
- 294
-
-
- 294
- 251
- 312
-
-
- 294
- 312
- 347
-
-
- 347
- 312
- 387
-
-
- 347
- 387
- 432
-
-
- 432
- 387
- 486
-
-
- 432
- 486
- 512
-
-
- 512
- 486
- 542
-
-
- 512
- 542
- 560
-
-
- 560
- 542
- 604
-
-
- 560
- 604
- 610
-
-
- 610
- 604
- 654
-
-
- 610
- 654
- 652
-
-
- 652
- 654
- 696
-
-
- 652
- 696
- 684
-
-
- 684
- 696
- 746
-
-
- 684
- 746
- 738
-
-
- 738
- 746
- 778
-
-
- 200
- 210
- 251
-
-
- 251
- 210
- 261
-
-
- 251
- 261
- 312
-
-
- 312
- 261
- 332
-
-
- 312
- 332
- 387
-
-
- 387
- 332
- 440
-
-
- 387
- 440
- 486
-
-
- 486
- 440
- 526
-
-
- 486
- 526
- 542
-
-
- 542
- 526
- 594
-
-
- 542
- 594
- 604
-
-
- 604
- 594
- 646
-
-
- 604
- 646
- 654
-
-
- 654
- 646
- 698
-
-
- 654
- 698
- 696
-
-
- 696
- 698
- 752
-
-
- 696
- 752
- 746
-
-
- 746
- 752
- 782
-
-
- 746
- 782
- 778
-
-
- 778
- 782
- 840
-
-
- 778
- 840
- 834
-
-
- 834
- 840
- 846
-
-
- 423
- 506
- 478
-
-
- 478
- 506
- 540
-
-
- 478
- 540
- 584
-
-
- 584
- 540
- 628
-
-
- 584
- 628
- 662
-
-
- 662
- 628
- 710
-
-
- 662
- 710
- 714
-
-
- 714
- 710
- 776
-
-
- 714
- 776
- 780
-
-
- 780
- 776
- 842
-
-
- 780
- 842
- 848
-
-
- 848
- 842
- 890
-
-
- 848
- 890
- 896
-
-
- 896
- 890
- 922
-
-
- 896
- 922
- 924
-
-
- 924
- 922
- 978
-
-
- 924
- 978
- 982
-
-
- 982
- 978
- 1026
-
-
- 982
- 1026
- 1038
-
-
- 1038
- 1026
- 1082
-
-
- 1038
- 1082
- 1088
-
-
- 1088
- 1082
- 1100
-
-
- 660
- 704
- 676
-
-
- 676
- 704
- 756
-
-
- 676
- 756
- 762
-
-
- 762
- 756
- 824
-
-
- 762
- 824
- 828
-
-
- 828
- 824
- 862
-
-
- 828
- 862
- 866
-
-
- 866
- 862
- 934
-
-
- 866
- 934
- 930
-
-
- 930
- 934
- 984
-
-
- 930
- 984
- 980
-
-
- 980
- 984
- 1022
-
-
- 980
- 1022
- 1016
-
-
- 1016
- 1022
- 1068
-
-
- 1016
- 1068
- 1070
-
-
- 1070
- 1068
- 1128
-
-
- 1070
- 1128
- 1132
-
-
- 1132
- 1128
- 1176
-
-
- 1132
- 1176
- 1184
-
-
- 1184
- 1176
- 1234
-
-
- 730
- 766
- 756
-
-
- 756
- 766
- 808
-
-
- 756
- 808
- 824
-
-
- 824
- 808
- 860
-
-
- 824
- 860
- 862
-
-
- 862
- 860
- 938
-
-
- 862
- 938
- 934
-
-
- 934
- 938
- 990
-
-
- 934
- 990
- 984
-
-
- 984
- 990
- 1032
-
-
- 984
- 1032
- 1022
-
-
- 1022
- 1032
- 1074
-
-
- 1022
- 1074
- 1068
-
-
- 1068
- 1074
- 1126
-
-
- 1068
- 1126
- 1128
-
-
- 1128
- 1126
- 1168
-
-
- 1128
- 1168
- 1176
-
-
- 1176
- 1168
- 1224
-
-
- 1176
- 1224
- 1234
-
-
- 1234
- 1224
- 1278
-
-
- 1234
- 1278
- 1306
-
-
- 1306
- 1278
- 1312
-
-
- 1004
- 1066
- 998
-
-
- 998
- 1066
- 1062
-
-
- 998
- 1062
- 1060
-
-
- 1060
- 1062
- 1110
-
-
- 1060
- 1110
- 1092
-
-
- 1092
- 1110
- 1158
-
-
- 1092
- 1158
- 1144
-
-
- 1144
- 1158
- 1196
-
-
- 1144
- 1196
- 1182
-
-
- 1182
- 1196
- 1232
-
-
- 1182
- 1232
- 1218
-
-
- 1218
- 1232
- 1256
-
-
- 1218
- 1256
- 1250
-
-
- 1250
- 1256
- 1294
-
-
- 1250
- 1294
- 1300
-
-
- 1300
- 1294
- 1332
-
-
- 1300
- 1332
- 1340
-
-
- 1340
- 1332
- 1378
-
-
- 1340
- 1378
- 1406
-
-
- 1406
- 1378
- 1445
-
-
- 1072
- 1142
- 1062
-
-
- 1062
- 1142
- 1134
-
-
- 1062
- 1134
- 1110
-
-
- 1110
- 1134
- 1174
-
-
- 1110
- 1174
- 1158
-
-
- 1158
- 1174
- 1212
-
-
- 1158
- 1212
- 1196
-
-
- 1196
- 1212
- 1242
-
-
- 1196
- 1242
- 1232
-
-
- 1232
- 1242
- 1270
-
-
- 1232
- 1270
- 1256
-
-
- 1256
- 1270
- 1304
-
-
- 1256
- 1304
- 1294
-
-
- 1294
- 1304
- 1328
-
-
- 1294
- 1328
- 1332
-
-
- 1332
- 1328
- 1360
-
-
- 1332
- 1360
- 1378
-
-
- 1378
- 1360
- 1409
-
-
- 1378
- 1409
- 1445
-
-
- 1445
- 1409
- 1459
-
-
- 1445
- 1459
- 1499
-
-
- 1499
- 1459
- 1503
-
-
- 1302
- 1338
- 1258
-
-
- 1258
- 1338
- 1330
-
-
- 1258
- 1330
- 1296
-
-
- 1296
- 1330
- 1350
-
-
- 1296
- 1350
- 1318
-
-
- 1318
- 1350
- 1370
-
-
- 1318
- 1370
- 1336
-
-
- 1336
- 1370
- 1386
-
-
- 1336
- 1386
- 1348
-
-
- 1348
- 1386
- 1394
-
-
- 1348
- 1394
- 1368
-
-
- 1368
- 1394
- 1404
-
-
- 1368
- 1404
- 1392
-
-
- 1392
- 1404
- 1413
-
-
- 1392
- 1413
- 1417
-
-
- 1417
- 1413
- 1427
-
-
- 1417
- 1427
- 1447
-
-
- 1447
- 1427
- 1448
-
-
- 1447
- 1448
- 1466
-
-
- 1466
- 1448
- 1460
-
-
- 1380
- 1419
- 1330
-
-
- 1330
- 1419
- 1411
-
-
- 1330
- 1411
- 1350
-
-
- 1350
- 1411
- 1425
-
-
- 1350
- 1425
- 1370
-
-
- 1370
- 1425
- 1437
-
-
- 1370
- 1437
- 1386
-
-
- 1386
- 1437
- 1435
-
-
- 1386
- 1435
- 1394
-
-
- 1394
- 1435
- 1431
-
-
- 1394
- 1431
- 1404
-
-
- 1404
- 1431
- 1423
-
-
- 1404
- 1423
- 1413
-
-
- 1413
- 1423
- 1421
-
-
- 1413
- 1421
- 1427
-
-
- 1427
- 1421
- 1428
-
-
- 1427
- 1428
- 1448
-
-
- 1448
- 1428
- 1442
-
-
- 1448
- 1442
- 1460
-
-
- 1460
- 1442
- 1446
-
-
- 1460
- 1446
- 1478
-
-
- 1478
- 1446
- 1476
-
-
- 1611
- 1629
- 1560
-
-
- 1560
- 1629
- 1585
-
-
- 1560
- 1585
- 1538
-
-
- 1538
- 1585
- 1552
-
-
- 1538
- 1552
- 1522
-
-
- 1522
- 1552
- 1528
-
-
- 1522
- 1528
- 1493
-
-
- 1493
- 1528
- 1494
-
-
- 1493
- 1494
- 1456
-
-
- 1456
- 1494
- 1452
-
-
- 1456
- 1452
- 1424
-
-
- 1424
- 1452
- 1405
-
-
- 1424
- 1405
- 1393
-
-
- 1393
- 1405
- 1357
-
-
- 1393
- 1357
- 1361
-
-
- 1361
- 1357
- 1333
-
-
- 1361
- 1333
- 1341
-
-
- 1341
- 1333
- 1311
-
-
- 1341
- 1311
- 1321
-
-
- 1321
- 1311
- 1279
-
-
- 1635
- 1641
- 1585
-
-
- 1585
- 1641
- 1597
-
-
- 1585
- 1597
- 1552
-
-
- 1552
- 1597
- 1562
-
-
- 1552
- 1562
- 1528
-
-
- 1528
- 1562
- 1529
-
-
- 1528
- 1529
- 1494
-
-
- 1494
- 1529
- 1482
-
-
- 1494
- 1482
- 1452
-
-
- 1452
- 1482
- 1432
-
-
- 1452
- 1432
- 1405
-
-
- 1405
- 1432
- 1369
-
-
- 1405
- 1369
- 1357
-
-
- 1357
- 1369
- 1329
-
-
- 1357
- 1329
- 1333
-
-
- 1333
- 1329
- 1301
-
-
- 1333
- 1301
- 1311
-
-
- 1311
- 1301
- 1261
-
-
- 1311
- 1261
- 1279
-
-
- 1279
- 1261
- 1235
-
-
- 1279
- 1235
- 1249
-
-
- 1249
- 1235
- 1241
-
-
- 1655
- 1652
- 1610
-
-
- 1610
- 1652
- 1598
-
-
- 1610
- 1598
- 1553
-
-
- 1553
- 1598
- 1539
-
-
- 1553
- 1539
- 1510
-
-
- 1510
- 1539
- 1472
-
-
- 1510
- 1472
- 1436
-
-
- 1436
- 1472
- 1387
-
-
- 1436
- 1387
- 1349
-
-
- 1349
- 1387
- 1317
-
-
- 1349
- 1317
- 1305
-
-
- 1305
- 1317
- 1257
-
-
- 1305
- 1257
- 1251
-
-
- 1251
- 1257
- 1215
-
-
- 1251
- 1215
- 1217
-
-
- 1217
- 1215
- 1169
-
-
- 1217
- 1169
- 1177
-
-
- 1177
- 1169
- 1133
-
-
- 1177
- 1133
- 1141
-
-
- 1141
- 1133
- 1083
-
-
- 1646
- 1642
- 1598
-
-
- 1598
- 1642
- 1586
-
-
- 1598
- 1586
- 1539
-
-
- 1539
- 1586
- 1521
-
-
- 1539
- 1521
- 1472
-
-
- 1472
- 1521
- 1438
-
-
- 1472
- 1438
- 1387
-
-
- 1387
- 1438
- 1337
-
-
- 1387
- 1337
- 1317
-
-
- 1317
- 1337
- 1271
-
-
- 1317
- 1271
- 1257
-
-
- 1257
- 1271
- 1219
-
-
- 1257
- 1219
- 1215
-
-
- 1215
- 1219
- 1167
-
-
- 1215
- 1167
- 1169
-
-
- 1169
- 1167
- 1129
-
-
- 1169
- 1129
- 1133
-
-
- 1133
- 1129
- 1077
-
-
- 1133
- 1077
- 1083
-
-
- 1083
- 1077
- 1039
-
-
- 1083
- 1039
- 1057
-
-
- 1057
- 1039
- 1055
-
-
- 1537
- 1496
- 1486
-
-
- 1486
- 1496
- 1412
-
-
- 1486
- 1412
- 1351
-
-
- 1351
- 1412
- 1297
-
-
- 1351
- 1297
- 1263
-
-
- 1263
- 1297
- 1213
-
-
- 1263
- 1213
- 1197
-
-
- 1197
- 1213
- 1145
-
-
- 1197
- 1145
- 1137
-
-
- 1137
- 1145
- 1079
-
-
- 1137
- 1079
- 1075
-
-
- 1075
- 1079
- 1023
-
-
- 1075
- 1023
- 1017
-
-
- 1017
- 1023
- 977
-
-
- 1017
- 977
- 979
-
-
- 979
- 977
- 925
-
-
- 979
- 925
- 929
-
-
- 929
- 925
- 889
-
-
- 929
- 889
- 877
-
-
- 877
- 889
- 841
-
-
- 1474
- 1420
- 1412
-
-
- 1412
- 1420
- 1331
-
-
- 1412
- 1331
- 1297
-
-
- 1297
- 1331
- 1239
-
-
- 1297
- 1239
- 1213
-
-
- 1213
- 1239
- 1159
-
-
- 1213
- 1159
- 1145
-
-
- 1145
- 1159
- 1087
-
-
- 1145
- 1087
- 1079
-
-
- 1079
- 1087
- 1033
-
-
- 1079
- 1033
- 1023
-
-
- 1023
- 1033
- 981
-
-
- 1023
- 981
- 977
-
-
- 977
- 981
- 923
-
-
- 977
- 923
- 925
-
-
- 925
- 923
- 893
-
-
- 925
- 893
- 889
-
-
- 889
- 893
- 845
-
-
- 889
- 845
- 841
-
-
- 841
- 845
- 779
-
-
- 841
- 779
- 775
-
-
- 775
- 779
- 769
-
-
- 1151
- 1143
- 1135
-
-
- 1135
- 1143
- 1063
-
-
- 1135
- 1063
- 1061
-
-
- 1061
- 1063
- 997
-
-
- 1061
- 997
- 995
-
-
- 995
- 997
- 939
-
-
- 995
- 939
- 935
-
-
- 935
- 939
- 867
-
-
- 935
- 867
- 883
-
-
- 883
- 867
- 843
-
-
- 883
- 843
- 849
-
-
- 849
- 843
- 787
-
-
- 849
- 787
- 791
-
-
- 791
- 787
- 755
-
-
- 791
- 755
- 753
-
-
- 753
- 755
- 697
-
-
- 753
- 697
- 685
-
-
- 685
- 697
- 639
-
-
- 685
- 639
- 625
-
-
- 625
- 639
- 591
-
-
- 1067
- 1005
- 1063
-
-
- 1063
- 1005
- 999
-
-
- 1063
- 999
- 997
-
-
- 997
- 999
- 941
-
-
- 997
- 941
- 939
-
-
- 939
- 941
- 863
-
-
- 939
- 863
- 867
-
-
- 867
- 863
- 839
-
-
- 867
- 839
- 843
-
-
- 843
- 839
- 781
-
-
- 843
- 781
- 787
-
-
- 787
- 781
- 751
-
-
- 787
- 751
- 755
-
-
- 755
- 751
- 699
-
-
- 755
- 699
- 697
-
-
- 697
- 699
- 653
-
-
- 697
- 653
- 639
-
-
- 639
- 653
- 601
-
-
- 639
- 601
- 591
-
-
- 591
- 601
- 539
-
-
- 591
- 539
- 519
-
-
- 519
- 539
- 511
-
-
- 857
- 837
- 859
-
-
- 859
- 837
- 809
-
-
- 859
- 809
- 825
-
-
- 825
- 809
- 763
-
-
- 825
- 763
- 771
-
-
- 771
- 763
- 711
-
-
- 771
- 711
- 715
-
-
- 715
- 711
- 671
-
-
- 715
- 671
- 683
-
-
- 683
- 671
- 631
-
-
- 683
- 631
- 647
-
-
- 647
- 631
- 605
-
-
- 647
- 605
- 611
-
-
- 611
- 605
- 571
-
-
- 611
- 571
- 567
-
-
- 567
- 571
- 529
-
-
- 567
- 529
- 523
-
-
- 523
- 529
- 485
-
-
- 523
- 485
- 459
-
-
- 459
- 485
- 418
-
-
- 793
- 767
- 809
-
-
- 809
- 767
- 757
-
-
- 809
- 757
- 763
-
-
- 763
- 757
- 701
-
-
- 763
- 701
- 711
-
-
- 711
- 701
- 663
-
-
- 711
- 663
- 671
-
-
- 671
- 663
- 621
-
-
- 671
- 621
- 631
-
-
- 631
- 621
- 595
-
-
- 631
- 595
- 605
-
-
- 605
- 595
- 561
-
-
- 605
- 561
- 571
-
-
- 571
- 561
- 531
-
-
- 571
- 531
- 529
-
-
- 529
- 531
- 497
-
-
- 529
- 497
- 485
-
-
- 485
- 497
- 447
-
-
- 485
- 447
- 418
-
-
- 418
- 447
- 392
-
-
- 418
- 392
- 354
-
-
- 354
- 392
- 352
-
-
- 587
- 579
- 615
-
-
- 615
- 579
- 541
-
-
- 615
- 541
- 585
-
-
- 585
- 541
- 521
-
-
- 585
- 521
- 545
-
-
- 545
- 521
- 501
-
-
- 545
- 501
- 527
-
-
- 527
- 501
- 487
-
-
- 527
- 487
- 513
-
-
- 513
- 487
- 473
-
-
- 513
- 473
- 491
-
-
- 491
- 473
- 453
-
-
- 491
- 453
- 467
-
-
- 467
- 453
- 439
-
-
- 467
- 439
- 435
-
-
- 435
- 439
- 420
-
-
- 435
- 420
- 401
-
-
- 401
- 420
- 397
-
-
- 401
- 397
- 371
-
-
- 371
- 397
- 374
-
-
- 371
- 374
- 330
-
-
- 376
- 353
- 391
-
-
- 391
- 353
- 351
-
-
- 391
- 351
- 374
-
-
- 374
- 351
- 334
-
-
- 374
- 334
- 330
-
-
- 415
- 383
- 458
-
-
- 458
- 383
- 417
-
-
- 458
- 417
- 446
-
-
- 446
- 417
- 421
-
-
- 446
- 421
- 434
-
-
- 434
- 421
- 419
-
-
- 434
- 419
- 425
-
-
- 425
- 419
- 414
-
-
- 425
- 414
- 402
-
-
- 402
- 414
- 408
-
-
- 402
- 408
- 386
-
-
- 386
- 408
- 399
-
-
- 386
- 399
- 368
-
-
- 368
- 399
- 396
-
-
- 368
- 396
- 348
-
-
- 348
- 396
- 388
-
-
- 348
- 388
- 333
-
-
- 333
- 388
- 382
-
-
- 333
- 382
- 326
-
-
- 326
- 382
- 394
-
-
- 326
- 394
- 307
-
-
- 307
- 394
- 328
-
-
- 287
- 260
- 326
-
-
- 326
- 260
- 303
-
-
- 326
- 303
- 333
-
-
- 333
- 303
- 313
-
-
- 333
- 313
- 348
-
-
- 348
- 313
- 324
-
-
- 348
- 324
- 368
-
-
- 368
- 324
- 356
-
-
- 368
- 356
- 386
-
-
- 386
- 356
- 378
-
-
- 386
- 378
- 402
-
-
- 402
- 378
- 407
-
-
- 402
- 407
- 425
-
-
- 425
- 407
- 438
-
-
- 425
- 438
- 434
-
-
- 434
- 438
- 464
-
-
- 434
- 464
- 446
-
-
- 446
- 464
- 484
-
-
- 446
- 484
- 458
-
-
- 458
- 484
- 504
-
-
- 458
- 504
- 442
-
-
- 568
- 518
- 538
-
-
- 538
- 518
- 510
-
-
- 538
- 510
- 504
-
-
- 504
- 510
- 470
-
-
- 504
- 470
- 442
-
-
- 616
- 572
- 624
-
-
- 624
- 572
- 590
-
-
- 624
- 590
- 600
-
-
- 600
- 590
- 554
-
-
- 600
- 554
- 566
-
-
- 566
- 554
- 528
-
-
- 566
- 528
- 530
-
-
- 530
- 528
- 498
-
-
- 530
- 498
- 490
-
-
- 490
- 498
- 452
-
-
- 490
- 452
- 429
-
-
- 429
- 452
- 398
-
-
- 429
- 398
- 367
-
-
- 367
- 398
- 355
-
-
- 367
- 355
- 317
-
-
- 317
- 355
- 314
-
-
- 317
- 314
- 273
-
-
- 273
- 314
- 279
-
-
- 273
- 279
- 238
-
-
- 238
- 279
- 252
-
-
- 238
- 252
- 199
-
-
- 199
- 252
- 201
-
-
- 666
- 626
- 680
-
-
- 680
- 626
- 624
-
-
- 680
- 624
- 638
-
-
- 638
- 624
- 600
-
-
- 638
- 600
- 608
-
-
- 608
- 600
- 566
-
-
- 608
- 566
- 570
-
-
- 570
- 566
- 530
-
-
- 570
- 530
- 524
-
-
- 524
- 530
- 490
-
-
- 524
- 490
- 472
-
-
- 472
- 490
- 429
-
-
- 472
- 429
- 395
-
-
- 395
- 429
- 367
-
-
- 395
- 367
- 323
-
-
- 323
- 367
- 317
-
-
- 323
- 317
- 278
-
-
- 278
- 317
- 273
-
-
- 278
- 273
- 232
-
-
- 232
- 273
- 238
-
-
- 232
- 238
- 189
-
-
- 189
- 238
- 191
-
-
- 185
- 188
- 232
-
-
- 232
- 188
- 237
-
-
- 232
- 237
- 278
-
-
- 278
- 237
- 294
-
-
- 278
- 294
- 323
-
-
- 323
- 294
- 347
-
-
- 323
- 347
- 395
-
-
- 395
- 347
- 432
-
-
- 395
- 432
- 472
-
-
- 472
- 432
- 512
-
-
- 472
- 512
- 524
-
-
- 524
- 512
- 560
-
-
- 524
- 560
- 570
-
-
- 570
- 560
- 610
-
-
- 570
- 610
- 608
-
-
- 608
- 610
- 652
-
-
- 608
- 652
- 638
-
-
- 638
- 652
- 684
-
-
- 638
- 684
- 680
-
-
- 680
- 684
- 738
-
-
- 680
- 738
- 702
-
-
- 834
- 774
- 778
-
-
- 778
- 774
- 768
-
-
- 778
- 768
- 738
-
-
- 738
- 768
- 712
-
-
- 738
- 712
- 702
-
-
- 864
- 846
- 876
-
-
- 876
- 846
- 840
-
-
- 876
- 840
- 844
-
-
- 844
- 840
- 782
-
-
- 844
- 782
- 788
-
-
- 788
- 782
- 752
-
-
- 788
- 752
- 754
-
-
- 754
- 752
- 698
-
-
- 754
- 698
- 692
-
-
- 692
- 698
- 646
-
-
- 692
- 646
- 630
-
-
- 630
- 646
- 594
-
-
- 630
- 594
- 582
-
-
- 582
- 594
- 526
-
-
- 582
- 526
- 500
-
-
- 500
- 526
- 440
-
-
- 500
- 440
- 381
-
-
- 381
- 440
- 332
-
-
- 381
- 332
- 302
-
-
- 302
- 332
- 261
-
-
- 302
- 261
- 233
-
-
- 233
- 261
- 220
-
-
- 936
- 910
- 932
-
-
- 932
- 910
- 876
-
-
- 932
- 876
- 888
-
-
- 888
- 876
- 844
-
-
- 888
- 844
- 850
-
-
- 850
- 844
- 788
-
-
- 850
- 788
- 790
-
-
- 790
- 788
- 754
-
-
- 790
- 754
- 750
-
-
- 750
- 754
- 692
-
-
- 750
- 692
- 682
-
-
- 682
- 692
- 630
-
-
- 682
- 630
- 620
-
-
- 620
- 630
- 582
-
-
- 620
- 582
- 544
-
-
- 544
- 582
- 500
-
-
- 544
- 500
- 448
-
-
- 448
- 500
- 381
-
-
- 448
- 381
- 325
-
-
- 325
- 381
- 302
-
-
- 325
- 302
- 259
-
-
- 259
- 302
- 253
-
-
- 286
- 306
- 325
-
-
- 325
- 306
- 393
-
-
- 325
- 393
- 448
-
-
- 448
- 393
- 520
-
-
- 448
- 520
- 544
-
-
- 544
- 520
- 606
-
-
- 544
- 606
- 620
-
-
- 620
- 606
- 670
-
-
- 620
- 670
- 682
-
-
- 682
- 670
- 744
-
-
- 682
- 744
- 750
-
-
- 750
- 744
- 786
-
-
- 750
- 786
- 790
-
-
- 790
- 786
- 852
-
-
- 790
- 852
- 850
-
-
- 850
- 852
- 892
-
-
- 850
- 892
- 888
-
-
- 888
- 892
- 928
-
-
- 888
- 928
- 932
-
-
- 932
- 928
- 986
-
-
- 932
- 986
- 974
-
-
- 1056
- 1054
- 986
-
-
- 986
- 1054
- 992
-
-
- 986
- 992
- 974
-
-
- 327
- 344
- 393
-
-
- 393
- 344
- 478
-
-
- 393
- 478
- 520
-
-
- 520
- 478
- 584
-
-
- 520
- 584
- 606
-
-
- 606
- 584
- 662
-
-
- 606
- 662
- 670
-
-
- 670
- 662
- 714
-
-
- 670
- 714
- 744
-
-
- 744
- 714
- 780
-
-
- 744
- 780
- 786
-
-
- 786
- 780
- 848
-
-
- 786
- 848
- 852
-
-
- 852
- 848
- 896
-
-
- 852
- 896
- 892
-
-
- 892
- 896
- 924
-
-
- 892
- 924
- 928
-
-
- 928
- 924
- 982
-
-
- 928
- 982
- 986
-
-
- 986
- 982
- 1038
-
-
- 986
- 1038
- 1056
-
-
- 1056
- 1038
- 1088
-
-
- 1146
- 1100
- 1140
-
-
- 1140
- 1100
- 1082
-
-
- 1140
- 1082
- 1076
-
-
- 1076
- 1082
- 1026
-
-
- 1076
- 1026
- 1018
-
-
- 1018
- 1026
- 978
-
-
- 1018
- 978
- 976
-
-
- 976
- 978
- 922
-
-
- 976
- 922
- 926
-
-
- 926
- 922
- 890
-
-
- 926
- 890
- 882
-
-
- 882
- 890
- 842
-
-
- 882
- 842
- 838
-
-
- 838
- 842
- 776
-
-
- 838
- 776
- 770
-
-
- 770
- 776
- 710
-
-
- 770
- 710
- 700
-
-
- 700
- 710
- 628
-
-
- 700
- 628
- 614
-
-
- 614
- 628
- 540
-
-
- 614
- 540
- 578
-
-
- 578
- 540
- 508
-
-
- 586
- 632
- 614
-
-
- 614
- 632
- 676
-
-
- 614
- 676
- 700
-
-
- 700
- 676
- 762
-
-
- 700
- 762
- 770
-
-
- 770
- 762
- 828
-
-
- 770
- 828
- 838
-
-
- 838
- 828
- 866
-
-
- 838
- 866
- 882
-
-
- 882
- 866
- 930
-
-
- 882
- 930
- 926
-
-
- 926
- 930
- 980
-
-
- 926
- 980
- 976
-
-
- 976
- 980
- 1016
-
-
- 976
- 1016
- 1018
-
-
- 1018
- 1016
- 1070
-
-
- 1018
- 1070
- 1076
-
-
- 1076
- 1070
- 1132
-
-
- 1076
- 1132
- 1140
-
-
- 1140
- 1132
- 1184
-
-
- 1140
- 1184
- 1178
-
-
- 1306
- 1248
- 1234
-
-
- 1234
- 1248
- 1240
-
-
- 1234
- 1240
- 1184
-
-
- 1184
- 1240
- 1208
-
-
- 1184
- 1208
- 1178
-
-
- 1344
- 1312
- 1320
-
-
- 1320
- 1312
- 1278
-
-
- 1320
- 1278
- 1260
-
-
- 1260
- 1278
- 1224
-
-
- 1260
- 1224
- 1216
-
-
- 1216
- 1224
- 1168
-
-
- 1216
- 1168
- 1166
-
-
- 1166
- 1168
- 1126
-
-
- 1166
- 1126
- 1130
-
-
- 1130
- 1126
- 1074
-
-
- 1130
- 1074
- 1078
-
-
- 1078
- 1074
- 1032
-
-
- 1078
- 1032
- 1050
-
-
- 1050
- 1032
- 990
-
-
- 1050
- 990
- 994
-
-
- 994
- 990
- 938
-
-
- 994
- 938
- 940
-
-
- 940
- 938
- 860
-
-
- 940
- 860
- 858
-
-
- 858
- 860
- 808
-
-
- 858
- 808
- 836
-
-
- 836
- 808
- 792
-
-
- 1402
- 1364
- 1358
-
-
- 1358
- 1364
- 1320
-
-
- 1358
- 1320
- 1310
-
-
- 1310
- 1320
- 1260
-
-
- 1310
- 1260
- 1252
-
-
- 1252
- 1260
- 1216
-
-
- 1252
- 1216
- 1214
-
-
- 1214
- 1216
- 1166
-
-
- 1214
- 1166
- 1172
-
-
- 1172
- 1166
- 1130
-
-
- 1172
- 1130
- 1136
-
-
- 1136
- 1130
- 1078
-
-
- 1136
- 1078
- 1086
-
-
- 1086
- 1078
- 1050
-
-
- 1086
- 1050
- 1058
-
-
- 1058
- 1050
- 994
-
-
- 1058
- 994
- 996
-
-
- 996
- 994
- 940
-
-
- 996
- 940
- 942
-
-
- 942
- 940
- 858
-
-
- 942
- 858
- 904
-
-
- 904
- 858
- 856
-
-
- 944
- 946
- 942
-
-
- 942
- 946
- 998
-
-
- 942
- 998
- 996
-
-
- 996
- 998
- 1060
-
-
- 996
- 1060
- 1058
-
-
- 1058
- 1060
- 1092
-
-
- 1058
- 1092
- 1086
-
-
- 1086
- 1092
- 1144
-
-
- 1086
- 1144
- 1136
-
-
- 1136
- 1144
- 1182
-
-
- 1136
- 1182
- 1172
-
-
- 1172
- 1182
- 1218
-
-
- 1172
- 1218
- 1214
-
-
- 1214
- 1218
- 1250
-
-
- 1214
- 1250
- 1252
-
-
- 1252
- 1250
- 1300
-
-
- 1252
- 1300
- 1310
-
-
- 1310
- 1300
- 1340
-
-
- 1310
- 1340
- 1358
-
-
- 1358
- 1340
- 1406
-
-
- 1358
- 1406
- 1439
-
-
- 1499
- 1477
- 1445
-
-
- 1445
- 1477
- 1475
-
-
- 1445
- 1475
- 1406
-
-
- 1406
- 1475
- 1449
-
-
- 1406
- 1449
- 1439
-
-
- 1513
- 1503
- 1465
-
-
- 1465
- 1503
- 1459
-
-
- 1465
- 1459
- 1441
-
-
- 1441
- 1459
- 1409
-
-
- 1441
- 1409
- 1396
-
-
- 1396
- 1409
- 1360
-
-
- 1396
- 1360
- 1356
-
-
- 1356
- 1360
- 1328
-
-
- 1356
- 1328
- 1334
-
-
- 1334
- 1328
- 1304
-
-
- 1334
- 1304
- 1316
-
-
- 1316
- 1304
- 1270
-
-
- 1316
- 1270
- 1292
-
-
- 1292
- 1270
- 1242
-
-
- 1292
- 1242
- 1262
-
-
- 1262
- 1242
- 1212
-
-
- 1262
- 1212
- 1238
-
-
- 1238
- 1212
- 1174
-
-
- 1238
- 1174
- 1198
-
-
- 1198
- 1174
- 1134
-
-
- 1198
- 1134
- 1210
-
-
- 1210
- 1134
- 1150
-
-
- 1226
- 1266
- 1198
-
-
- 1198
- 1266
- 1258
-
-
- 1198
- 1258
- 1238
-
-
- 1238
- 1258
- 1296
-
-
- 1238
- 1296
- 1262
-
-
- 1262
- 1296
- 1318
-
-
- 1262
- 1318
- 1292
-
-
- 1292
- 1318
- 1336
-
-
- 1292
- 1336
- 1316
-
-
- 1316
- 1336
- 1348
-
-
- 1316
- 1348
- 1334
-
-
- 1334
- 1348
- 1368
-
-
- 1334
- 1368
- 1356
-
-
- 1356
- 1368
- 1392
-
-
- 1356
- 1392
- 1396
-
-
- 1396
- 1392
- 1417
-
-
- 1396
- 1417
- 1441
-
-
- 1441
- 1417
- 1447
-
-
- 1441
- 1447
- 1465
-
-
- 1465
- 1447
- 1466
-
-
- 1465
- 1466
- 1514
-
-
- 1478
- 1500
- 1460
-
-
- 1460
- 1500
- 1504
-
-
- 1460
- 1504
- 1466
-
-
- 1466
- 1504
- 1515
-
-
- 1466
- 1515
- 1514
-
-
- 1450
- 1476
- 1407
-
-
- 1407
- 1476
- 1446
-
-
- 1407
- 1446
- 1410
-
-
- 1410
- 1446
- 1442
-
-
- 1410
- 1442
- 1418
-
-
- 1418
- 1442
- 1428
-
-
- 1418
- 1428
- 1422
-
-
- 1422
- 1428
- 1421
-
-
- 1422
- 1421
- 1443
-
-
- 1443
- 1421
- 1423
-
-
- 1443
- 1423
- 1451
-
-
- 1451
- 1423
- 1431
-
-
- 1451
- 1431
- 1461
-
-
- 1461
- 1431
- 1435
-
-
- 1461
- 1435
- 1471
-
-
- 1471
- 1435
- 1437
-
-
- 1471
- 1437
- 1483
-
-
- 1483
- 1437
- 1425
-
-
- 1483
- 1425
- 1485
-
-
- 1485
- 1425
- 1411
-
-
- 1485
- 1411
- 1495
-
-
- 1495
- 1411
- 1473
-
-
- 1403
- 1440
- 1359
-
-
- 1359
- 1440
- 1407
-
-
- 1359
- 1407
- 1379
-
-
- 1379
- 1407
- 1410
-
-
- 1379
- 1410
- 1397
-
-
- 1397
- 1410
- 1418
-
-
- 1397
- 1418
- 1414
-
-
- 1414
- 1418
- 1422
-
-
- 1414
- 1422
- 1444
-
-
- 1444
- 1422
- 1443
-
-
- 1444
- 1443
- 1455
-
-
- 1455
- 1443
- 1451
-
-
- 1455
- 1451
- 1481
-
-
- 1481
- 1451
- 1461
-
-
- 1481
- 1461
- 1509
-
-
- 1509
- 1461
- 1471
-
-
- 1509
- 1471
- 1520
-
-
- 1520
- 1471
- 1483
-
-
- 1520
- 1483
- 1530
-
-
- 1530
- 1483
- 1485
-
-
- 1530
- 1485
- 1540
-
-
- 1540
- 1485
- 1536
-
-
- 1583
- 1607
- 1530
-
-
- 1530
- 1607
- 1560
-
-
- 1530
- 1560
- 1520
-
-
- 1520
- 1560
- 1538
-
-
- 1520
- 1538
- 1509
-
-
- 1509
- 1538
- 1522
-
-
- 1509
- 1522
- 1481
-
-
- 1481
- 1522
- 1493
-
-
- 1481
- 1493
- 1455
-
-
- 1455
- 1493
- 1456
-
-
- 1455
- 1456
- 1444
-
-
- 1444
- 1456
- 1424
-
-
- 1444
- 1424
- 1414
-
-
- 1414
- 1424
- 1393
-
-
- 1414
- 1393
- 1397
-
-
- 1397
- 1393
- 1361
-
-
- 1397
- 1361
- 1379
-
-
- 1379
- 1361
- 1341
-
-
- 1379
- 1341
- 1359
-
-
- 1359
- 1341
- 1321
-
-
- 1359
- 1321
- 1365
-
-
- 1249
- 1307
- 1279
-
-
- 1279
- 1307
- 1313
-
-
- 1279
- 1313
- 1321
-
-
- 1321
- 1313
- 1345
-
-
- 1321
- 1345
- 1365
-
-
- 1209
- 1241
- 1185
-
-
- 1185
- 1241
- 1235
-
-
- 1185
- 1235
- 1225
-
-
- 1225
- 1235
- 1261
-
-
- 1225
- 1261
- 1253
-
-
- 1253
- 1261
- 1301
-
-
- 1253
- 1301
- 1295
-
-
- 1295
- 1301
- 1329
-
-
- 1295
- 1329
- 1335
-
-
- 1335
- 1329
- 1369
-
-
- 1335
- 1369
- 1395
-
-
- 1395
- 1369
- 1432
-
-
- 1395
- 1432
- 1462
-
-
- 1462
- 1432
- 1482
-
-
- 1462
- 1482
- 1523
-
-
- 1523
- 1482
- 1529
-
-
- 1523
- 1529
- 1563
-
-
- 1563
- 1529
- 1562
-
-
- 1563
- 1562
- 1609
-
-
- 1609
- 1562
- 1597
-
-
- 1609
- 1597
- 1651
-
-
- 1651
- 1597
- 1645
-
-
- 1653
- 1654
- 1609
-
-
- 1609
- 1654
- 1610
-
-
- 1609
- 1610
- 1563
-
-
- 1563
- 1610
- 1553
-
-
- 1563
- 1553
- 1523
-
-
- 1523
- 1553
- 1510
-
-
- 1523
- 1510
- 1462
-
-
- 1462
- 1510
- 1436
-
-
- 1462
- 1436
- 1395
-
-
- 1395
- 1436
- 1349
-
-
- 1395
- 1349
- 1335
-
-
- 1335
- 1349
- 1305
-
-
- 1335
- 1305
- 1295
-
-
- 1295
- 1305
- 1251
-
-
- 1295
- 1251
- 1253
-
-
- 1253
- 1251
- 1217
-
-
- 1253
- 1217
- 1225
-
-
- 1225
- 1217
- 1177
-
-
- 1225
- 1177
- 1185
-
-
- 1185
- 1177
- 1141
-
-
- 1185
- 1141
- 1179
-
-
- 1057
- 1089
- 1083
-
-
- 1083
- 1089
- 1101
-
-
- 1083
- 1101
- 1141
-
-
- 1141
- 1101
- 1147
-
-
- 1141
- 1147
- 1179
-
-
- 993
- 1055
- 987
-
-
- 987
- 1055
- 1039
-
-
- 987
- 1039
- 1027
-
-
- 1027
- 1039
- 1077
-
-
- 1027
- 1077
- 1071
-
-
- 1071
- 1077
- 1129
-
-
- 1071
- 1129
- 1127
-
-
- 1127
- 1129
- 1167
-
-
- 1127
- 1167
- 1173
-
-
- 1173
- 1167
- 1219
-
-
- 1173
- 1219
- 1233
-
-
- 1233
- 1219
- 1271
-
-
- 1233
- 1271
- 1293
-
-
- 1293
- 1271
- 1337
-
-
- 1293
- 1337
- 1371
-
-
- 1371
- 1337
- 1438
-
-
- 1371
- 1438
- 1484
-
-
- 1484
- 1438
- 1521
-
-
- 1484
- 1521
- 1561
-
-
- 1561
- 1521
- 1586
-
-
- 1561
- 1586
- 1630
-
-
- 1630
- 1586
- 1636
-
-
- 937
- 975
- 933
-
-
- 933
- 975
- 987
-
-
- 933
- 987
- 983
-
-
- 983
- 987
- 1027
-
-
- 983
- 1027
- 1019
-
-
- 1019
- 1027
- 1071
-
-
- 1019
- 1071
- 1069
-
-
- 1069
- 1071
- 1127
-
-
- 1069
- 1127
- 1131
-
-
- 1131
- 1127
- 1173
-
-
- 1131
- 1173
- 1183
-
-
- 1183
- 1173
- 1233
-
-
- 1183
- 1233
- 1243
-
-
- 1243
- 1233
- 1293
-
-
- 1243
- 1293
- 1319
-
-
- 1319
- 1293
- 1371
-
-
- 1319
- 1371
- 1426
-
-
- 1426
- 1371
- 1484
-
-
- 1426
- 1484
- 1531
-
-
- 1531
- 1484
- 1561
-
-
- 1531
- 1561
- 1584
-
-
- 1584
- 1561
- 1608
-
-
- 1580
- 1541
- 1531
-
-
- 1531
- 1541
- 1486
-
-
- 1531
- 1486
- 1426
-
-
- 1426
- 1486
- 1351
-
-
- 1426
- 1351
- 1319
-
-
- 1319
- 1351
- 1263
-
-
- 1319
- 1263
- 1243
-
-
- 1243
- 1263
- 1197
-
-
- 1243
- 1197
- 1183
-
-
- 1183
- 1197
- 1137
-
-
- 1183
- 1137
- 1131
-
-
- 1131
- 1137
- 1075
-
-
- 1131
- 1075
- 1069
-
-
- 1069
- 1075
- 1017
-
-
- 1069
- 1017
- 1019
-
-
- 1019
- 1017
- 979
-
-
- 1019
- 979
- 983
-
-
- 983
- 979
- 929
-
-
- 983
- 929
- 933
-
-
- 933
- 929
- 877
-
-
- 933
- 877
- 911
-
-
- 775
- 835
- 841
-
-
- 841
- 835
- 847
-
-
- 841
- 847
- 877
-
-
- 877
- 847
- 865
-
-
- 877
- 865
- 911
-
-
- 713
- 769
- 739
-
-
- 739
- 769
- 779
-
-
- 739
- 779
- 783
-
-
- 783
- 779
- 845
-
-
- 783
- 845
- 851
-
-
- 851
- 845
- 893
-
-
- 851
- 893
- 897
-
-
- 897
- 893
- 923
-
-
- 897
- 923
- 927
-
-
- 927
- 923
- 981
-
-
- 927
- 981
- 985
-
-
- 985
- 981
- 1033
-
-
- 985
- 1033
- 1051
-
-
- 1051
- 1033
- 1087
-
-
- 1051
- 1087
- 1093
-
-
- 1093
- 1087
- 1159
-
-
- 1093
- 1159
- 1175
-
-
- 1175
- 1159
- 1239
-
-
- 1175
- 1239
- 1259
-
-
- 1259
- 1239
- 1331
-
-
- 1259
- 1331
- 1339
-
-
- 1339
- 1331
- 1381
-
-
- 667
- 703
- 681
-
-
- 681
- 703
- 739
-
-
- 681
- 739
- 747
-
-
- 747
- 739
- 783
-
-
- 747
- 783
- 789
-
-
- 789
- 783
- 851
-
-
- 789
- 851
- 853
-
-
- 853
- 851
- 897
-
-
- 853
- 897
- 891
-
-
- 891
- 897
- 927
-
-
- 891
- 927
- 931
-
-
- 931
- 927
- 985
-
-
- 931
- 985
- 991
-
-
- 991
- 985
- 1051
-
-
- 991
- 1051
- 1059
-
-
- 1059
- 1051
- 1093
-
-
- 1059
- 1093
- 1111
-
-
- 1111
- 1093
- 1175
-
-
- 1111
- 1175
- 1199
-
-
- 1199
- 1175
- 1259
-
-
- 1199
- 1259
- 1267
-
-
- 1267
- 1259
- 1303
-
-
- 1227
- 1211
- 1199
-
-
- 1199
- 1211
- 1135
-
-
- 1199
- 1135
- 1111
-
-
- 1111
- 1135
- 1061
-
-
- 1111
- 1061
- 1059
-
-
- 1059
- 1061
- 995
-
-
- 1059
- 995
- 991
-
-
- 991
- 995
- 935
-
-
- 991
- 935
- 931
-
-
- 931
- 935
- 883
-
-
- 931
- 883
- 891
-
-
- 891
- 883
- 849
-
-
- 891
- 849
- 853
-
-
- 853
- 849
- 791
-
-
- 853
- 791
- 789
-
-
- 789
- 791
- 753
-
-
- 789
- 753
- 747
-
-
- 747
- 753
- 685
-
-
- 747
- 685
- 681
-
-
- 681
- 685
- 625
-
-
- 681
- 625
- 627
-
-
- 519
- 569
- 591
-
-
- 591
- 569
- 573
-
-
- 591
- 573
- 625
-
-
- 625
- 573
- 617
-
-
- 625
- 617
- 627
-
-
- 471
- 511
- 505
-
-
- 505
- 511
- 539
-
-
- 505
- 539
- 555
-
-
- 555
- 539
- 601
-
-
- 555
- 601
- 609
-
-
- 609
- 601
- 653
-
-
- 609
- 653
- 655
-
-
- 655
- 653
- 699
-
-
- 655
- 699
- 693
-
-
- 693
- 699
- 751
-
-
- 693
- 751
- 745
-
-
- 745
- 751
- 781
-
-
- 745
- 781
- 777
-
-
- 777
- 781
- 839
-
-
- 777
- 839
- 829
-
-
- 829
- 839
- 863
-
-
- 829
- 863
- 861
-
-
- 861
- 863
- 941
-
-
- 861
- 941
- 943
-
-
- 943
- 941
- 999
-
-
- 943
- 999
- 947
-
-
- 947
- 999
- 1003
-
-
- 945
- 905
- 943
-
-
- 943
- 905
- 859
-
-
- 943
- 859
- 861
-
-
- 861
- 859
- 825
-
-
- 861
- 825
- 829
-
-
- 829
- 825
- 771
-
-
- 829
- 771
- 777
-
-
- 777
- 771
- 715
-
-
- 777
- 715
- 745
-
-
- 745
- 715
- 683
-
-
- 745
- 683
- 693
-
-
- 693
- 683
- 647
-
-
- 693
- 647
- 655
-
-
- 655
- 647
- 611
-
-
- 655
- 611
- 609
-
-
- 609
- 611
- 567
-
-
- 609
- 567
- 555
-
-
- 555
- 567
- 523
-
-
- 555
- 523
- 505
-
-
- 505
- 523
- 459
-
-
- 505
- 459
- 443
-
-
- 354
- 377
- 418
-
-
- 418
- 377
- 384
-
-
- 418
- 384
- 459
-
-
- 459
- 384
- 416
-
-
- 459
- 416
- 443
-
-
- 335
- 352
- 375
-
-
- 375
- 352
- 392
-
-
- 375
- 392
- 422
-
-
- 422
- 392
- 447
-
-
- 422
- 447
- 465
-
-
- 465
- 447
- 497
-
-
- 465
- 497
- 499
-
-
- 499
- 497
- 531
-
-
- 499
- 531
- 525
-
-
- 525
- 531
- 561
-
-
- 525
- 561
- 543
-
-
- 543
- 561
- 595
-
-
- 543
- 595
- 583
-
-
- 583
- 595
- 621
-
-
- 583
- 621
- 607
-
-
- 607
- 621
- 663
-
-
- 607
- 663
- 629
-
-
- 629
- 663
- 701
-
-
- 629
- 701
- 677
-
-
- 677
- 701
- 757
-
-
- 677
- 757
- 705
-
-
- 705
- 757
- 731
-
-
- 329
- 331
- 371
-
-
- 371
- 331
- 375
-
-
- 371
- 375
- 401
-
-
- 401
- 375
- 422
-
-
- 401
- 422
- 435
-
-
- 435
- 422
- 465
-
-
- 435
- 465
- 467
-
-
- 467
- 465
- 499
-
-
- 467
- 499
- 491
-
-
- 491
- 499
- 525
-
-
- 491
- 525
- 513
-
-
- 513
- 525
- 543
-
-
- 513
- 543
- 527
-
-
- 527
- 543
- 583
-
-
- 527
- 583
- 545
-
-
- 545
- 583
- 607
-
-
- 545
- 607
- 585
-
-
- 585
- 607
- 629
-
-
- 585
- 629
- 615
-
-
- 615
- 629
- 677
-
-
- 615
- 677
- 633
-
-
- 633
- 677
- 661
-
-
- 1778
- 1503
- 1780
-
-
- 1780
- 1503
- 1513
-
-
- 1780
- 1513
- 1798
-
-
- 1589
- 1312
- 1595
-
-
- 1595
- 1312
- 1344
-
-
- 1595
- 1344
- 1658
-
-
- 1658
- 1344
- 1364
-
-
- 1658
- 1364
- 1666
-
-
- 1666
- 1364
- 1402
-
-
- 1666
- 1402
- 1713
-
-
- 1713
- 1402
- 1439
-
-
- 1713
- 1439
- 1720
-
-
- 1720
- 1439
- 1449
-
-
- 1720
- 1449
- 1753
-
-
- 1753
- 1449
- 1475
-
-
- 1753
- 1475
- 1755
-
-
- 1755
- 1475
- 1477
-
-
- 1755
- 1477
- 1778
-
-
- 1778
- 1477
- 1499
-
-
- 1778
- 1499
- 1503
-
-
- 1228
- 1100
- 1246
-
-
- 1246
- 1100
- 1146
-
-
- 1246
- 1146
- 1346
-
-
- 1346
- 1146
- 1178
-
-
- 1346
- 1178
- 1376
-
-
- 1376
- 1178
- 1208
-
-
- 1376
- 1208
- 1511
-
-
- 1511
- 1208
- 1240
-
-
- 1511
- 1240
- 1518
-
-
- 1518
- 1240
- 1248
-
-
- 1518
- 1248
- 1589
-
-
- 1589
- 1248
- 1306
-
-
- 1589
- 1306
- 1312
-
-
- 672
- 774
- 708
-
-
- 708
- 774
- 834
-
-
- 708
- 834
- 784
-
-
- 784
- 834
- 846
-
-
- 784
- 846
- 822
-
-
- 822
- 846
- 864
-
-
- 822
- 864
- 906
-
-
- 906
- 864
- 910
-
-
- 906
- 910
- 918
-
-
- 918
- 910
- 936
-
-
- 918
- 936
- 1000
-
-
- 1000
- 936
- 974
-
-
- 1000
- 974
- 1012
-
-
- 1012
- 974
- 992
-
-
- 1012
- 992
- 1104
-
-
- 1104
- 992
- 1054
-
-
- 1104
- 1054
- 1138
-
-
- 1138
- 1054
- 1056
-
-
- 1138
- 1056
- 1228
-
-
- 1228
- 1056
- 1088
-
-
- 1228
- 1088
- 1100
-
-
- 214
- 518
- 245
-
-
- 245
- 518
- 568
-
-
- 245
- 568
- 296
-
-
- 296
- 568
- 572
-
-
- 296
- 572
- 319
-
-
- 319
- 572
- 616
-
-
- 319
- 616
- 403
-
-
- 403
- 616
- 626
-
-
- 403
- 626
- 468
-
-
- 468
- 626
- 666
-
-
- 468
- 666
- 552
-
-
- 552
- 666
- 702
-
-
- 552
- 702
- 596
-
-
- 596
- 702
- 712
-
-
- 596
- 712
- 672
-
-
- 672
- 712
- 768
-
-
- 672
- 768
- 774
-
-
- 75
- 353
- 88
-
-
- 88
- 353
- 376
-
-
- 88
- 376
- 111
-
-
- 111
- 376
- 383
-
-
- 111
- 383
- 123
-
-
- 123
- 383
- 415
-
-
- 123
- 415
- 155
-
-
- 155
- 415
- 442
-
-
- 155
- 442
- 177
-
-
- 177
- 442
- 470
-
-
- 177
- 470
- 214
-
-
- 214
- 470
- 510
-
-
- 214
- 510
- 518
-
-
- 112
- 377
- 89
-
-
- 89
- 377
- 354
-
-
- 89
- 354
- 76
-
-
- 76
- 354
- 352
-
-
- 76
- 352
- 64
-
-
- 64
- 352
- 335
-
-
- 64
- 335
- 54
-
-
- 54
- 335
- 331
-
-
- 54
- 331
- 45
-
-
- 45
- 331
- 329
-
-
- 45
- 329
- 53
-
-
- 53
- 329
- 330
-
-
- 53
- 330
- 63
-
-
- 63
- 330
- 334
-
-
- 63
- 334
- 75
-
-
- 75
- 334
- 351
-
-
- 75
- 351
- 353
-
-
- 404
- 617
- 320
-
-
- 320
- 617
- 573
-
-
- 320
- 573
- 297
-
-
- 297
- 573
- 569
-
-
- 297
- 569
- 246
-
-
- 246
- 569
- 519
-
-
- 246
- 519
- 215
-
-
- 215
- 519
- 511
-
-
- 215
- 511
- 178
-
-
- 178
- 511
- 471
-
-
- 178
- 471
- 156
-
-
- 156
- 471
- 443
-
-
- 156
- 443
- 124
-
-
- 124
- 443
- 416
-
-
- 124
- 416
- 112
-
-
- 112
- 416
- 384
-
-
- 112
- 384
- 377
-
-
- 907
- 865
- 823
-
-
- 823
- 865
- 847
-
-
- 823
- 847
- 785
-
-
- 785
- 847
- 835
-
-
- 785
- 835
- 709
-
-
- 709
- 835
- 775
-
-
- 709
- 775
- 673
-
-
- 673
- 775
- 769
-
-
- 673
- 769
- 597
-
-
- 597
- 769
- 713
-
-
- 597
- 713
- 553
-
-
- 553
- 713
- 703
-
-
- 553
- 703
- 469
-
-
- 469
- 703
- 667
-
-
- 469
- 667
- 404
-
-
- 404
- 667
- 627
-
-
- 404
- 627
- 617
-
-
- 1229
- 1089
- 1139
-
-
- 1139
- 1089
- 1057
-
-
- 1139
- 1057
- 1105
-
-
- 1105
- 1057
- 1055
-
-
- 1105
- 1055
- 1013
-
-
- 1013
- 1055
- 993
-
-
- 1013
- 993
- 1001
-
-
- 1001
- 993
- 975
-
-
- 1001
- 975
- 919
-
-
- 919
- 975
- 937
-
-
- 919
- 937
- 907
-
-
- 907
- 937
- 911
-
-
- 907
- 911
- 865
-
-
- 1659
- 1345
- 1596
-
-
- 1596
- 1345
- 1313
-
-
- 1596
- 1313
- 1590
-
-
- 1590
- 1313
- 1307
-
-
- 1590
- 1307
- 1519
-
-
- 1519
- 1307
- 1249
-
-
- 1519
- 1249
- 1512
-
-
- 1512
- 1249
- 1241
-
-
- 1512
- 1241
- 1377
-
-
- 1377
- 1241
- 1209
-
-
- 1377
- 1209
- 1347
-
-
- 1347
- 1209
- 1179
-
-
- 1347
- 1179
- 1247
-
-
- 1247
- 1179
- 1147
-
-
- 1247
- 1147
- 1229
-
-
- 1229
- 1147
- 1101
-
-
- 1229
- 1101
- 1089
-
-
- 1513
- 1514
- 1798
-
-
- 1798
- 1514
- 1515
-
-
- 1798
- 1515
- 1781
-
-
- 1781
- 1515
- 1504
-
-
- 1781
- 1504
- 1779
-
-
- 1779
- 1504
- 1500
-
-
- 1779
- 1500
- 1756
-
-
- 1756
- 1500
- 1478
-
-
- 1756
- 1478
- 1754
-
-
- 1754
- 1478
- 1476
-
-
- 1754
- 1476
- 1721
-
-
- 1721
- 1476
- 1450
-
-
- 1721
- 1450
- 1714
-
-
- 1714
- 1450
- 1440
-
-
- 1714
- 1440
- 1667
-
-
- 1667
- 1440
- 1403
-
-
- 1667
- 1403
- 1659
-
-
- 1659
- 1403
- 1365
-
-
- 1659
- 1365
- 1345
-
-
- 27
- 25
- 83
-
-
- 1149
- 1157
- 1273
-
-
- 1829
- 1798
- 1833
-
-
- 1833
- 1798
- 1781
-
-
- 1833
- 1781
- 1830
-
-
- 1756
- 1816
- 1806
-
-
- 1830
- 1781
- 1806
-
-
- 1806
- 1781
- 1779
-
-
- 1806
- 1779
- 1756
-
-
- 1816
- 1756
- 1818
-
-
- 1818
- 1756
- 1754
-
-
- 1818
- 1754
- 1762
-
-
- 1273
- 1229
- 1149
-
-
- 1149
- 1229
- 1139
-
-
- 1149
- 1139
- 1125
-
-
- 1125
- 1139
- 1105
-
-
- 1125
- 1105
- 1025
-
-
- 1105
- 1013
- 1025
-
-
- 1025
- 1013
- 1001
-
-
- 1025
- 1001
- 921
-
-
- 1001
- 919
- 921
-
-
- 921
- 919
- 907
-
-
- 921
- 907
- 815
-
-
- 907
- 823
- 815
-
-
- 815
- 823
- 785
-
-
- 815
- 785
- 719
-
-
- 719
- 785
- 709
-
-
- 719
- 709
- 695
-
-
- 695
- 709
- 689
-
-
- 689
- 709
- 673
-
-
- 689
- 673
- 575
-
-
- 83
- 112
- 27
-
-
- 27
- 112
- 89
-
-
- 27
- 89
- 39
-
-
- 39
- 89
- 76
-
-
- 39
- 76
- 13
-
-
- 76
- 64
- 13
-
-
- 13
- 64
- 54
-
-
- 13
- 54
- 9
-
-
- 54
- 45
- 9
-
-
- 9
- 45
- 53
-
-
- 9
- 53
- 12
-
-
- 88
- 111
- 24
-
-
- 24
- 111
- 82
-
-
- 53
- 63
- 12
-
-
- 12
- 63
- 75
-
-
- 12
- 75
- 38
-
-
- 38
- 75
- 88
-
-
- 38
- 88
- 26
-
-
- 26
- 88
- 24
-
-
- 906
- 920
- 814
-
-
- 906
- 918
- 920
-
-
- 920
- 918
- 1000
-
-
- 920
- 1000
- 1024
-
-
- 1138
- 1228
- 1154
-
-
- 1154
- 1228
- 1272
-
-
- 1000
- 1012
- 1024
-
-
- 1024
- 1012
- 1104
-
-
- 1024
- 1104
- 1122
-
-
- 1122
- 1104
- 1138
-
-
- 1122
- 1138
- 1148
-
-
- 1148
- 1138
- 1154
-
-
- 1703
- 1713
- 1761
-
-
- 1761
- 1713
- 1720
-
-
- 1761
- 1720
- 1817
-
-
- 1817
- 1720
- 1753
-
-
- 1817
- 1753
- 1815
-
-
- 1815
- 1753
- 1755
-
-
- 1815
- 1755
- 1805
-
-
- 1805
- 1755
- 1778
-
-
- 1805
- 1778
- 1829
-
-
- 1829
- 1778
- 1780
-
-
- 1829
- 1780
- 1798
-
-
- 1639
- 1658
- 1703
-
-
- 1703
- 1658
- 1666
-
-
- 1703
- 1666
- 1713
-
-
- 1550
- 1589
- 1639
-
-
- 1639
- 1589
- 1595
-
-
- 1639
- 1595
- 1658
-
-
- 1429
- 1511
- 1550
-
-
- 1550
- 1511
- 1518
-
-
- 1550
- 1518
- 1589
-
-
- 1228
- 1246
- 1272
-
-
- 1272
- 1246
- 1346
-
-
- 1272
- 1346
- 1429
-
-
- 1429
- 1346
- 1376
-
-
- 1429
- 1376
- 1511
-
-
- 412
- 552
- 574
-
-
- 574
- 552
- 596
-
-
- 574
- 596
- 686
-
-
- 686
- 596
- 672
-
-
- 686
- 672
- 694
-
-
- 694
- 672
- 708
-
-
- 694
- 708
- 716
-
-
- 716
- 708
- 784
-
-
- 716
- 784
- 814
-
-
- 814
- 784
- 822
-
-
- 814
- 822
- 906
-
-
- 290
- 403
- 412
-
-
- 412
- 403
- 468
-
-
- 412
- 468
- 552
-
-
- 202
- 296
- 290
-
-
- 290
- 296
- 319
-
-
- 290
- 319
- 403
-
-
- 138
- 214
- 202
-
-
- 202
- 214
- 245
-
-
- 202
- 245
- 296
-
-
- 111
- 123
- 82
-
-
- 82
- 123
- 155
-
-
- 82
- 155
- 138
-
-
- 138
- 155
- 177
-
-
- 138
- 177
- 214
-
-
- 139
- 156
- 83
-
-
- 83
- 156
- 124
-
-
- 83
- 124
- 112
-
-
- 203
- 215
- 139
-
-
- 139
- 215
- 178
-
-
- 139
- 178
- 156
-
-
- 291
- 297
- 203
-
-
- 203
- 297
- 246
-
-
- 203
- 246
- 215
-
-
- 413
- 404
- 291
-
-
- 291
- 404
- 320
-
-
- 291
- 320
- 297
-
-
- 673
- 597
- 575
-
-
- 575
- 597
- 553
-
-
- 575
- 553
- 413
-
-
- 413
- 553
- 469
-
-
- 413
- 469
- 404
-
-
- 1430
- 1347
- 1273
-
-
- 1273
- 1347
- 1247
-
-
- 1273
- 1247
- 1229
-
-
- 1551
- 1512
- 1430
-
-
- 1430
- 1512
- 1377
-
-
- 1430
- 1377
- 1347
-
-
- 1640
- 1590
- 1551
-
-
- 1551
- 1590
- 1519
-
-
- 1551
- 1519
- 1512
-
-
- 1704
- 1659
- 1640
-
-
- 1640
- 1659
- 1596
-
-
- 1640
- 1596
- 1590
-
-
- 1754
- 1721
- 1762
-
-
- 1762
- 1721
- 1714
-
-
- 1762
- 1714
- 1704
-
-
- 1704
- 1714
- 1667
-
-
- 1704
- 1667
- 1659
-
-
- 25
- 236
- 83
-
-
- 83
- 236
- 248
-
-
- 83
- 248
- 139
-
-
- 139
- 248
- 293
-
-
- 139
- 293
- 203
-
-
- 203
- 293
- 364
-
-
- 203
- 364
- 291
-
-
- 291
- 364
- 495
-
-
- 291
- 495
- 413
-
-
- 413
- 495
- 603
-
-
- 413
- 603
- 575
-
-
- 575
- 603
- 688
-
-
- 575
- 688
- 689
-
-
- 718
- 688
- 603
-
-
- 308
- 235
- 247
-
-
- 1123
- 1155
- 1190
-
-
- 1535
- 1606
- 1582
-
-
- 1327
- 1367
- 1543
-
-
- 1543
- 1367
- 1401
-
-
- 1543
- 1401
- 1569
-
-
- 1569
- 1401
- 1408
-
-
- 1569
- 1408
- 1578
-
-
- 1578
- 1408
- 1400
-
-
- 1578
- 1400
- 1568
-
-
- 1568
- 1400
- 1366
-
-
- 1568
- 1366
- 1542
-
-
- 1542
- 1366
- 1534
-
-
- 1534
- 1366
- 1326
-
-
- 1534
- 1326
- 1605
-
-
- 1094
- 1044
- 1064
-
-
- 1064
- 1044
- 972
-
-
- 1064
- 972
- 988
-
-
- 988
- 972
- 912
-
-
- 988
- 912
- 908
-
-
- 908
- 912
- 854
-
-
- 908
- 854
- 818
-
-
- 818
- 854
- 772
-
-
- 818
- 772
- 732
-
-
- 732
- 772
- 717
-
-
- 717
- 772
- 706
-
-
- 717
- 706
- 687
-
-
- 492
- 456
- 288
-
-
- 288
- 456
- 436
-
-
- 288
- 436
- 263
-
-
- 263
- 436
- 431
-
-
- 263
- 431
- 264
-
-
- 431
- 437
- 264
-
-
- 264
- 437
- 457
-
-
- 264
- 457
- 289
-
-
- 289
- 457
- 309
-
-
- 309
- 457
- 493
-
-
- 309
- 493
- 236
-
-
- 707
- 773
- 733
-
-
- 733
- 773
- 855
-
-
- 733
- 855
- 819
-
-
- 819
- 855
- 913
-
-
- 819
- 913
- 909
-
-
- 909
- 913
- 973
-
-
- 909
- 973
- 989
-
-
- 989
- 973
- 1045
-
-
- 989
- 1045
- 1065
-
-
- 1065
- 1045
- 1124
-
-
- 1124
- 1045
- 1095
-
-
- 1124
- 1095
- 1156
-
-
- 1064
- 1123
- 1094
-
-
- 1094
- 1123
- 1190
-
-
- 1094
- 1190
- 1164
-
-
- 1164
- 1190
- 1298
-
-
- 1164
- 1298
- 1230
-
-
- 1230
- 1298
- 1415
-
-
- 1230
- 1415
- 1280
-
-
- 1280
- 1415
- 1524
-
-
- 1280
- 1524
- 1326
-
-
- 1326
- 1524
- 1581
-
-
- 1326
- 1581
- 1605
-
-
- 288
- 308
- 492
-
-
- 492
- 308
- 247
-
-
- 492
- 247
- 534
-
-
- 534
- 247
- 292
-
-
- 534
- 292
- 592
-
-
- 592
- 292
- 363
-
-
- 592
- 363
- 644
-
-
- 644
- 363
- 494
-
-
- 644
- 494
- 706
-
-
- 706
- 494
- 602
-
-
- 706
- 602
- 687
-
-
- 733
- 718
- 707
-
-
- 707
- 718
- 603
-
-
- 707
- 603
- 645
-
-
- 645
- 603
- 495
-
-
- 645
- 495
- 593
-
-
- 593
- 495
- 364
-
-
- 593
- 364
- 535
-
-
- 535
- 364
- 293
-
-
- 535
- 293
- 493
-
-
- 493
- 293
- 248
-
-
- 493
- 248
- 236
-
-
- 1543
- 1535
- 1327
-
-
- 1327
- 1535
- 1582
-
-
- 1327
- 1582
- 1281
-
-
- 1281
- 1582
- 1525
-
-
- 1281
- 1525
- 1231
-
-
- 1231
- 1525
- 1416
-
-
- 1231
- 1416
- 1165
-
-
- 1165
- 1416
- 1299
-
-
- 1165
- 1299
- 1095
-
-
- 1095
- 1299
- 1191
-
-
- 1095
- 1191
- 1156
-
-
- 973
- 913
- 855
-
-
- 973
- 855
- 1045
-
-
- 1045
- 855
- 773
-
-
- 1045
- 773
- 1095
-
-
- 1095
- 773
- 707
-
-
- 1095
- 707
- 1165
-
-
- 1165
- 707
- 645
-
-
- 1165
- 645
- 1231
-
-
- 1231
- 645
- 593
-
-
- 1231
- 593
- 1281
-
-
- 1281
- 593
- 535
-
-
- 1281
- 535
- 1327
-
-
- 1327
- 535
- 493
-
-
- 1327
- 493
- 1367
-
-
- 1367
- 493
- 457
-
-
- 1367
- 457
- 1401
-
-
- 1401
- 457
- 437
-
-
- 1401
- 437
- 1408
-
-
- 1408
- 437
- 431
-
-
- 1408
- 431
- 436
-
-
- 456
- 492
- 436
-
-
- 436
- 492
- 1164
-
-
- 436
- 1164
- 1280
-
-
- 1280
- 1164
- 1230
-
-
- 1400
- 1408
- 1366
-
-
- 1366
- 1408
- 436
-
-
- 1366
- 436
- 1326
-
-
- 1326
- 436
- 1280
-
-
- 644
- 706
- 592
-
-
- 592
- 706
- 1164
-
-
- 592
- 1164
- 534
-
-
- 534
- 1164
- 492
-
-
- 1094
- 1164
- 1044
-
-
- 1044
- 1164
- 706
-
-
- 1044
- 706
- 972
-
-
- 972
- 706
- 772
-
-
- 972
- 772
- 912
-
-
- 912
- 772
- 854
-
-
- 1806
- 1535
- 1543
-
-
- 1806
- 1543
- 1830
-
-
- 1830
- 1543
- 1569
-
-
- 1830
- 1569
- 1833
-
-
- 1833
- 1569
- 1578
-
-
- 1833
- 1578
- 1829
-
-
- 1829
- 1578
- 1568
-
-
- 1829
- 1568
- 1805
-
-
- 1805
- 1568
- 1542
-
-
- 1805
- 1542
- 1534
-
-
- 1805
- 1534
- 1815
-
-
- 1815
- 1534
- 1605
-
-
- 1815
- 1605
- 1817
-
-
- 1818
- 1606
- 1816
-
-
- 1816
- 1606
- 1535
-
-
- 1816
- 1535
- 1806
-
-
- 1122
- 1123
- 1064
-
-
- 1122
- 1064
- 1024
-
-
- 1024
- 1064
- 988
-
-
- 1024
- 988
- 920
-
-
- 920
- 988
- 908
-
-
- 920
- 908
- 814
-
-
- 814
- 908
- 818
-
-
- 814
- 818
- 716
-
-
- 716
- 818
- 732
-
-
- 716
- 732
- 717
-
-
- 716
- 717
- 694
-
-
- 694
- 717
- 687
-
-
- 694
- 687
- 686
-
-
- 1154
- 1155
- 1148
-
-
- 1148
- 1155
- 1123
-
-
- 1148
- 1123
- 1122
-
-
- 38
- 308
- 288
-
-
- 38
- 288
- 12
-
-
- 12
- 288
- 263
-
-
- 12
- 263
- 9
-
-
- 9
- 263
- 264
-
-
- 9
- 264
- 13
-
-
- 13
- 264
- 39
-
-
- 39
- 264
- 289
-
-
- 39
- 289
- 309
-
-
- 39
- 309
- 27
-
-
- 27
- 309
- 236
-
-
- 27
- 236
- 25
-
-
- 24
- 235
- 26
-
-
- 26
- 235
- 308
-
-
- 26
- 308
- 38
-
-
- 718
- 733
- 719
-
-
- 719
- 733
- 819
-
-
- 719
- 819
- 815
-
-
- 815
- 819
- 909
-
-
- 815
- 909
- 921
-
-
- 921
- 909
- 1025
-
-
- 1025
- 909
- 989
-
-
- 1025
- 989
- 1125
-
-
- 1125
- 989
- 1065
-
-
- 1125
- 1065
- 1124
-
-
- 1125
- 1124
- 1149
-
-
- 1149
- 1124
- 1156
-
-
- 1149
- 1156
- 1157
-
-
- 689
- 688
- 695
-
-
- 695
- 688
- 718
-
-
- 695
- 718
- 719
-
-
-
-
-
diff --git a/software/Print3r/models/Sphere20Face.amf b/software/Print3r/models/Sphere20Face.amf
deleted file mode 100644
index 6ca2db70..00000000
--- a/software/Print3r/models/Sphere20Face.amf
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-
- Sphere20
-
-
-
-
-
- -2.62866
- 4.25325
- 0
-
-
- -0.525731
- 0.850651
- 0
-
-
-
-
- 2.62866
- 4.25325
- 0
-
-
- 0.525731
- 0.850651
- 0
-
-
-
-
- -2.62866
- -4.25325
- 0
-
-
- -0.525731
- -0.850651
- 0
-
-
-
-
- 2.62866
- -4.25325
- 0
-
-
- 0.525731
- -0.850651
- 0
-
-
-
-
- 0
- -2.62866
- 4.25325
-
-
- 0
- -0.525731
- 0.850651
-
-
-
-
- 0
- 2.62866
- 4.25325
-
-
- 0
- 0.525731
- 0.850651
-
-
-
-
- 0
- -2.62866
- -4.25325
-
-
- 0
- -0.525731
- -0.850651
-
-
-
-
- 0
- 2.62866
- -4.25325
-
-
- 0
- 0.525731
- -0.850651
-
-
-
-
- 4.25325
- 0
- -2.62866
-
-
- 0.850651
- 0
- -0.525731
-
-
-
-
- 4.25325
- 0
- 2.62866
-
-
- 0.850651
- 0
- 0.525731
-
-
-
-
- -4.25325
- 0
- -2.62866
-
-
- -0.850651
- 0
- -0.525731
-
-
-
-
- -4.25325
- 0
- 2.62866
-
-
- -0.850651
- 0
- 0.525731
-
-
-
-
-
- 0
- 11
- 5
-
-
- 0
- 5
- 1
-
-
- 0
- 1
- 7
-
-
- 0
- 7
- 10
-
-
- 0
- 10
- 11
-
-
- 1
- 5
- 9
-
-
- 5
- 11
- 4
-
-
- 11
- 10
- 2
-
-
- 10
- 7
- 6
-
-
- 7
- 1
- 8
-
-
- 3
- 9
- 4
-
-
- 3
- 4
- 2
-
-
- 3
- 2
- 6
-
-
- 3
- 6
- 8
-
-
- 3
- 8
- 9
-
-
- 4
- 9
- 5
-
-
- 2
- 4
- 11
-
-
- 6
- 2
- 10
-
-
- 8
- 6
- 7
-
-
- 9
- 8
- 1
-
-
-
-
-
diff --git a/software/Print3r/models/cow-nonormals.obj b/software/Print3r/models/cow-nonormals.obj
deleted file mode 100644
index 99e92825..00000000
--- a/software/Print3r/models/cow-nonormals.obj
+++ /dev/null
@@ -1,10388 +0,0 @@
-# The units used in this file are centimeters.
-v 2.229345 -0.992723 -0.862826
-v 2.292449 -0.871852 -0.882400
-v 2.410367 -0.777999 -0.841105
-v 2.407309 -0.974980 -0.805091
-v 2.539200 -0.727778 -0.750475
-v 2.520417 -0.954785 -0.739445
-v 2.637655 -0.768176 -0.637039
-v 2.669281 -0.930664 -0.557166
-v 2.514167 -1.077721 -0.706614
-v 2.386465 -1.116066 -0.761367
-v 2.180012 -1.130557 -0.821812
-v 2.354287 -1.193746 -0.735189
-v 2.158051 -1.209613 -0.783941
-v 2.318787 -1.294090 -0.673863
-v 2.126237 -1.330172 -0.721011
-v 2.274533 -1.433487 -0.567366
-v 2.486533 -1.274971 -0.627822
-v 2.457060 -1.400958 -0.539866
-v 2.549322 -1.335209 -0.535156
-v 2.617970 -1.235597 -0.520238
-v 2.510841 -1.158786 -0.678057
-v 2.670253 -1.108365 -0.544018
-v 2.710721 -0.830091 -0.532493
-v 2.857666 -0.930625 -0.391195
-v 2.757946 -1.099958 -0.471684
-v 2.847364 -1.103812 -0.402301
-v 2.803736 -1.255869 -0.438328
-v 2.740886 -1.339225 -0.463604
-v 2.663024 -1.440487 -0.478149
-v 2.515314 -1.507063 -0.483275
-v 2.422296 -1.510915 -0.494169
-v 2.249663 -1.492705 -0.531270
-v 2.079600 -1.473377 -0.654997
-v 2.960118 -0.941827 -0.284743
-v 2.928787 -1.107467 -0.312054
-v 2.893096 -1.302168 -0.332049
-v 2.824356 -1.407256 -0.355013
-v 2.721135 -1.520418 -0.362378
-v 2.545261 -1.593300 -0.386310
-v 2.396607 -1.593239 -0.389972
-v 2.243492 -1.584783 -0.431143
-v 2.048200 -1.581983 -0.555832
-v 2.970902 -0.959664 0.000000
-v 2.931756 -1.129655 0.000000
-v 2.896234 -1.319560 0.000000
-v 2.821376 -1.431534 0.000000
-v 2.706963 -1.528854 0.000000
-v 2.534227 -1.617078 0.000000
-v 2.348182 -1.624595 0.000000
-v 2.167167 -1.596326 0.000000
-v 1.920432 -1.567396 0.000000
-v 2.881063 -0.493146 -0.521968
-v 2.736198 -0.346225 -0.659345
-v 2.835437 -0.231101 -0.577890
-v 2.986408 -0.413503 -0.428964
-v 2.910769 -0.638444 -0.431191
-v 2.825540 -0.567578 -0.552597
-v 2.688131 -0.517509 -0.672975
-v 2.647368 -0.611550 -0.669485
-v 2.618307 -0.549092 -0.805491
-v 2.993075 -0.708434 -0.342596
-v 3.045715 -0.767786 -0.261741
-v 3.065544 -0.788768 0.000000
-v 3.107533 -0.691019 -0.264602
-v 3.118124 -0.703925 0.000000
-v 3.053144 -0.609681 -0.326931
-f 3 4 2
-f 1 2 4
-f 5 6 3
-f 4 3 6
-f 6 5 7
-f 7 8 6
-f 8 9 6
-f 10 4 9
-f 6 9 4
-f 11 1 10
-f 4 10 1
-f 10 12 11
-f 11 12 13
-f 13 12 15
-f 12 14 15
-f 15 14 16
-f 16 14 18
-f 14 17 18
-f 18 17 19
-f 19 17 20
-f 22 20 21
-f 20 17 21
-f 21 17 12
-f 17 14 12
-f 12 10 21
-f 10 9 21
-f 8 22 9
-f 21 9 22
-f 8 7 23
-f 22 24 25
-f 25 20 22
-f 20 25 27
-f 25 26 27
-f 26 25 24
-f 20 27 28
-f 20 28 19
-f 28 29 19
-f 30 18 29
-f 19 29 18
-f 18 30 31
-f 18 31 16
-f 31 32 16
-f 33 15 32
-f 16 32 15
-f 34 35 24
-f 24 35 26
-f 35 36 26
-f 26 36 27
-f 36 37 27
-f 27 37 28
-f 37 38 29
-f 39 30 38
-f 29 38 30
-f 40 31 39
-f 30 39 31
-f 32 31 41
-f 31 40 41
-f 41 42 32
-f 32 42 33
-f 44 35 43
-f 34 43 35
-f 45 36 44
-f 35 44 36
-f 37 36 46
-f 36 45 46
-f 47 38 46
-f 37 46 38
-f 48 39 47
-f 38 47 39
-f 49 40 48
-f 39 48 40
-f 50 41 49
-f 40 49 41
-f 42 41 51
-f 41 50 51
-f 52 53 54
-f 54 55 52
-f 52 55 56
-f 56 57 52
-f 52 57 58
-f 7 5 59
-f 59 5 60
-f 60 58 59
-f 56 23 57
-f 7 57 23
-f 23 56 24
-f 24 56 61
-f 24 61 34
-f 61 62 34
-f 34 62 43
-f 62 63 43
-f 64 65 62
-f 63 62 65
-f 24 22 8
-f 23 24 8
-f 59 58 57
-f 7 59 57
-f 55 66 56
-f 66 61 56
-f 66 64 61
-f 61 64 62
-v -2.033406 -0.910030 -0.964220
-v -2.119856 -1.128800 -0.970960
-v -2.306662 -1.116976 -0.961238
-v -2.031698 -1.097344 -0.966701
-v -1.782298 -1.020581 -0.943381
-v -2.462835 -1.305500 -0.966395
-v -2.337617 -1.334842 -0.966761
-v -2.161843 -1.325837 -0.957465
-v -2.042059 -1.312976 -0.940911
-v -1.776785 -1.275107 -0.914703
-v -1.709172 -1.283232 -0.897427
-v -1.456655 -1.295527 -0.894240
-v -2.591357 -1.510845 -0.885470
-v -2.417777 -1.553136 -0.887222
-v -2.223917 -1.541268 -0.879260
-v -2.049879 -1.562369 -0.829319
-v -1.777628 -1.473076 -0.845827
-v -1.778934 -1.550199 -0.776454
-v -1.686329 -1.414405 -0.869373
-v -1.592146 -1.408592 -0.838483
-v -1.552229 -1.555077 -0.735708
-v -1.659758 -1.544361 -0.788181
-v -1.366873 -1.340211 -0.907567
-v -1.376186 -1.661988 -0.718954
-v -1.198513 -1.456102 -0.885435
-v -1.200688 -1.577575 -0.799188
-v -0.953236 -1.545941 -0.899180
-f 67 68 69
-f 68 67 70
-f 70 67 71
-f 72 69 73
-f 73 69 74
-f 69 68 74
-f 75 74 70
-f 74 68 70
-f 71 76 70
-f 75 70 76
-f 76 71 77
-f 77 71 78
-f 79 72 80
-f 72 73 80
-f 81 80 74
-f 80 73 74
-f 82 81 75
-f 81 74 75
-f 75 83 82
-f 82 83 84
-f 83 75 76
-f 83 76 85
-f 76 77 85
-f 78 86 77
-f 85 77 86
-f 86 78 87
-f 87 88 86
-f 86 88 85
-f 88 84 85
-f 85 84 83
-f 90 87 89
-f 87 78 89
-f 90 89 92
-f 89 91 92
-f 92 91 93
-v -0.953236 -1.545941 -0.899180
-v -1.091175 -1.707120 -0.727242
-v -1.226563 -1.655159 -0.687343
-v -1.200688 -1.577575 -0.799188
-v -1.376186 -1.661988 -0.718954
-v -1.089642 -1.757196 -0.685154
-v -1.266738 -1.691944 -0.557922
-v -0.972089 -1.774507 -0.768570
-v -0.812845 -1.785424 -0.768511
-v -0.535144 -1.615983 -0.920556
-v -0.680046 -1.768325 -0.819080
-v -0.564074 -1.789401 -0.803191
-v -0.422877 -1.751200 -0.823423
-v -0.063012 -1.583021 -0.865082
-v -0.078470 -1.688266 -0.800230
-v -0.094135 -1.769086 -0.556924
-v -0.543078 -1.810473 -0.563825
-v -0.977375 -1.793126 -0.498747
-v -1.108758 -1.770749 -0.473033
-v -1.305099 -1.708460 -0.484230
-v -1.397474 -1.693815 -0.570541
-f 94 95 97
-f 95 96 97
-f 97 96 98
-f 100 96 99
-f 96 95 99
-f 95 94 101
-f 101 94 102
-f 103 104 94
-f 102 94 104
-f 104 103 105
-f 105 103 106
-f 103 107 106
-f 106 107 108
-f 110 106 109
-f 106 108 109
-f 110 105 106
-f 105 110 104
-f 111 102 110
-f 104 110 102
-f 99 95 101
-f 100 99 112
-f 99 111 112
-f 112 113 100
-f 100 98 96
-f 98 100 114
-v -1.397474 -1.693815 -0.570541
-v -1.480217 -1.656600 -0.606638
-v -1.376186 -1.661988 -0.718954
-v -1.552229 -1.555077 -0.735708
-v -1.601625 -1.593321 -0.605607
-v -1.519339 -1.653776 -0.501741
-v -1.406693 -1.697325 -0.450399
-v -1.576196 -1.696317 -0.358146
-v -1.386502 -1.718441 -0.350823
-f 115 116 117
-f 117 116 118
-f 118 116 119
-f 119 116 120
-f 121 120 115
-f 120 116 115
-f 119 120 122
-f 122 120 123
-f 120 121 123
-v -1.386502 -1.718441 -0.350823
-v -1.406693 -1.697325 -0.450399
-v -1.305099 -1.708460 -0.484230
-v -0.972514 -1.822778 -0.372649
-v -0.977375 -1.793126 -0.498747
-v -0.543078 -1.810473 -0.563825
-v -0.523838 -1.850065 -0.388007
-v -0.094135 -1.769086 -0.556924
-v -0.112666 -1.806584 -0.383324
-v 0.489819 -1.524947 -0.672392
-v 0.480235 -1.631521 -0.401961
-v 0.446550 -1.672950 0.000000
-v -0.155114 -1.828285 0.000000
-v -0.530369 -1.860806 0.000000
-v -0.956007 -1.825728 0.000000
-v -1.395728 -1.723811 0.000000
-f 124 125 126
-f 124 126 127
-f 129 130 128
-f 127 128 130
-f 131 132 129
-f 130 129 132
-f 133 134 131
-f 132 131 134
-f 134 135 132
-f 135 136 132
-f 132 136 130
-f 136 137 130
-f 130 137 127
-f 137 138 127
-f 138 139 127
-f 127 139 124
-v -1.386502 -1.718441 -0.350823
-v -1.395728 -1.723811 0.000000
-v -1.610025 -1.711571 0.000000
-v -1.576196 -1.696317 -0.358146
-v -1.799827 -1.753136 0.000000
-v -1.764045 -1.764987 -0.406586
-v -1.747790 -1.667608 -0.606340
-v -1.601625 -1.593321 -0.605607
-v -1.778934 -1.550199 -0.776454
-v -1.659758 -1.544361 -0.788181
-v -1.552229 -1.555077 -0.735708
-v -2.734184 -1.717948 -0.749581
-v -2.591357 -1.510845 -0.885470
-v -2.417777 -1.553136 -0.887222
-v -2.508885 -1.719933 -0.721675
-v -2.223917 -1.541268 -0.879260
-v -2.267049 -1.753901 -0.662106
-v -2.049879 -1.562369 -0.829319
-v -2.037371 -1.736360 -0.656787
-v -1.883160 -1.829718 -0.401567
-v -1.936032 -1.829617 -0.488916
-v -2.027242 -1.813012 -0.555232
-v -2.126375 -1.866497 -0.502895
-v -2.176551 -1.873816 -0.445782
-v -2.317557 -1.874200 -0.470587
-v -2.446375 -1.893261 -0.494110
-v -2.466779 -1.857679 -0.570461
-v -2.547737 -1.833025 -0.609321
-v -2.647220 -1.844010 -0.594347
-v -2.699966 -1.850397 -0.570070
-v -2.811581 -1.798210 -0.712737
-v -2.941731 -1.787431 -0.442574
-v -2.709403 -1.879947 -0.508775
-v -2.684452 -1.891207 -0.447388
-v -2.892162 -1.781087 0.000000
-v -2.614084 -1.905005 -0.404925
-v -2.656867 -1.853045 0.000000
-v -2.503818 -1.909806 -0.431456
-v -2.348005 -1.869142 0.000000
-v -2.147113 -1.903198 -0.362462
-v -2.062725 -1.884246 -0.307336
-v -2.092921 -1.839622 0.000000
-v -1.946306 -1.872735 -0.344251
-f 142 143 141
-f 140 141 143
-f 145 143 144
-f 143 142 144
-f 147 143 146
-f 145 146 143
-f 147 146 148
-f 148 149 147
-f 147 149 150
-f 151 152 154
-f 152 153 154
-f 156 154 155
-f 154 153 155
-f 156 155 158
-f 155 157 158
-f 157 148 158
-f 158 148 146
-f 159 160 145
-f 146 145 160
-f 158 146 161
-f 160 161 146
-f 162 156 161
-f 158 161 156
-f 164 156 163
-f 156 162 163
-f 164 165 156
-f 165 166 156
-f 154 156 167
-f 156 166 167
-f 151 154 168
-f 154 167 168
-f 168 169 151
-f 151 169 170
-f 172 173 171
-f 171 173 174
-f 173 175 174
-f 174 175 176
-f 176 175 178
-f 175 177 178
-f 164 178 165
-f 178 177 165
-f 164 163 178
-f 163 179 178
-f 180 181 179
-f 178 179 181
-f 181 180 144
-f 180 182 144
-f 145 144 159
-f 144 182 159
-v -1.089642 -1.757196 -0.685154
-v -0.972089 -1.774507 -0.768570
-v -0.977375 -1.793126 -0.498747
-v -0.812845 -1.785424 -0.768511
-f 183 184 185
-f 186 185 184
-v -3.139394 -1.687482 -0.638546
-v -3.120907 -1.707924 -0.431829
-v -3.314868 -1.599081 -0.439626
-v -3.304804 -1.582192 -0.643445
-v -3.442085 -1.484120 -0.406377
-v -3.387254 -1.486027 -0.672861
-v -3.557869 -1.325941 -0.378030
-v -3.533910 -1.330455 -0.568246
-v -3.639586 -1.140102 -0.333800
-v -3.631179 -1.157838 -0.505610
-v -3.686518 -0.955181 -0.320349
-v -3.667859 -0.964867 -0.464702
-v -3.676599 -0.729578 -0.330724
-v -3.665774 -0.734080 -0.446286
-v -3.616627 -0.350374 -0.338492
-v -3.595973 -0.346391 -0.426453
-v -3.570243 -0.060093 -0.344854
-v -3.529709 -0.065998 -0.437217
-v -3.535416 0.191408 -0.338478
-v -3.516840 0.149002 -0.430359
-v -3.536654 0.442277 -0.322000
-v -3.552320 0.219613 0.000000
-v -3.544507 0.467147 0.000000
-v -3.583763 -0.052271 0.000000
-v -3.637643 -0.356271 0.000000
-v -3.673607 -0.720796 0.000000
-v -3.678793 -0.926816 0.000000
-v -3.650579 -1.142448 0.000000
-v -3.522115 -1.366623 0.000000
-v -3.417689 -1.494416 0.000000
-v -3.271035 -1.609292 0.000000
-v -3.110300 -1.691720 0.000000
-v -2.941731 -1.787431 -0.442574
-v -2.892162 -1.781087 0.000000
-v -3.470778 -0.078218 -0.546398
-v -3.526766 -0.317542 -0.560837
-v -3.569993 -0.731989 -0.649435
-v -3.550120 -0.984868 -0.675228
-v -3.492599 -1.180646 -0.692282
-v -3.335942 -1.365685 -0.724590
-v -3.415655 -0.308965 -0.671045
-v -3.283698 -0.730967 -0.793898
-v -3.438226 -0.721479 -0.728141
-v -3.355398 -0.969157 -0.766213
-v -3.279790 -1.162072 -0.784602
-v -3.251210 -0.948205 -0.819868
-v -3.566995 0.656967 0.000000
-v -3.556552 0.704883 -0.280630
-v -3.599077 0.796217 0.000000
-v -3.578170 0.837714 -0.288502
-f 188 189 187
-f 187 189 190
-f 192 190 191
-f 190 189 191
-f 191 193 192
-f 192 193 194
-f 194 193 196
-f 193 195 196
-f 196 195 198
-f 195 197 198
-f 197 199 198
-f 198 199 200
-f 202 200 201
-f 200 199 201
-f 201 203 202
-f 202 203 204
-f 205 206 203
-f 204 203 206
-f 206 205 207
-f 205 208 207
-f 207 208 209
-f 208 205 210
-f 205 203 210
-f 201 199 211
-f 211 199 212
-f 199 197 212
-f 212 197 213
-f 213 197 214
-f 197 195 214
-f 215 214 193
-f 214 195 193
-f 191 216 193
-f 215 193 216
-f 189 217 191
-f 216 191 217
-f 189 188 217
-f 217 188 218
-f 220 218 219
-f 218 188 219
-f 203 201 210
-f 210 201 211
-f 206 221 204
-f 202 204 222
-f 204 221 222
-f 223 200 222
-f 202 222 200
-f 224 198 223
-f 200 223 198
-f 198 224 196
-f 224 225 196
-f 226 194 225
-f 196 225 194
-f 194 226 192
-f 227 228 229
-f 221 227 222
-f 222 227 223
-f 227 229 223
-f 230 224 229
-f 223 229 224
-f 225 224 231
-f 224 230 231
-f 225 231 226
-f 231 230 232
-f 234 207 233
-f 207 209 233
-f 235 236 233
-f 234 233 236
-f 230 229 232
-f 232 229 228
-v 1.734568 -2.965876 -0.986396
-v 1.718315 -2.775468 -0.921796
-v 1.771416 -2.769024 -0.946100
-v 1.806371 -2.949735 -0.984058
-v 1.911792 -2.895773 -0.950117
-v 1.880971 -2.733242 -0.890200
-v 1.960643 -2.712860 -0.900890
-v 2.021366 -2.881725 -0.945561
-v 1.994078 -2.713047 -0.824553
-v 2.057496 -2.887282 -0.844225
-v 1.735077 -3.022732 -0.972751
-v 1.802387 -3.089615 -0.961851
-v 1.721745 -3.116887 -0.979111
-v 1.811797 -3.135641 -0.933096
-f 237 238 240
-f 238 239 240
-f 244 241 243
-f 241 242 243
-f 246 244 245
-f 244 243 245
-f 237 240 247
-f 247 248 249
-f 249 248 250
-v 1.970051 -3.141862 -1.065178
-v 2.110033 -3.148257 -1.068816
-v 2.148880 -3.221616 -1.076203
-v 2.031262 -3.256709 -1.111122
-v 2.247981 -3.342804 -1.127459
-v 2.138771 -3.397683 -1.214726
-v 2.343303 -3.507846 -1.195262
-v 2.254361 -3.550931 -1.235118
-v 2.025468 -3.556842 -1.204841
-v 1.981186 -3.441282 -1.180532
-v 1.926176 -3.288880 -1.093746
-v 1.886443 -3.191742 -1.047318
-v 2.281229 -3.338250 -1.043475
-v 2.201939 -3.226457 -0.996503
-v 2.170039 -3.134504 -0.978866
-v 2.091539 -3.032437 -0.947029
-v 2.113587 -3.011851 -0.851648
-v 2.217369 -3.156093 -0.888927
-v 1.841888 -3.246003 -1.014774
-v 1.865135 -3.353827 -1.054981
-v 1.919391 -3.487078 -1.110869
-v 1.980621 -3.043895 -0.964237
-f 251 252 254
-f 252 253 254
-f 254 253 256
-f 253 255 256
-f 255 257 256
-f 256 257 258
-f 259 260 258
-f 258 260 256
-f 256 260 254
-f 260 261 254
-f 254 261 251
-f 261 262 251
-f 255 253 263
-f 263 253 264
-f 264 253 265
-f 253 252 265
-f 268 265 267
-f 265 266 267
-f 261 270 262
-f 269 262 270
-f 261 260 270
-f 271 270 260
-f 260 259 271
-f 272 265 252
-v 2.021366 -2.881725 -0.945561
-v 2.057496 -2.887282 -0.844225
-v 2.113587 -3.011851 -0.851648
-v 2.091539 -3.032437 -0.947029
-v 1.911792 -2.895773 -0.950117
-v 1.848272 -2.927260 -0.996966
-v 1.830669 -2.736121 -0.903313
-v 1.880971 -2.733242 -0.890200
-v 1.806371 -2.949735 -0.984058
-v 1.771416 -2.769024 -0.946100
-v 1.705953 -3.006628 -0.832630
-v 1.735077 -3.022732 -0.972751
-v 1.721745 -3.116887 -0.979111
-v 1.709173 -3.133145 -0.807940
-v 1.811797 -3.135641 -0.933096
-v 1.806407 -3.173343 -0.834455
-f 273 274 276
-f 274 275 276
-f 278 279 277
-f 277 279 280
-f 279 278 282
-f 281 282 278
-f 285 286 284
-f 283 284 286
-f 285 287 286
-f 286 287 288
-v 1.806407 -3.173343 -0.834455
-v 1.811797 -3.135641 -0.933096
-v 1.841888 -3.246003 -1.014774
-v 1.832790 -3.296508 -0.865078
-v 1.933899 -3.546253 -0.912438
-v 1.919391 -3.487078 -1.110869
-v 2.025468 -3.556842 -1.204841
-v 2.078928 -3.584991 -0.917088
-v 1.865135 -3.353827 -1.054981
-v 1.839523 -3.405292 -0.883488
-f 291 292 290
-f 289 290 292
-f 296 293 295
-f 293 294 295
-f 297 298 291
-f 292 291 298
-f 293 298 294
-f 298 297 294
-v 1.741854 -3.114181 -0.700705
-v 1.709173 -3.133145 -0.807940
-v 1.806407 -3.173343 -0.834455
-v 1.900481 -3.131932 -0.728621
-f 302 299 301
-f 299 300 301
-v 1.832790 -3.296508 -0.865078
-v 1.929730 -3.298418 -0.689538
-v 1.900481 -3.131932 -0.728621
-v 1.806407 -3.173343 -0.834455
-v 1.839523 -3.405292 -0.883488
-v 1.941325 -3.434803 -0.701314
-v 1.933899 -3.546253 -0.912438
-v 2.002745 -3.523420 -0.688103
-v 2.078928 -3.584991 -0.917088
-v 2.126553 -3.549679 -0.701005
-v 2.197935 -3.583948 -0.936437
-v 2.244147 -3.545557 -0.732888
-f 304 305 303
-f 303 305 306
-f 304 303 308
-f 303 307 308
-f 309 310 307
-f 308 307 310
-f 309 311 310
-f 310 311 312
-f 311 313 312
-f 312 313 314
-v 1.705953 -3.006628 -0.832630
-v 1.709173 -3.133145 -0.807940
-v 1.741854 -3.114181 -0.700705
-v 1.776024 -2.980086 -0.707575
-v 1.736425 -2.743683 -0.736866
-v 1.700797 -2.794792 -0.824250
-v 2.021366 -2.881725 -0.945561
-v 2.091539 -3.032437 -0.947029
-v 1.980621 -3.043895 -0.964237
-v 1.911792 -2.895773 -0.950117
-f 318 315 317
-f 315 316 317
-f 319 320 318
-f 318 320 315
-f 322 323 321
-f 321 323 324
-v 1.898573 -3.068274 -0.994338
-v 1.980621 -3.043895 -0.964237
-v 2.110033 -3.148257 -1.068816
-v 1.970051 -3.141862 -1.065178
-f 327 328 326
-f 325 326 328
-v 1.980621 -3.043895 -0.964237
-v 1.898573 -3.068274 -0.994338
-v 1.848272 -2.927260 -0.996966
-v 1.911792 -2.895773 -0.950117
-v 1.855134 -3.083228 -0.986129
-v 1.806371 -2.949735 -0.984058
-f 329 330 332
-f 330 331 332
-f 331 330 334
-f 330 333 334
-v 1.855134 -3.083228 -0.986129
-v 1.898573 -3.068274 -0.994338
-v 1.970051 -3.141862 -1.065178
-v 1.886443 -3.191742 -1.047318
-v 1.811797 -3.135641 -0.933096
-v 1.841888 -3.246003 -1.014774
-f 337 338 336
-f 335 336 338
-f 340 339 338
-f 339 335 338
-v 1.802387 -3.089615 -0.961851
-v 1.855134 -3.083228 -0.986129
-v 1.811797 -3.135641 -0.933096
-v 1.735077 -3.022732 -0.972751
-v 1.806371 -2.949735 -0.984058
-v 1.705953 -3.006628 -0.832630
-v 1.734568 -2.965876 -0.986396
-f 341 342 343
-f 345 342 344
-f 344 342 341
-f 344 346 347
-v 2.217369 -3.156093 -0.888927
-v 2.113587 -3.011851 -0.851648
-v 2.073690 -3.020848 -0.782654
-v 2.187495 -3.161535 -0.800285
-f 348 349 351
-f 349 350 351
-v 2.113587 -3.011851 -0.851648
-v 2.057496 -2.887282 -0.844225
-v 2.001343 -2.847715 -0.762517
-v 2.073690 -3.020848 -0.782654
-f 354 355 353
-f 352 353 355
-v 2.170039 -3.134504 -0.978866
-v 2.217369 -3.156093 -0.888927
-v 2.236407 -3.220054 -0.892030
-v 2.201939 -3.226457 -0.996503
-v 2.247981 -3.342804 -1.127459
-v 2.281229 -3.338250 -1.043475
-v 2.386827 -3.462222 -1.136480
-v 2.343303 -3.507846 -1.195262
-v 2.327021 -3.352317 -0.958234
-v 2.440236 -3.509564 -1.019417
-v 2.309358 -3.345468 -0.801508
-v 2.377814 -3.484109 -0.800332
-v 2.235942 -3.243103 -0.823955
-v 2.187495 -3.161535 -0.800285
-f 356 357 359
-f 357 358 359
-f 363 360 362
-f 360 361 362
-f 365 362 364
-f 362 361 364
-f 358 364 359
-f 364 361 359
-f 365 364 367
-f 364 366 367
-f 366 364 368
-f 364 358 368
-f 369 368 357
-f 368 358 357
-v 1.741854 -3.114181 -0.700705
-v 1.900481 -3.131932 -0.728621
-v 1.857471 -2.950722 -0.669988
-v 1.776024 -2.980086 -0.707575
-v 1.998099 -3.039955 -0.718855
-v 1.945632 -2.876710 -0.703118
-v 2.073690 -3.020848 -0.782654
-v 2.001343 -2.847715 -0.762517
-v 1.884318 -2.724404 -0.701999
-v 1.841282 -2.716008 -0.708009
-v 1.972647 -2.728848 -0.772496
-f 370 371 372
-f 370 372 373
-f 371 374 372
-f 374 375 372
-f 377 375 376
-f 374 376 375
-f 379 372 378
-f 372 375 378
-f 378 375 380
-f 375 377 380
-v 1.900481 -3.131932 -0.728621
-v 1.929730 -3.298418 -0.689538
-v 2.059222 -3.230076 -0.674936
-v 1.998099 -3.039955 -0.718855
-v 2.187495 -3.161535 -0.800285
-v 2.073690 -3.020848 -0.782654
-v 1.941325 -3.434803 -0.701314
-v 2.107985 -3.363571 -0.677007
-v 2.235942 -3.243103 -0.823955
-f 384 381 383
-f 381 382 383
-f 383 385 384
-f 384 385 386
-f 387 388 382
-f 382 388 383
-f 389 385 388
-f 383 388 385
-v 1.776024 -2.980086 -0.707575
-v 1.857471 -2.950722 -0.669988
-v 1.841282 -2.716008 -0.708009
-v 1.736425 -2.743683 -0.736866
-f 392 393 391
-f 390 391 393
-v 2.107985 -3.363571 -0.677007
-v 1.941325 -3.434803 -0.701314
-v 2.002745 -3.523420 -0.688103
-v 2.126553 -3.549679 -0.701005
-v 2.235942 -3.243103 -0.823955
-v 2.309358 -3.345468 -0.801508
-v 2.244147 -3.545557 -0.732888
-v 2.377814 -3.484109 -0.800332
-v 2.440236 -3.509564 -1.019417
-v 2.197935 -3.583948 -0.936437
-v 2.078928 -3.584991 -0.917088
-v 2.025468 -3.556842 -1.204841
-v 2.254361 -3.550931 -1.235118
-f 394 395 396
-f 397 394 396
-f 398 394 399
-f 397 400 394
-f 399 394 401
-f 401 394 400
-f 403 402 400
-f 402 401 400
-f 406 403 405
-f 404 405 403
-v -2.591357 -1.510845 -0.885470
-v -2.734184 -1.717948 -0.749581
-v -2.837147 -1.791733 -0.921563
-v -2.687162 -1.539807 -0.988048
-v -2.918293 -1.904184 -1.004659
-v -2.765069 -1.561164 -1.084313
-v -3.010917 -1.884498 -1.083510
-v -2.862576 -1.546894 -1.117139
-v -3.117476 -1.866892 -1.108034
-v -2.955052 -1.496840 -1.128812
-v -3.232610 -1.834299 -1.087832
-v -3.063133 -1.440555 -1.090926
-v -3.365990 -1.485170 -0.888076
-v -3.490520 -1.760417 -0.903104
-v -3.498521 -1.762078 -0.762472
-v -3.387254 -1.486027 -0.672861
-v -3.335942 -1.365685 -0.724590
-v -3.319817 -1.365015 -0.886015
-v -3.078699 -2.553982 -1.046834
-v -3.162498 -2.556375 -1.058409
-v -3.177824 -2.279173 -1.047580
-v -3.068444 -2.260195 -1.035070
-v -3.169489 -2.110039 -1.076796
-v -3.047974 -2.109628 -1.063497
-v -3.207447 -2.103206 -1.071366
-v -3.251541 -2.564050 -1.023627
-v -3.281816 -2.305055 -1.001878
-v -3.327526 -2.075729 -1.005328
-v -3.357996 -1.811803 -0.975625
-v -3.347304 -2.573628 -0.955211
-v -3.389388 -2.305625 -0.950348
-v -3.451965 -2.077314 -0.931974
-v -3.022819 -2.522240 -0.979148
-v -3.007483 -2.270712 -0.984279
-v -2.969687 -2.097941 -0.982836
-v -2.892438 -1.950810 -0.878120
-v -2.981187 -2.142718 -0.858353
-v -3.030605 -2.311222 -0.884330
-v -3.046610 -2.510881 -0.900772
-v -2.964215 -1.978727 -0.776572
-v -3.040398 -2.156239 -0.808208
-v -3.120761 -2.157770 -0.766432
-v -3.144012 -2.333635 -0.829994
-v -3.066022 -1.953125 -0.719516
-v -3.211005 -1.850398 -0.700723
-v -3.253309 -2.137354 -0.760713
-v -3.235873 -2.335338 -0.820588
-v -3.240554 -2.555467 -0.856262
-v -3.132772 -2.528669 -0.848639
-v -3.304804 -1.582192 -0.643445
-v -3.381262 -1.828189 -0.697034
-v -3.139394 -1.687482 -0.638546
-v -3.422698 -2.070796 -0.773898
-v -3.339489 -2.328145 -0.827572
-v -3.297886 -2.549020 -0.861657
-v -3.463753 -2.079892 -0.844667
-v -3.412068 -2.356105 -0.865813
-v -3.372066 -2.569159 -0.904785
-v -3.342096 -1.533989 -0.921628
-v 1.953911 -2.462233 -0.830594
-v 1.930747 -2.463535 -0.894743
-v 1.985330 -2.221319 -0.893145
-v 2.024530 -2.195334 -0.811284
-v 2.013095 -2.051912 -0.911043
-v 2.047696 -2.050138 -0.814712
-v 2.021591 -1.755289 -0.912093
-v 2.053108 -1.738285 -0.824853
-v 2.036036 -1.579080 -0.967151
-v 2.059844 -1.561331 -0.858957
-v 1.678986 -2.513137 -0.891745
-v 1.737623 -2.485017 -0.918334
-v 1.771416 -2.769024 -0.946100
-v 1.718315 -2.775468 -0.921796
-v 1.648793 -2.280014 -0.929365
-v 1.710406 -2.272223 -0.954296
-v 1.624900 -2.087301 -0.963391
-v 1.720031 -2.105568 -0.971354
-v 1.572979 -1.827591 -0.985823
-v 1.717145 -1.809530 -1.004092
-v 1.541750 -1.643613 -1.014190
-v 1.650318 -1.645881 -1.053347
-v 1.586321 -2.273752 -0.880969
-v 1.655948 -2.520927 -0.844269
-v 1.529305 -2.092083 -0.887353
-v 1.508714 -1.808578 -0.934359
-v 1.480629 -1.640132 -0.953447
-v 1.601290 -2.267132 -0.787696
-v 1.663494 -2.485963 -0.790773
-v 1.544087 -2.080722 -0.786432
-v 1.473886 -1.818947 -0.799576
-v 1.451825 -1.576856 -0.702758
-v 1.677597 -2.237953 -0.696318
-v 1.756349 -2.446399 -0.705428
-v 1.643403 -2.076583 -0.689565
-v 1.596751 -1.722028 -0.684655
-v 1.599889 -1.595526 -0.623185
-v 1.994078 -2.713047 -0.824553
-v 1.960643 -2.712860 -0.900890
-v 1.864064 -2.469953 -0.935601
-v 1.880971 -2.733242 -0.890200
-v 1.941767 -1.759457 -0.997454
-v 1.937009 -1.625419 -1.026843
-v 1.918641 -2.083654 -1.001275
-v 1.906370 -2.282284 -0.964887
-v 1.801127 -2.484690 -0.938593
-v 1.830669 -2.736121 -0.903313
-v 1.804927 -1.581954 -1.089198
-v 1.818846 -1.756976 -1.023593
-v 1.839224 -2.109267 -0.998351
-v 1.818266 -2.313852 -0.968652
-f 409 410 408
-f 407 408 410
-f 412 410 411
-f 410 409 411
-f 411 413 412
-f 412 413 414
-f 416 414 415
-f 414 413 415
-f 418 416 417
-f 416 415 417
-f 419 420 422
-f 420 421 422
-f 422 423 419
-f 423 424 419
-f 425 426 428
-f 426 427 428
-f 427 429 428
-f 428 429 430
-f 415 413 429
-f 430 429 413
-f 427 431 429
-f 429 431 415
-f 431 417 415
-f 426 432 427
-f 432 433 427
-f 434 431 433
-f 427 433 431
-f 435 417 434
-f 431 434 417
-f 437 433 436
-f 432 436 433
-f 438 434 437
-f 433 437 434
-f 420 435 438
-f 434 438 435
-f 428 440 425
-f 439 425 440
-f 440 428 441
-f 428 430 441
-f 413 411 430
-f 441 430 411
-f 442 411 409
-f 443 441 442
-f 411 442 441
-f 441 443 440
-f 443 444 440
-f 440 444 439
-f 444 445 439
-f 442 446 443
-f 446 447 443
-f 443 447 444
-f 444 447 449
-f 447 448 449
-f 450 448 446
-f 446 448 447
-f 451 452 450
-f 450 452 448
-f 452 453 448
-f 448 453 449
-f 454 455 453
-f 449 453 455
-f 422 421 456
-f 456 421 457
-f 456 457 458
-f 457 451 458
-f 452 451 459
-f 451 457 459
-f 459 460 452
-f 452 460 453
-f 453 460 454
-f 460 461 454
-f 462 459 421
-f 457 421 459
-f 462 463 459
-f 459 463 460
-f 460 463 461
-f 463 464 461
-f 462 438 463
-f 438 437 463
-f 436 464 437
-f 463 437 464
-f 421 420 462
-f 420 438 462
-f 419 465 420
-f 435 420 465
-f 469 466 468
-f 466 467 468
-f 468 470 469
-f 469 470 471
-f 471 470 473
-f 470 472 473
-f 474 475 472
-f 473 472 475
-f 478 479 477
-f 476 477 479
-f 476 480 477
-f 480 481 477
-f 480 482 481
-f 482 483 481
-f 483 482 485
-f 484 485 482
-f 485 484 487
-f 486 487 484
-f 489 488 476
-f 488 480 476
-f 482 480 490
-f 490 480 488
-f 490 491 482
-f 491 484 482
-f 484 491 486
-f 492 486 491
-f 488 489 493
-f 493 489 494
-f 490 488 495
-f 495 488 493
-f 491 490 496
-f 496 490 495
-f 492 491 497
-f 497 491 496
-f 499 498 494
-f 498 493 494
-f 495 493 500
-f 500 493 498
-f 501 496 500
-f 496 495 500
-f 497 496 502
-f 502 496 501
-f 504 467 503
-f 467 466 503
-f 506 505 504
-f 505 467 504
-f 474 472 508
-f 507 508 472
-f 509 507 470
-f 507 472 470
-f 468 467 510
-f 510 467 505
-f 510 509 468
-f 509 470 468
-f 477 511 478
-f 478 511 512
-f 505 506 511
-f 511 506 512
-f 513 514 487
-f 485 487 514
-f 514 515 485
-f 483 485 515
-f 515 516 483
-f 481 483 516
-f 481 516 477
-f 477 516 511
-f 514 513 507
-f 513 508 507
-f 515 514 509
-f 514 507 509
-f 516 515 510
-f 515 509 510
-f 510 505 516
-f 511 516 505
-v 1.980621 -3.043895 -0.964237
-v 2.091539 -3.032437 -0.947029
-v 2.170039 -3.134504 -0.978866
-v 2.197935 -3.583948 -0.936437
-v 2.254361 -3.550931 -1.235118
-v 2.343303 -3.507846 -1.195262
-v 2.386827 -3.462222 -1.136480
-v 2.440236 -3.509564 -1.019417
-f 517 518 519
-f 521 522 520
-f 522 523 520
-f 520 523 524
-v 1.841282 -2.716008 -0.708009
-v 1.756349 -2.446399 -0.705428
-v 1.663494 -2.485963 -0.790773
-v 1.736425 -2.743683 -0.736866
-v 1.740323 -1.679830 -0.664098
-v 1.721211 -1.590185 -0.601932
-v 1.599889 -1.595526 -0.623185
-v 1.596751 -1.722028 -0.684655
-v 1.747671 -2.067518 -0.638841
-v 1.643403 -2.076583 -0.689565
-v 1.772999 -2.230292 -0.644940
-v 1.677597 -2.237953 -0.696318
-v 1.655948 -2.520927 -0.844269
-v 1.700797 -2.794792 -0.824250
-v 2.057496 -2.887282 -0.844225
-v 1.994078 -2.713047 -0.824553
-v 1.972647 -2.728848 -0.772496
-v 2.001343 -2.847715 -0.762517
-v 1.828658 -2.477348 -0.673470
-v 1.884318 -2.724404 -0.701999
-v 1.947264 -2.443232 -0.732587
-v 1.921881 -2.157616 -0.692678
-v 1.953911 -2.462233 -0.830594
-v 1.991892 -1.748400 -0.652770
-v 1.963153 -1.588839 -0.612861
-v 1.945206 -2.015769 -0.672724
-v 2.053108 -1.738285 -0.824853
-v 2.059844 -1.561331 -0.858957
-v 2.047696 -2.050138 -0.814712
-v 2.024530 -2.195334 -0.811284
-v 2.111557 -1.376942 -0.896570
-v 2.141273 -1.234642 -0.941254
-v 2.158051 -1.209613 -0.783941
-v 2.126237 -1.330172 -0.721011
-v 2.071448 -1.410118 -1.006192
-v 2.099566 -1.259996 -1.055763
-v 1.974215 -1.469208 -1.068951
-v 1.966698 -1.228160 -1.153716
-v 1.801794 -1.465464 -1.129277
-v 1.805207 -1.268427 -1.165317
-v 1.612396 -1.485728 -1.099731
-v 1.601721 -1.262359 -1.141420
-v 1.516700 -1.453050 -1.068516
-v 1.497480 -1.283201 -1.088258
-v 1.454817 -1.430228 -0.976569
-v 1.430817 -1.301205 -1.024924
-v 1.328862 -1.352627 -0.758733
-v 1.348219 -1.282064 -0.845204
-v 2.177450 -1.127765 -0.974416
-v 2.180012 -1.130557 -0.821812
-v 2.148553 -1.103067 -1.065410
-v 2.024692 -1.074646 -1.172465
-v 1.838895 -1.087204 -1.201408
-v 1.645819 -1.087442 -1.173773
-v 1.524407 -1.125312 -1.142248
-v 1.438439 -1.148029 -1.098069
-v 1.310865 -1.136322 -0.914838
-v 2.079600 -1.473377 -0.654997
-v 2.048200 -1.581983 -0.555832
-v 1.804927 -1.581954 -1.089198
-v 1.650318 -1.645881 -1.053347
-v 1.937009 -1.625419 -1.026843
-v 2.036036 -1.579080 -0.967151
-v 2.222082 -0.957342 -1.014137
-v 2.229345 -0.992723 -0.862826
-v 1.635139 -0.965221 -1.184968
-v 1.867657 -0.920633 -1.206933
-v 2.058189 -0.931238 -1.163518
-v 2.158585 -0.955809 -1.113647
-v 1.480629 -1.640132 -0.953447
-v 1.451825 -1.576856 -0.702758
-v 1.337875 -0.945716 -1.021299
-v 1.428883 -0.986690 -1.133905
-v 1.541750 -1.643613 -1.014190
-v 1.536037 -0.985876 -1.185597
-v 3.233975 2.059193 -0.072431
-v 3.009101 1.971604 -0.034220
-v 2.985371 1.982663 0.000000
-v 3.247406 2.073333 0.000000
-v 3.252224 2.026347 -0.148215
-v 3.036361 1.913989 -0.169838
-v 3.276333 1.863773 -0.294266
-v 3.058366 1.773346 -0.297337
-v 3.337545 1.748927 -0.340210
-v 3.086666 1.632991 -0.338863
-v 3.377233 1.587800 -0.400781
-v 3.115383 1.492390 -0.380228
-v 3.473410 1.366149 -0.454658
-v 3.163181 1.209972 -0.462438
-v 3.528445 1.060127 -0.489443
-v 3.189664 0.907503 -0.500122
-v 3.559394 0.706516 -0.452535
-v 3.280681 0.510802 -0.499434
-v 3.619650 0.472046 -0.391742
-v 3.321825 0.266690 -0.465750
-v 3.641195 0.407454 -0.362198
-v 3.360040 0.165487 -0.412685
-v 3.674710 0.338839 -0.307840
-v 3.378799 0.073736 -0.355362
-v 3.700363 0.265794 -0.240762
-v 3.438950 -0.082580 -0.257015
-v 3.737014 0.181837 -0.176819
-v 3.514981 -0.121886 -0.187589
-v 3.731689 0.186391 0.000000
-v 3.486028 -0.141683 0.000000
-v 3.716360 2.343387 0.000000
-v 3.727093 2.308406 -0.150049
-v 3.458300 2.151656 -0.102662
-v 3.454971 2.169877 0.000000
-v 4.120842 0.627141 -0.185461
-v 4.126565 0.642027 0.000000
-v 3.929251 0.411689 0.000000
-v 3.955635 0.432417 -0.197586
-v 3.889626 0.475277 -0.247365
-v 4.105198 0.672581 -0.300001
-v 3.861841 0.560638 -0.311961
-v 4.068249 0.798926 -0.400813
-v 3.849352 0.664451 -0.387198
-v 4.041657 1.039756 -0.496922
-v 3.823137 0.853054 -0.461519
-v 3.988510 1.297806 -0.539537
-v 3.747724 1.184933 -0.518662
-v 3.886058 1.550141 -0.504830
-v 3.650974 1.463740 -0.478617
-v 3.881998 1.764428 -0.476337
-v 3.590526 1.701090 -0.411994
-v 3.814876 1.968416 -0.443000
-v 3.541188 1.849183 -0.386366
-v 3.758215 2.206683 -0.323051
-v 3.479418 1.978250 -0.317478
-v 3.745669 2.266001 -0.241930
-v 3.460196 2.103494 -0.180368
-v 3.118124 -0.703925 0.000000
-v 3.107533 -0.691019 -0.264602
-v 3.342159 -0.384674 -0.201349
-v 3.335210 -0.375755 0.000000
-v 2.361089 1.766660 -0.202595
-v 2.339597 1.807702 0.000000
-v 2.723503 1.898839 0.000000
-v 2.715712 1.828219 -0.167709
-v 2.406969 1.645328 -0.341479
-v 2.738132 1.687333 -0.295046
-v 2.519027 1.485931 -0.422962
-v 2.775680 1.538710 -0.352829
-v 2.553871 1.284278 -0.512335
-v 2.815366 1.377583 -0.413399
-v 2.637461 1.017260 -0.581611
-v 2.854291 1.093951 -0.494650
-v 2.747937 0.712253 -0.615674
-v 2.948387 0.783357 -0.515058
-v 2.811504 0.469098 -0.657443
-v 3.061090 0.397226 -0.574193
-v 2.898733 0.271916 -0.651298
-v 2.919870 0.084875 -0.642460
-v 3.136321 0.171237 -0.539896
-v 2.953029 -0.127690 -0.520499
-v 3.166160 0.021310 -0.457261
-v 2.986408 -0.413503 -0.428964
-v 3.199571 -0.153739 -0.380150
-v 3.053144 -0.609681 -0.326931
-v 3.286426 -0.300744 -0.276331
-v 2.835437 -0.231101 -0.577890
-v 2.753156 0.400829 -0.713141
-v 2.679445 0.687427 -0.720573
-v 2.790681 0.219187 -0.718263
-v 2.790657 0.044324 -0.717488
-v 2.736198 -0.346225 -0.659345
-v 2.743995 -0.129852 -0.718277
-v 2.514162 0.988713 -0.674527
-v 2.482917 0.997637 -0.702425
-v 2.396355 1.242239 -0.597722
-v 2.618307 -0.549092 -0.805491
-v 2.539200 -0.727778 -0.750475
-v 2.410367 -0.777999 -0.841105
-v 2.543372 -0.548031 -0.937182
-v 2.690576 -0.368057 -0.819343
-v 2.594499 -0.422948 -0.981263
-v 2.702577 -0.197406 -0.795611
-v 2.607430 -0.208248 -0.974218
-v 2.734183 0.038769 -0.865810
-v 2.649413 0.031535 -1.024796
-v 2.731512 0.219003 -0.891585
-v 2.668936 0.206182 -1.014371
-v 2.706960 0.393597 -0.849582
-v 2.616001 0.447717 -0.960748
-v 2.604217 0.728827 -0.769671
-v 2.570400 0.738683 -0.830405
-v 2.688131 -0.517509 -0.672975
-v 2.542439 0.999928 -0.648592
-v 2.132390 1.755821 -0.180271
-v 2.128139 1.788397 0.000000
-v 2.183003 1.654070 -0.341767
-v 2.301359 1.397721 -0.546015
-v 2.292449 -0.871852 -0.882400
-v 2.245624 -0.864372 -0.995778
-v 2.346081 -0.745350 -1.013296
-v 2.096552 1.678482 -0.326810
-v 2.069379 1.727818 -0.212746
-v 2.189848 1.468992 -0.517501
-v 2.266003 1.273253 -0.663332
-v 2.347317 1.066114 -0.758763
-v 2.399389 0.782091 -0.915279
-v 2.448969 0.529858 -1.037335
-v 2.495354 0.250522 -1.132081
-v 2.500490 -0.035029 -1.170179
-v 2.452588 -0.244072 -1.138797
-v 2.439827 -0.395385 -1.131324
-v 2.384638 -0.591919 -1.043058
-v 2.013534 -0.662303 -1.191491
-v 2.108912 -0.357128 -1.259691
-v 2.042206 1.777154 0.000000
-v 1.807583 1.756546 -0.177627
-v 1.794465 1.787719 0.000000
-v 2.136269 -0.187666 -1.278057
-v 2.141790 -0.055306 -1.295565
-v 2.081700 0.283249 -1.259461
-v 2.023441 0.529338 -1.144399
-v 1.975941 0.827957 -1.018423
-v 1.958254 1.130271 -0.861813
-v 1.859443 1.450393 -0.632222
-v 1.821946 1.618209 -0.403751
-v 1.798719 1.714447 -0.259352
-v 0.737904 1.604213 -0.281713
-v 0.223642 1.684075 -0.160743
-v 0.234527 1.730117 0.000000
-v 0.733818 1.740873 0.000000
-v 0.725959 1.478055 -0.461804
-v 0.237330 1.595746 -0.288672
-v 0.760722 1.205036 -0.700545
-v 0.289039 1.496446 -0.430055
-v 0.857323 0.985001 -0.874029
-v 0.305671 1.298417 -0.629719
-v 0.921312 0.755659 -0.999330
-v 0.243473 1.134082 -0.819993
-v 0.939271 0.379986 -1.185872
-v 0.316341 0.785311 -1.086260
-v 0.927775 0.195225 -1.233043
-v 0.539252 0.353984 -1.254493
-v 0.950215 0.042751 -1.256188
-v 0.539150 0.148262 -1.321014
-v 0.943855 -0.101127 -1.274771
-v 0.516872 -0.020713 -1.356627
-v 0.960321 -0.308052 -1.243133
-v 0.542386 -0.188227 -1.370375
-v 0.974530 -0.525273 -1.140353
-v 0.546875 -0.390940 -1.363244
-v 0.948819 -0.638568 -1.102958
-v 0.550658 -0.633015 -1.331311
-v 0.939974 -0.894739 -1.019809
-v 0.527724 -0.862854 -1.253811
-v 0.956456 -1.070504 -0.921063
-v 0.544825 -1.133123 -1.096902
-v 0.930660 -1.216516 -0.831196
-v 0.530629 -1.316423 -0.929842
-v 0.922703 -1.296032 -0.728307
-v 0.538756 -1.408602 -0.764911
-v 0.912699 -1.455066 -0.576185
-v 0.489819 -1.524947 -0.672392
-v 0.912989 -1.499314 -0.419547
-v 0.480235 -1.631521 -0.401961
-v 0.927497 -1.558489 0.000000
-v 0.446550 -1.672950 0.000000
-v -0.221516 1.686349 -0.151403
-v -0.559706 1.694180 -0.186107
-v -0.547248 1.742126 0.000000
-v -0.228904 1.734267 0.000000
-v -0.267035 1.627058 -0.266577
-v -0.557624 1.641278 -0.271462
-v -0.247999 1.565146 -0.389142
-v -0.626493 1.585426 -0.443136
-v -0.179548 1.471301 -0.544513
-v -0.597781 1.489620 -0.641047
-v -0.192546 1.305535 -0.700080
-v -0.674657 1.333008 -0.761059
-v -0.406155 1.005088 -0.971088
-v -0.910602 1.204118 -0.837740
-v -0.115190 0.458427 -1.346197
-v -0.969076 0.901205 -1.146223
-v 0.005537 0.163519 -1.472265
-v -0.752416 0.438132 -1.467349
-v 0.018086 0.002865 -1.523199
-v -0.645496 0.179261 -1.584316
-v 0.034087 -0.225059 -1.542949
-v -0.536767 -0.144454 -1.682232
-v 0.010486 -0.502317 -1.576297
-v -0.533528 -0.582280 -1.701405
-v 0.021051 -0.831931 -1.511548
-v -0.505045 -0.913827 -1.645612
-v -0.041570 -1.143825 -1.395176
-v -0.487217 -1.193519 -1.504026
-v -0.071941 -1.346991 -1.237379
-v -0.524231 -1.399266 -1.313019
-v -0.072300 -1.450245 -1.087397
-v -0.526127 -1.495000 -1.167736
-v -0.063012 -1.583021 -0.865082
-v -0.535144 -1.615983 -0.920556
-v -0.894132 1.712652 -0.151911
-v -1.215563 1.757097 -0.133494
-v -1.179474 1.786649 0.000000
-v -0.866132 1.754670 0.000000
-v -0.954897 1.677544 -0.293034
-v -1.227613 1.709095 -0.276029
-v -1.017767 1.607824 -0.541965
-v -1.292756 1.656509 -0.514030
-v -1.046070 1.509097 -0.761060
-v -1.338488 1.613735 -0.725441
-v -1.115594 1.392380 -0.819623
-v -1.403848 1.533059 -0.902827
-v -1.278903 1.192051 -0.946843
-v -1.551526 1.400025 -1.050193
-v -1.200768 0.978822 -1.103391
-v -1.552899 1.128654 -1.151040
-v -1.147922 0.807955 -1.254191
-v -1.454529 0.875045 -1.238858
-v -1.120716 0.424016 -1.456990
-v -1.405685 0.573835 -1.352181
-v -1.077307 0.165008 -1.553393
-v -1.479588 0.295746 -1.440042
-v -1.053434 -0.342553 -1.690245
-v -1.489699 -0.024215 -1.510987
-v -1.077209 -0.869649 -1.633144
-v -1.395501 -0.698702 -1.553257
-v -1.061272 -1.141877 -1.496230
-v -1.376176 -0.948757 -1.451608
-v -1.001366 -1.335897 -1.353338
-v -1.402349 -1.127845 -1.309055
-v -0.952525 -1.440582 -1.168650
-v -1.407658 -1.236026 -1.112930
-v 1.644178 -0.857872 -1.208494
-v 1.640095 -0.674556 -1.246804
-v 1.462507 1.745481 -0.222394
-v 1.456656 1.785879 0.000000
-v 1.483832 1.697594 -0.288781
-v 1.497138 1.618935 -0.401108
-v 1.504951 1.483493 -0.585976
-v 1.517126 1.334367 -0.741076
-v 1.570685 0.938327 -0.989108
-v 1.582203 0.771083 -1.068180
-v 1.630080 0.420236 -1.172369
-v 1.649027 0.224458 -1.211969
-v 1.660355 0.019397 -1.246002
-v 1.664159 -0.189659 -1.266729
-v 1.678622 -0.410061 -1.291177
-v 1.604939 -1.556997 0.000000
-v 1.920432 -1.567396 0.000000
-v 1.210555 -1.460061 -0.576841
-v 1.192040 -1.330605 -0.678707
-v 1.223415 -1.532658 -0.434522
-v 1.289448 -1.546597 0.000000
-v 1.219163 -1.218342 -0.823029
-v 1.252961 -0.928825 -1.001643
-v 1.373216 -0.564620 -1.106245
-v 1.230116 -1.085439 -0.894543
-v -0.078470 -1.688266 -0.800230
-v -0.094135 -1.769086 -0.556924
-v -0.953236 -1.545941 -0.899180
-v 2.881063 -0.493146 -0.521968
-v 2.663024 -1.440487 -0.478149
-v 2.740886 -1.339225 -0.463604
-v 2.824356 -1.407256 -0.355013
-v -1.365948 1.769608 -0.133901
-v -1.350950 1.807009 0.000000
-v -1.396332 1.723782 -0.267642
-v -1.417595 1.676180 -0.529265
-v -1.465432 1.655336 -0.722125
-v -1.582187 1.567542 -0.982349
-v -1.721806 1.391264 -1.113307
-v -1.733703 1.083864 -1.181489
-v -1.807421 0.657142 -1.209422
-v -1.796156 0.452382 -1.243643
-v -1.810920 0.287592 -1.292257
-v -1.795130 0.033439 -1.371160
-v -1.802864 -0.282523 -1.401315
-v -1.837859 -0.540871 -1.295851
-v -1.782928 -0.770786 -1.173619
-v -1.757573 -0.945337 -1.075832
-v -1.683863 1.789041 -0.121501
-v -1.676510 1.826886 0.000000
-v -1.714432 1.747956 -0.247594
-v -1.744732 1.734849 -0.433807
-v -1.929731 1.617188 -0.806390
-v -1.996117 1.387891 -1.064104
-v -1.980388 1.134038 -1.143196
-v -2.013663 0.810726 -1.158827
-v -2.030191 0.547622 -1.189762
-v -2.021159 0.411979 -1.234679
-v -1.932916 0.232972 -1.304589
-v -1.897394 0.037852 -1.365798
-v -1.950547 -0.275573 -1.377028
-v -2.033655 -0.526012 -1.277639
-v -2.050292 -0.755566 -1.114167
-v -2.043593 -0.875823 -1.028879
-v -1.782298 -1.020581 -0.943381
-v -2.033406 -0.910030 -0.964220
-v -1.198513 -1.456102 -0.885435
-v -1.456655 -1.295527 -0.894240
-v -1.366873 -1.340211 -0.907567
-v -2.079597 1.817785 -0.138375
-v -2.057387 1.841308 0.000000
-v -2.100170 1.789980 -0.229245
-v -2.137524 1.753182 -0.433142
-v -2.172139 1.623010 -0.805318
-v -2.205791 1.356023 -1.081662
-v -2.296056 1.062810 -1.171139
-v -2.298249 0.768333 -1.203884
-v -2.256285 0.547326 -1.238301
-v -2.158400 0.381542 -1.272962
-v -2.070413 0.207766 -1.335106
-v -2.064786 0.018789 -1.411866
-v -2.187634 -0.375454 -1.406902
-v -2.276341 -0.689823 -1.268026
-v -2.292049 -0.933921 -1.128136
-v -2.299356 -1.025449 -1.044687
-v -2.306662 -1.116976 -0.961238
-v -2.672899 1.905110 -0.067168
-v -2.629466 1.918204 0.000000
-v -2.697367 1.871291 -0.218796
-v -2.703112 1.825435 -0.395127
-v -2.715246 1.746763 -0.604653
-v -2.717480 1.576797 -0.875971
-v -2.684930 1.262021 -1.110490
-v -2.572286 0.835495 -1.252192
-v -2.536112 0.656633 -1.269661
-v -2.520947 0.559036 -1.273617
-v -2.473750 0.300945 -1.316695
-v -2.433366 0.078222 -1.371269
-v -2.414730 -0.108377 -1.395384
-v -2.382920 -0.417450 -1.375045
-v -2.430508 -0.822313 -1.254486
-v -2.566746 -1.211312 -1.167101
-v -3.053102 1.968810 -0.051104
-v -3.037562 2.001526 0.000000
-v -3.077669 1.871112 -0.217368
-v -3.075310 1.846000 -0.363149
-v -3.109047 1.789477 -0.565323
-v -3.085650 1.657340 -0.784479
-v -3.028932 1.461517 -0.941324
-v -2.930312 1.103580 -1.125876
-v -2.825835 0.755899 -1.209042
-v -2.790630 0.468810 -1.224273
-v -2.787011 0.264495 -1.237352
-v -2.687022 0.076781 -1.290565
-v -2.649338 -0.241719 -1.339644
-v -2.616467 -0.511373 -1.344133
-v -2.624856 -0.888200 -1.261176
-v -2.725776 -1.214862 -1.190384
-v -2.765069 -1.561164 -1.084313
-v -2.862576 -1.546894 -1.117139
-v -3.358510 1.810253 -0.380095
-v -3.519716 1.685231 -0.317130
-v -3.507689 1.700214 0.000000
-v -3.392806 1.769365 0.000000
-v -3.395381 1.726325 -0.554770
-v -3.527168 1.583508 -0.512679
-v -3.338742 1.598933 -0.689636
-v -3.512997 1.448050 -0.611386
-v -3.278080 1.432418 -0.853958
-v -3.476235 1.287798 -0.704766
-v -3.244771 1.195540 -0.910945
-v -3.442151 1.105486 -0.762934
-v -3.196410 0.797564 -0.985913
-v -3.379131 0.767915 -0.885996
-v -3.112555 0.457376 -1.084816
-v -3.306875 0.379713 -0.987620
-v -3.044646 0.224321 -1.164934
-v -3.251181 0.175063 -1.053445
-v -2.971546 0.032038 -1.215971
-v -3.160225 -0.018852 -1.113626
-v -2.907080 -0.345582 -1.281557
-v -3.101125 -0.354760 -1.162409
-v -2.901159 -0.619504 -1.284058
-v -3.096267 -0.668100 -1.140081
-v -2.937658 -1.002749 -1.219413
-v -3.122061 -0.998702 -1.065015
-v -2.982676 -1.264649 -1.133596
-v -3.150210 -1.259588 -1.001021
-v -3.063133 -1.440555 -1.090926
-v -3.188954 -1.408279 -0.963611
-v -3.734989 1.589433 -0.295202
-v -3.690685 1.602080 0.000000
-v -3.697974 1.466697 -0.433432
-v -3.684619 1.350690 -0.501428
-v -3.655148 1.190938 -0.573692
-v -3.639878 1.015186 -0.615203
-v -3.582867 0.734419 -0.697787
-v -3.504525 0.405574 -0.847066
-v -3.424258 0.158638 -0.918279
-v -3.365413 -0.113447 -0.952400
-v -3.290393 -0.424259 -0.984153
-v -3.233333 -0.683782 -1.015512
-v -3.238094 -0.979377 -0.961631
-v -3.277510 -1.177346 -0.915300
-v -3.319817 -1.365015 -0.886015
-v -3.709741 1.351194 -0.211745
-v -3.709827 1.417763 0.000000
-v -3.701634 1.272650 -0.270469
-v -3.695872 1.156978 -0.316829
-v -3.672431 1.044224 -0.364991
-v -3.664355 0.932851 -0.370749
-v -3.631292 0.701013 -0.420276
-v -3.570384 0.385564 -0.524480
-v -3.520188 0.140164 -0.618561
-v -3.458251 -0.125950 -0.731712
-v -3.406618 -0.343461 -0.746456
-v -3.283698 -0.730967 -0.793898
-v -2.687162 -1.539807 -0.988048
-v -2.462835 -1.305500 -0.966395
-v -2.591357 -1.510845 -0.885470
-v -2.955052 -1.496840 -1.128812
-v -3.232610 -1.834299 -1.087832
-v -3.357996 -1.811803 -0.975625
-v -3.342096 -1.533989 -0.921628
-v -3.365990 -1.485170 -0.888076
-v -2.892438 -1.950810 -0.878120
-v -2.734184 -1.717948 -0.749581
-v -2.811581 -1.798210 -0.712737
-v -2.964215 -1.978727 -0.776572
-v -2.837147 -1.791733 -0.921563
-v -3.030605 -2.311222 -0.884330
-v -3.144012 -2.333635 -0.829994
-v -3.132772 -2.528669 -0.848639
-v -3.046610 -2.510881 -0.900772
-v -3.302419 -3.017921 -1.128514
-v -3.320330 -2.827513 -1.063914
-v -3.261810 -2.821069 -1.088218
-v -3.223286 -3.001780 -1.126176
-v -3.107105 -2.947818 -1.092235
-v -3.141072 -2.785287 -1.032318
-v -3.053267 -2.764905 -1.043008
-v -2.986345 -2.933770 -1.087679
-v -3.016419 -2.765091 -0.966671
-v -2.946527 -2.939327 -0.986343
-v -3.301857 -3.074776 -1.114869
-v -3.227676 -3.141660 -1.103969
-v -3.316551 -3.168932 -1.121229
-v -3.217306 -3.187686 -1.075214
-f 526 527 525
-f 525 527 528
-f 529 530 532
-f 530 531 532
-f 529 532 533
-f 533 532 534
-f 533 534 535
-f 535 534 536
-f 528 527 538
-f 527 537 538
-f 540 541 539
-f 539 541 542
-f 541 545 544
-f 543 544 545
-f 545 546 543
-f 535 543 546
-f 526 525 543
-f 543 525 544
-f 543 535 526
-f 535 536 526
-f 545 541 547
-f 547 541 540
-f 549 530 548
-f 548 530 529
-f 533 550 529
-f 550 548 529
-f 549 548 552
-f 551 552 548
-f 551 548 553
-f 553 548 550
-f 550 546 553
-f 554 553 546
-f 546 545 554
-f 547 554 545
-f 558 555 557
-f 555 556 557
-f 560 556 559
-f 559 556 555
-f 562 560 561
-f 561 560 559
-f 561 563 562
-f 563 564 562
-f 566 564 565
-f 565 564 563
-f 566 565 568
-f 567 568 565
-f 568 567 570
-f 569 570 567
-f 569 571 570
-f 571 572 570
-f 556 573 557
-f 573 574 557
-f 575 573 560
-f 560 573 556
-f 576 575 562
-f 562 575 560
-f 577 576 564
-f 564 576 562
-f 566 578 564
-f 578 577 564
-f 578 566 579
-f 568 579 566
-f 570 580 568
-f 580 579 568
-f 580 570 581
-f 572 581 570
-f 552 582 549
-f 582 583 549
-f 565 563 585
-f 584 585 563
-f 586 584 561
-f 584 563 561
-f 587 586 559
-f 586 561 559
-f 552 587 555
-f 587 559 555
-f 552 555 582
-f 555 558 582
-f 573 588 574
-f 574 588 589
-f 591 577 590
-f 577 578 590
-f 577 591 576
-f 576 591 592
-f 575 576 593
-f 576 592 593
-f 573 575 588
-f 575 593 588
-f 595 571 594
-f 571 569 594
-f 581 596 580
-f 596 597 580
-f 567 565 598
-f 565 585 598
-f 569 567 594
-f 567 598 594
-f 579 599 578
-f 599 590 578
-f 580 597 579
-f 597 599 579
-f 603 600 602
-f 600 601 602
-f 601 600 605
-f 604 605 600
-f 604 606 605
-f 606 607 605
-f 609 607 608
-f 608 607 606
-f 608 610 609
-f 610 611 609
-f 613 611 612
-f 612 611 610
-f 615 613 614
-f 614 613 612
-f 617 615 616
-f 616 615 614
-f 619 617 618
-f 618 617 616
-f 619 618 621
-f 620 621 618
-f 623 621 622
-f 622 621 620
-f 625 623 624
-f 624 623 622
-f 624 626 625
-f 626 627 625
-f 629 627 628
-f 628 627 626
-f 631 632 630
-f 630 632 633
-f 635 636 634
-f 634 636 637
-f 634 637 638
-f 634 638 639
-f 639 638 640
-f 639 640 641
-f 641 640 642
-f 643 641 644
-f 641 642 644
-f 646 645 644
-f 645 643 644
-f 648 647 646
-f 647 645 646
-f 649 647 650
-f 647 648 650
-f 651 649 652
-f 649 650 652
-f 653 651 654
-f 651 652 654
-f 654 656 653
-f 655 653 656
-f 655 656 631
-f 631 656 632
-f 658 659 657
-f 657 659 660
-f 662 663 661
-f 661 663 664
-f 661 664 665
-f 665 664 666
-f 665 666 667
-f 667 666 668
-f 669 667 670
-f 667 668 670
-f 670 672 669
-f 671 669 672
-f 672 674 671
-f 673 671 674
-f 676 675 674
-f 675 673 674
-f 677 675 676
-f 676 679 677
-f 678 677 679
-f 680 678 681
-f 678 679 681
-f 682 680 683
-f 680 681 683
-f 684 682 685
-f 682 683 685
-f 658 684 659
-f 684 685 659
-f 600 603 632
-f 633 632 603
-f 627 629 659
-f 660 659 629
-f 663 602 601
-f 605 664 601
-f 664 663 601
-f 664 605 666
-f 666 605 607
-f 666 607 668
-f 668 607 609
-f 670 668 611
-f 668 609 611
-f 672 670 613
-f 670 611 613
-f 613 615 672
-f 674 672 615
-f 615 617 674
-f 676 674 617
-f 617 619 676
-f 679 676 619
-f 681 679 621
-f 679 619 621
-f 683 681 623
-f 681 621 623
-f 623 625 683
-f 685 683 625
-f 627 659 625
-f 659 685 625
-f 637 636 626
-f 636 628 626
-f 626 624 637
-f 638 637 624
-f 640 638 622
-f 638 624 622
-f 640 622 620
-f 640 620 642
-f 642 620 618
-f 618 616 642
-f 644 642 616
-f 616 614 644
-f 646 644 614
-f 614 612 646
-f 648 646 612
-f 650 648 610
-f 648 612 610
-f 610 608 650
-f 652 650 608
-f 654 652 606
-f 652 608 606
-f 606 604 654
-f 656 654 604
-f 632 656 600
-f 656 604 600
-f 682 686 680
-f 687 688 675
-f 688 673 675
-f 677 689 675
-f 689 687 675
-f 690 689 678
-f 689 677 678
-f 686 691 692
-f 692 678 686
-f 678 680 686
-f 692 690 678
-f 693 694 695
-f 698 699 697
-f 696 697 699
-f 700 696 701
-f 696 699 701
-f 701 703 700
-f 702 700 703
-f 702 703 704
-f 704 703 705
-f 704 705 706
-f 706 705 707
-f 709 708 707
-f 708 706 707
-f 708 709 710
-f 710 709 711
-f 694 693 711
-f 693 710 711
-f 696 700 712
-f 700 691 712
-f 693 695 713
-f 713 688 693
-f 710 693 688
-f 708 710 687
-f 710 688 687
-f 706 708 689
-f 708 687 689
-f 689 690 706
-f 704 706 690
-f 702 704 692
-f 704 690 692
-f 692 691 702
-f 700 702 691
-f 688 713 673
-f 713 671 673
-f 661 714 662
-f 714 715 662
-f 714 661 716
-f 716 661 665
-f 716 665 717
-f 717 665 667
-f 667 669 717
-f 695 717 669
-f 669 671 695
-f 713 695 671
-f 720 698 719
-f 718 719 698
-f 716 721 714
-f 721 722 714
-f 717 723 716
-f 723 721 716
-f 723 717 724
-f 724 717 695
-f 694 725 695
-f 725 724 695
-f 725 694 726
-f 726 694 711
-f 709 727 711
-f 727 726 711
-f 727 709 728
-f 728 709 707
-f 728 707 729
-f 729 707 705
-f 703 730 705
-f 730 729 705
-f 703 701 730
-f 731 730 701
-f 731 701 732
-f 732 701 699
-f 699 698 732
-f 720 732 698
-f 718 589 719
-f 589 588 719
-f 720 719 733
-f 734 732 733
-f 732 720 733
-f 722 736 735
-f 735 736 737
-f 732 734 731
-f 731 734 738
-f 730 731 738
-f 730 738 729
-f 729 738 739
-f 740 728 739
-f 728 729 739
-f 728 740 727
-f 727 740 741
-f 741 742 727
-f 726 727 742
-f 726 742 725
-f 725 742 743
-f 744 724 743
-f 724 725 743
-f 724 744 723
-f 723 744 745
-f 723 745 721
-f 721 745 746
-f 721 746 722
-f 722 746 736
-f 747 748 750
-f 748 749 750
-f 748 747 752
-f 751 752 747
-f 753 754 751
-f 754 752 751
-f 755 756 753
-f 756 754 753
-f 757 758 755
-f 758 756 755
-f 758 757 760
-f 759 760 757
-f 760 759 762
-f 761 762 759
-f 763 764 761
-f 764 762 761
-f 765 766 763
-f 766 764 763
-f 767 768 765
-f 768 766 765
-f 769 770 767
-f 770 768 767
-f 772 770 771
-f 771 770 769
-f 773 774 771
-f 774 772 771
-f 776 774 775
-f 775 774 773
-f 778 776 777
-f 777 776 775
-f 778 777 780
-f 779 780 777
-f 782 780 781
-f 781 780 779
-f 784 782 783
-f 783 782 781
-f 786 784 785
-f 785 784 783
-f 787 788 790
-f 788 789 790
-f 787 791 788
-f 791 792 788
-f 794 792 793
-f 793 792 791
-f 795 796 793
-f 796 794 793
-f 798 796 797
-f 797 796 795
-f 800 798 799
-f 799 798 797
-f 801 802 799
-f 802 800 799
-f 802 801 804
-f 803 804 801
-f 804 803 806
-f 805 806 803
-f 806 805 808
-f 807 808 805
-f 808 807 810
-f 809 810 807
-f 810 809 812
-f 811 812 809
-f 811 813 812
-f 813 814 812
-f 816 814 815
-f 815 814 813
-f 818 816 817
-f 817 816 815
-f 819 820 817
-f 820 818 817
-f 821 822 824
-f 822 823 824
-f 821 825 822
-f 825 826 822
-f 825 827 826
-f 827 828 826
-f 829 830 827
-f 830 828 827
-f 830 829 832
-f 831 832 829
-f 834 832 833
-f 833 832 831
-f 835 836 833
-f 836 834 833
-f 835 837 836
-f 837 838 836
-f 837 839 838
-f 839 840 838
-f 842 840 841
-f 841 840 839
-f 843 844 841
-f 844 842 841
-f 844 843 846
-f 845 846 843
-f 847 848 845
-f 848 846 845
-f 849 850 847
-f 850 848 847
-f 851 852 849
-f 852 850 849
-f 853 854 733
-f 855 856 736
-f 856 737 736
-f 736 746 855
-f 857 855 746
-f 745 858 746
-f 858 857 746
-f 744 859 745
-f 859 858 745
-f 743 860 744
-f 860 859 744
-f 860 743 861
-f 861 743 742
-f 862 861 742
-f 863 862 741
-f 862 742 741
-f 741 740 863
-f 864 863 740
-f 739 865 740
-f 865 864 740
-f 865 739 866
-f 866 739 738
-f 738 734 866
-f 867 866 734
-f 734 733 867
-f 854 867 733
-f 588 593 733
-f 593 592 733
-f 719 588 733
-f 590 853 733
-f 591 590 733
-f 592 591 733
-f 868 530 869
-f 530 549 869
-f 595 870 571
-f 870 871 571
-f 531 872 595
-f 872 870 595
-f 549 583 869
-f 531 868 872
-f 868 873 872
-f 868 531 530
-f 874 572 871
-f 871 572 571
-f 875 876 596
-f 581 877 596
-f 877 875 596
-f 572 874 581
-f 874 877 581
-f 853 590 599
-f 597 854 599
-f 854 853 599
-f 876 867 854
-f 876 854 597
-f 856 855 750
-f 873 785 872
-f 872 785 783
-f 872 783 870
-f 870 783 781
-f 779 871 781
-f 871 870 781
-f 871 779 874
-f 874 779 777
-f 777 775 874
-f 877 874 775
-f 773 875 775
-f 875 877 775
-f 876 875 771
-f 875 773 771
-f 876 771 769
-f 767 867 769
-f 867 876 769
-f 867 767 866
-f 866 767 765
-f 866 765 865
-f 865 765 763
-f 761 864 763
-f 864 865 763
-f 864 761 863
-f 863 761 759
-f 863 759 862
-f 862 759 757
-f 755 861 757
-f 861 862 757
-f 861 755 753
-f 861 753 860
-f 860 753 751
-f 860 751 859
-f 859 751 747
-f 858 859 747
-f 750 857 747
-f 857 858 747
-f 855 857 750
-f 790 749 787
-f 748 787 749
-f 752 791 748
-f 791 787 748
-f 754 793 752
-f 793 791 752
-f 793 754 795
-f 756 795 754
-f 795 756 797
-f 758 797 756
-f 760 799 758
-f 799 797 758
-f 799 760 801
-f 762 801 760
-f 801 762 803
-f 764 803 762
-f 803 764 805
-f 766 805 764
-f 805 766 807
-f 768 807 766
-f 770 809 768
-f 809 807 768
-f 809 770 811
-f 772 811 770
-f 813 811 774
-f 774 811 772
-f 815 813 776
-f 776 813 774
-f 776 778 815
-f 778 817 815
-f 817 778 819
-f 780 819 778
-f 819 780 878
-f 782 878 780
-f 782 879 878
-f 788 821 789
-f 821 824 789
-f 825 821 792
-f 792 821 788
-f 827 825 794
-f 794 825 792
-f 796 829 794
-f 829 827 794
-f 796 798 829
-f 798 831 829
-f 798 800 831
-f 800 833 831
-f 802 835 800
-f 835 833 800
-f 804 837 802
-f 837 835 802
-f 806 839 804
-f 839 837 804
-f 808 841 806
-f 841 839 806
-f 841 808 843
-f 810 843 808
-f 843 810 845
-f 812 845 810
-f 814 847 812
-f 847 845 812
-f 814 816 847
-f 816 849 847
-f 816 818 849
-f 818 851 849
-f 851 818 880
-f 820 880 818
-f 712 691 881
-f 882 883 884
-f 876 597 596
-f 823 822 886
-f 822 885 886
-f 887 885 826
-f 826 885 822
-f 826 828 887
-f 828 888 887
-f 830 889 828
-f 889 888 828
-f 889 830 890
-f 832 890 830
-f 891 890 834
-f 834 890 832
-f 892 891 836
-f 836 891 834
-f 893 892 838
-f 838 892 836
-f 838 840 893
-f 840 894 893
-f 840 842 894
-f 842 895 894
-f 844 896 842
-f 896 895 842
-f 846 897 844
-f 897 896 844
-f 848 898 846
-f 898 897 846
-f 898 848 899
-f 850 899 848
-f 899 850 900
-f 852 900 850
-f 886 885 902
-f 885 901 902
-f 903 901 887
-f 887 901 885
-f 888 904 887
-f 904 903 887
-f 905 904 889
-f 889 904 888
-f 906 905 890
-f 890 905 889
-f 890 891 906
-f 891 907 906
-f 908 907 892
-f 892 907 891
-f 892 893 908
-f 893 909 908
-f 894 910 893
-f 910 909 893
-f 910 894 911
-f 895 911 894
-f 895 896 911
-f 896 912 911
-f 897 913 896
-f 913 912 896
-f 914 913 898
-f 898 913 897
-f 899 915 898
-f 915 914 898
-f 900 916 899
-f 916 915 899
-f 900 917 916
-f 917 918 916
-f 852 851 919
-f 919 851 880
-f 852 920 900
-f 920 917 900
-f 921 920 852
-f 919 921 852
-f 922 923 901
-f 901 923 902
-f 901 903 922
-f 903 924 922
-f 925 924 904
-f 904 924 903
-f 904 905 925
-f 905 926 925
-f 927 926 906
-f 906 926 905
-f 928 927 907
-f 907 927 906
-f 907 908 928
-f 908 929 928
-f 908 909 929
-f 909 930 929
-f 930 909 931
-f 910 931 909
-f 911 932 910
-f 932 931 910
-f 933 932 912
-f 912 932 911
-f 933 912 934
-f 913 934 912
-f 935 934 914
-f 914 934 913
-f 936 935 915
-f 915 935 914
-f 915 916 936
-f 916 937 936
-f 918 938 916
-f 938 937 916
-f 939 940 922
-f 922 940 923
-f 941 939 924
-f 924 939 922
-f 924 925 941
-f 925 942 941
-f 926 943 925
-f 943 942 925
-f 927 944 926
-f 944 943 926
-f 944 927 945
-f 928 945 927
-f 945 928 946
-f 929 946 928
-f 930 947 929
-f 947 946 929
-f 931 948 930
-f 948 947 930
-f 949 948 932
-f 932 948 931
-f 932 933 949
-f 933 950 949
-f 934 951 933
-f 951 950 933
-f 935 952 934
-f 952 951 934
-f 952 935 953
-f 936 953 935
-f 953 936 954
-f 937 954 936
-f 940 939 956
-f 939 955 956
-f 955 939 957
-f 941 957 939
-f 942 958 941
-f 958 957 941
-f 943 959 942
-f 959 958 942
-f 943 944 959
-f 944 960 959
-f 945 961 944
-f 961 960 944
-f 946 962 945
-f 962 961 945
-f 962 946 963
-f 947 963 946
-f 963 947 964
-f 948 964 947
-f 949 965 948
-f 965 964 948
-f 949 950 965
-f 950 966 965
-f 966 950 967
-f 951 967 950
-f 952 968 951
-f 968 967 951
-f 953 969 952
-f 969 968 952
-f 954 970 953
-f 970 969 953
-f 971 972 954
-f 972 970 954
-f 973 974 976
-f 974 975 976
-f 978 974 977
-f 977 974 973
-f 980 978 979
-f 979 978 977
-f 982 980 981
-f 981 980 979
-f 981 983 982
-f 983 984 982
-f 983 985 984
-f 985 986 984
-f 986 985 988
-f 987 988 985
-f 989 990 987
-f 990 988 987
-f 990 989 992
-f 991 992 989
-f 991 993 992
-f 993 994 992
-f 996 994 995
-f 995 994 993
-f 995 997 996
-f 997 998 996
-f 997 999 998
-f 999 1000 998
-f 999 1001 1000
-f 1001 1002 1000
-f 1003 1004 974
-f 974 1004 975
-f 974 978 1003
-f 978 1005 1003
-f 978 980 1005
-f 980 1006 1005
-f 1007 1006 982
-f 982 1006 980
-f 1008 1007 984
-f 984 1007 982
-f 986 1009 984
-f 1009 1008 984
-f 988 1010 986
-f 1010 1009 986
-f 1010 988 1011
-f 990 1011 988
-f 992 1012 990
-f 1012 1011 990
-f 992 994 1012
-f 994 1013 1012
-f 994 996 1013
-f 996 1014 1013
-f 996 998 1014
-f 998 1015 1014
-f 1000 1016 998
-f 1016 1015 998
-f 1016 1000 1017
-f 1002 1017 1000
-f 1004 1003 1019
-f 1003 1018 1019
-f 1005 1020 1003
-f 1020 1018 1003
-f 1006 1021 1005
-f 1021 1020 1005
-f 1007 1022 1006
-f 1022 1021 1006
-f 1007 1008 1022
-f 1008 1023 1022
-f 1008 1009 1023
-f 1009 1024 1023
-f 1010 1025 1009
-f 1025 1024 1009
-f 1025 1010 1026
-f 1011 1026 1010
-f 1026 1011 1027
-f 1012 1027 1011
-f 1012 1013 1027
-f 1013 1028 1027
-f 1028 1013 1029
-f 1014 1029 1013
-f 969 970 997
-f 970 999 997
-f 969 997 968
-f 968 997 995
-f 968 995 967
-f 967 995 993
-f 993 991 967
-f 966 967 991
-f 966 991 965
-f 965 991 989
-f 987 964 989
-f 964 965 989
-f 985 963 987
-f 963 964 987
-f 963 985 962
-f 962 985 983
-f 961 962 981
-f 962 983 981
-f 960 961 979
-f 961 981 979
-f 959 960 977
-f 960 979 977
-f 958 959 973
-f 959 977 973
-f 971 954 1030
-f 937 938 954
-f 954 938 1031
-f 1030 954 1032
-f 954 1031 1032
-f 533 535 550
-f 546 550 535
-f 722 735 714
-f 735 715 714
-f 1033 970 972
-f 1035 1002 1034
-f 1034 1002 1001
-f 970 1033 999
-f 1033 1001 999
-f 1036 1037 1002
-f 1037 1017 1002
-f 1035 1036 1002
-f 1039 1040 1038
-f 1038 1040 1041
-f 1038 1042 1039
-f 1043 1044 1046
-f 1044 1045 1046
-f 1048 1049 1047
-f 1047 1049 1050
-f 1054 1051 1053
-f 1051 1052 1053
-f 1056 1054 1055
-f 1054 1053 1055
-f 1047 1050 1057
-f 1057 1058 1059
-f 1059 1058 1060
-v -3.042899 -3.193907 -1.207296
-v -2.888628 -3.200302 -1.210934
-v -2.845816 -3.273661 -1.218321
-v -2.975439 -3.308754 -1.253240
-v -2.736599 -3.394849 -1.269577
-v -2.856957 -3.449728 -1.356844
-v -2.631547 -3.559891 -1.337380
-v -2.729567 -3.602976 -1.377236
-v -2.981824 -3.608887 -1.346959
-v -3.030627 -3.493327 -1.322650
-v -3.091252 -3.340925 -1.235864
-v -3.135041 -3.243787 -1.189436
-v -2.699957 -3.390295 -1.185593
-v -2.787341 -3.278502 -1.138621
-v -2.822497 -3.186549 -1.120984
-v -2.909010 -3.084482 -1.089147
-v -2.884711 -3.063896 -0.993766
-v -2.770335 -3.208138 -1.031045
-v -3.184143 -3.298048 -1.156892
-v -3.158524 -3.405872 -1.197099
-v -3.098730 -3.539123 -1.252987
-v -3.031250 -3.095940 -1.106355
-f 1061 1062 1064
-f 1062 1063 1064
-f 1064 1063 1066
-f 1063 1065 1066
-f 1065 1067 1066
-f 1066 1067 1068
-f 1069 1070 1068
-f 1068 1070 1066
-f 1066 1070 1064
-f 1070 1071 1064
-f 1064 1071 1061
-f 1071 1072 1061
-f 1063 1074 1065
-f 1073 1065 1074
-f 1074 1063 1075
-f 1063 1062 1075
-f 1078 1075 1077
-f 1075 1076 1077
-f 1071 1080 1072
-f 1079 1072 1080
-f 1071 1070 1080
-f 1081 1080 1070
-f 1070 1069 1081
-f 1082 1075 1062
-v -2.986345 -2.933770 -1.087679
-v -2.946527 -2.939327 -0.986343
-v -2.884711 -3.063896 -0.993766
-v -2.909010 -3.084482 -1.089147
-v -3.107105 -2.947818 -1.092235
-v -3.177108 -2.979305 -1.139084
-v -3.196508 -2.788166 -1.045431
-v -3.141072 -2.785287 -1.032318
-v -3.223286 -3.001780 -1.126176
-v -3.261810 -2.821069 -1.088218
-v -3.333954 -3.058673 -0.974748
-v -3.301857 -3.074776 -1.114869
-v -3.316551 -3.168932 -1.121229
-v -3.330406 -3.185190 -0.950058
-v -3.217306 -3.187686 -1.075214
-v -3.223246 -3.225388 -0.976573
-f 1083 1084 1086
-f 1084 1085 1086
-f 1088 1089 1087
-f 1087 1089 1090
-f 1089 1088 1092
-f 1091 1092 1088
-f 1095 1096 1094
-f 1093 1094 1096
-f 1095 1097 1096
-f 1096 1097 1098
-v -3.223246 -3.225388 -0.976573
-v -3.217306 -3.187686 -1.075214
-v -3.184143 -3.298048 -1.156892
-v -3.194170 -3.348553 -1.007196
-v -3.082741 -3.598298 -1.054556
-v -3.098730 -3.539123 -1.252987
-v -2.981824 -3.608887 -1.346959
-v -2.922908 -3.637036 -1.059206
-v -3.158524 -3.405872 -1.197099
-v -3.186750 -3.457336 -1.025606
-f 1101 1102 1100
-f 1099 1100 1102
-f 1106 1103 1105
-f 1103 1104 1105
-f 1107 1108 1101
-f 1102 1101 1108
-f 1103 1108 1104
-f 1108 1107 1104
-v -3.294389 -3.166225 -0.842823
-v -3.330406 -3.185190 -0.950058
-v -3.223246 -3.225388 -0.976573
-v -3.119570 -3.183977 -0.870739
-f 1112 1109 1111
-f 1109 1110 1111
-v -3.194170 -3.348553 -1.007196
-v -3.087335 -3.350463 -0.831656
-v -3.119570 -3.183977 -0.870739
-v -3.223246 -3.225388 -0.976573
-v -3.186750 -3.457336 -1.025606
-v -3.074557 -3.486847 -0.843432
-v -3.082741 -3.598298 -1.054556
-v -3.006867 -3.575464 -0.830221
-v -2.922908 -3.637036 -1.059206
-v -2.870422 -3.601724 -0.843123
-v -2.791754 -3.635993 -1.078555
-v -2.740824 -3.597601 -0.875006
-f 1114 1115 1113
-f 1113 1115 1116
-f 1114 1113 1118
-f 1113 1117 1118
-f 1117 1119 1118
-f 1118 1119 1120
-f 1119 1121 1120
-f 1120 1121 1122
-f 1121 1123 1122
-f 1122 1123 1124
-v -3.333954 -3.058673 -0.974748
-v -3.330406 -3.185190 -0.950058
-v -3.294389 -3.166225 -0.842823
-v -3.256731 -3.032131 -0.849693
-v -3.300372 -2.795728 -0.878984
-v -3.339637 -2.846837 -0.966368
-v -2.986345 -2.933770 -1.087679
-v -2.909010 -3.084482 -1.089147
-v -3.031250 -3.095940 -1.106355
-v -3.107105 -2.947818 -1.092235
-f 1128 1125 1127
-f 1125 1126 1127
-f 1129 1130 1128
-f 1128 1130 1125
-f 1132 1133 1131
-f 1131 1133 1134
-v -3.121673 -3.120319 -1.136456
-v -3.031250 -3.095940 -1.106355
-v -2.888628 -3.200302 -1.210934
-v -3.042899 -3.193907 -1.207296
-f 1137 1138 1136
-f 1135 1136 1138
-v -3.031250 -3.095940 -1.106355
-v -3.121673 -3.120319 -1.136456
-v -3.177108 -2.979305 -1.139084
-v -3.107105 -2.947818 -1.092235
-v -3.169546 -3.135273 -1.128247
-v -3.223286 -3.001780 -1.126176
-f 1139 1140 1142
-f 1140 1141 1142
-f 1141 1140 1144
-f 1140 1143 1144
-v -3.169546 -3.135273 -1.128247
-v -3.121673 -3.120319 -1.136456
-v -3.042899 -3.193907 -1.207296
-v -3.135041 -3.243787 -1.189436
-v -3.217306 -3.187686 -1.075214
-v -3.184143 -3.298048 -1.156892
-f 1147 1148 1146
-f 1145 1146 1148
-f 1150 1149 1148
-f 1149 1145 1148
-v -3.227676 -3.141660 -1.103969
-v -3.169546 -3.135273 -1.128247
-v -3.217306 -3.187686 -1.075214
-v -3.301857 -3.074776 -1.114869
-v -3.223286 -3.001780 -1.126176
-v -3.333954 -3.058673 -0.974748
-v -3.302419 -3.017921 -1.128514
-v -3.339637 -2.846837 -0.966368
-v -3.320330 -2.827513 -1.063914
-f 1151 1152 1153
-f 1155 1152 1154
-f 1154 1152 1151
-f 1154 1156 1157
-f 1157 1156 1159
-f 1158 1159 1156
-v -2.770335 -3.208138 -1.031045
-v -2.884711 -3.063896 -0.993766
-v -2.928681 -3.072892 -0.924772
-v -2.803260 -3.213580 -0.942403
-f 1160 1161 1163
-f 1161 1162 1163
-v -2.884711 -3.063896 -0.993766
-v -2.946527 -2.939327 -0.986343
-v -3.008412 -2.899760 -0.904635
-v -2.928681 -3.072892 -0.924772
-f 1166 1167 1165
-f 1164 1165 1167
-v -2.822497 -3.186549 -1.120984
-v -2.770335 -3.208138 -1.031045
-v -2.749355 -3.272099 -1.034148
-v -2.787341 -3.278502 -1.138621
-v -2.736599 -3.394849 -1.269577
-v -2.699957 -3.390295 -1.185593
-v -2.583580 -3.514267 -1.278598
-v -2.631547 -3.559891 -1.337380
-v -2.649491 -3.404362 -1.100352
-v -2.524720 -3.561609 -1.161535
-v -2.668957 -3.397513 -0.943626
-v -2.593513 -3.536154 -0.942450
-v -2.749867 -3.295148 -0.966073
-v -2.803260 -3.213580 -0.942403
-f 1168 1169 1171
-f 1169 1170 1171
-f 1175 1172 1174
-f 1172 1173 1174
-f 1177 1174 1176
-f 1174 1173 1176
-f 1170 1176 1171
-f 1176 1173 1171
-f 1179 1177 1178
-f 1177 1176 1178
-f 1178 1176 1180
-f 1176 1170 1180
-f 1181 1180 1169
-f 1180 1170 1169
-v -3.294389 -3.166225 -0.842823
-v -3.119570 -3.183977 -0.870739
-v -3.166971 -3.002766 -0.812106
-v -3.256731 -3.032131 -0.849693
-v -3.011987 -3.092000 -0.860973
-v -3.069810 -2.928755 -0.845236
-v -2.928681 -3.072892 -0.924772
-v -3.008412 -2.899760 -0.904635
-v -3.137383 -2.776449 -0.844117
-v -3.184812 -2.768053 -0.850127
-v -3.040038 -2.780893 -0.914614
-f 1182 1183 1184
-f 1182 1184 1185
-f 1183 1186 1184
-f 1186 1187 1184
-f 1189 1187 1188
-f 1186 1188 1187
-f 1191 1184 1190
-f 1184 1187 1190
-f 1190 1187 1192
-f 1187 1189 1192
-v -3.119570 -3.183977 -0.870739
-v -3.087335 -3.350463 -0.831656
-v -2.944625 -3.282121 -0.817054
-v -3.011987 -3.092000 -0.860973
-v -2.803260 -3.213580 -0.942403
-v -2.928681 -3.072892 -0.924772
-v -3.074557 -3.486847 -0.843432
-v -2.890885 -3.415616 -0.819125
-v -2.749867 -3.295148 -0.966073
-f 1196 1193 1195
-f 1193 1194 1195
-f 1197 1198 1195
-f 1196 1195 1198
-f 1200 1195 1199
-f 1194 1199 1195
-f 1201 1197 1200
-f 1195 1200 1197
-v -3.256731 -3.032131 -0.849693
-v -3.166971 -3.002766 -0.812106
-v -3.184812 -2.768053 -0.850127
-v -3.300372 -2.795728 -0.878984
-f 1204 1205 1203
-f 1202 1203 1205
-v -2.890885 -3.415616 -0.819125
-v -3.074557 -3.486847 -0.843432
-v -3.006867 -3.575464 -0.830221
-v -2.870422 -3.601724 -0.843123
-v -2.749867 -3.295148 -0.966073
-v -2.668957 -3.397513 -0.943626
-v -2.740824 -3.597601 -0.875006
-v -2.593513 -3.536154 -0.942450
-v -2.524720 -3.561609 -1.161535
-v -2.791754 -3.635993 -1.078555
-v -2.922908 -3.637036 -1.059206
-v -2.981824 -3.608887 -1.346959
-v -2.729567 -3.602976 -1.377236
-v -3.031250 -3.095940 -1.106355
-v -2.909010 -3.084482 -1.089147
-v -2.822497 -3.186549 -1.120984
-v -2.631547 -3.559891 -1.337380
-v -2.583580 -3.514267 -1.278598
-f 1206 1207 1208
-f 1209 1206 1208
-f 1210 1206 1211
-f 1209 1212 1206
-f 1211 1206 1213
-f 1213 1206 1212
-f 1214 1213 1215
-f 1213 1212 1215
-f 1217 1218 1216
-f 1216 1218 1215
-f 1219 1220 1221
-f 1218 1222 1215
-f 1222 1223 1215
-f 1215 1223 1214
-v -2.946527 -2.939327 -0.986343
-v -3.016419 -2.765091 -0.966671
-v -3.040038 -2.780893 -0.914614
-v -3.008412 -2.899760 -0.904635
-v -3.053267 -2.764905 -1.043008
-v -3.141072 -2.785287 -1.032318
-v -3.162498 -2.556375 -1.058409
-v -3.078699 -2.553982 -1.046834
-v -3.320330 -2.827513 -1.063914
-v -3.339637 -2.846837 -0.966368
-v -3.372066 -2.569159 -0.904785
-v -3.347304 -2.573628 -0.955211
-v -3.261810 -2.821069 -1.088218
-v -3.251541 -2.564050 -1.023627
-v -3.196508 -2.788166 -1.045431
-v -3.022819 -2.522240 -0.979148
-v -3.297886 -2.549020 -0.861657
-v -3.300372 -2.795728 -0.878984
-v -3.240554 -2.555467 -0.856262
-v -3.184812 -2.768053 -0.850127
-v -3.132772 -2.528669 -0.848639
-v -3.137383 -2.776449 -0.844117
-v -3.046610 -2.510881 -0.900772
-v -3.279790 -1.162072 -0.784602
-v -3.277510 -1.177346 -0.915300
-v -3.319817 -1.365015 -0.886015
-v -3.335942 -1.365685 -0.724590
-v -3.251210 -0.948205 -0.819868
-v -3.283698 -0.730967 -0.793898
-v -3.233333 -0.683782 -1.015512
-v -3.238094 -0.979377 -0.961631
-v -3.415655 -0.308965 -0.671045
-v -3.406618 -0.343461 -0.746456
-v -3.556552 0.704883 -0.280630
-v -3.578170 0.837714 -0.288502
-v -3.664355 0.932851 -0.370749
-v -3.631292 0.701013 -0.420276
-v -3.536654 0.442277 -0.322000
-v -3.570384 0.385564 -0.524480
-v -3.516840 0.149002 -0.430359
-v -3.520188 0.140164 -0.618561
-v -3.470778 -0.078218 -0.546398
-v -3.458251 -0.125950 -0.731712
-v -3.623861 0.911561 0.000000
-v -3.599077 0.796217 0.000000
-v -3.601668 1.293049 0.000000
-v -3.709827 1.417763 0.000000
-v -3.709741 1.351194 -0.211745
-v -3.701634 1.272650 -0.270469
-v -3.608593 1.163581 0.000000
-v -3.695872 1.156978 -0.316829
-v -3.622326 1.005378 0.000000
-v -3.672431 1.044224 -0.364991
-v -3.900566 1.002504 0.000000
-v -3.887340 1.003866 -0.057635
-v -3.844470 0.498176 -0.053132
-v -3.856649 0.496801 0.000000
-v -3.875140 1.480358 0.000000
-v -3.860820 1.479723 -0.062137
-v -3.712832 1.794492 0.000000
-v -3.698925 1.787941 -0.066640
-v -3.478430 1.975409 0.000000
-v -3.469715 1.961504 -0.071141
-v -3.242148 2.021387 0.000000
-v -3.238225 2.005405 -0.075645
-v -3.851206 1.007586 -0.099831
-v -3.811194 0.501935 -0.092033
-v -3.821694 1.477989 -0.107631
-v -3.660928 1.770041 -0.115431
-v -3.445903 1.923509 -0.123229
-v -3.227504 1.961738 -0.131029
-v -3.801840 1.012668 -0.115288
-v -3.765736 0.507070 -0.106281
-v -3.768245 1.475619 -0.124295
-v -3.609021 1.745588 -0.133304
-v -3.413372 1.871604 -0.142309
-v -3.752468 1.017751 -0.099865
-v -3.720269 0.512205 -0.092064
-v -3.714787 1.473248 -0.107668
-v -3.557104 1.721130 -0.115470
-v -3.380836 1.819691 -0.123273
-v -3.716312 1.021474 -0.057693
-v -3.686972 0.515966 -0.053185
-v -3.675638 1.471512 -0.062201
-v -3.519086 1.703220 -0.066709
-v -3.357009 1.781675 -0.071216
-v -3.703058 1.022838 -0.000069
-v -3.674766 0.517345 -0.000063
-v -3.661286 1.470876 -0.000074
-v -3.507689 1.700214 0.000000
-v -3.348274 1.767738 -0.000085
-v -3.077669 1.871112 -0.217368
-v -3.037562 2.001526 0.000000
-v -3.053102 1.968810 -0.051104
-v -3.358510 1.810253 -0.380095
-v -3.075310 1.846000 -0.363149
-f 1224 1225 1227
-f 1225 1226 1227
-f 1230 1231 1229
-f 1228 1229 1231
-f 1234 1235 1233
-f 1232 1233 1235
-f 1235 1237 1232
-f 1236 1232 1237
-f 1237 1230 1236
-f 1238 1236 1230
-f 1229 1238 1230
-f 1225 1228 1239
-f 1231 1239 1228
-f 1233 1241 1234
-f 1240 1234 1241
-f 1241 1243 1240
-f 1242 1240 1243
-f 1245 1244 1243
-f 1244 1242 1243
-f 1226 1246 1245
-f 1246 1244 1245
-f 1226 1225 1246
-f 1239 1246 1225
-f 1247 1248 1250
-f 1248 1249 1250
-f 1253 1254 1252
-f 1251 1252 1254
-f 1247 1251 1248
-f 1251 1254 1248
-f 1255 1256 1252
-f 1259 1260 1258
-f 1257 1258 1260
-f 1262 1261 1260
-f 1261 1257 1260
-f 1263 1261 1264
-f 1261 1262 1264
-f 1264 1266 1263
-f 1265 1263 1266
-f 1265 1266 1255
-f 1255 1266 1256
-f 1259 1258 1267
-f 1267 1258 1268
-f 1269 1270 1271
-f 1269 1271 1272
-f 1274 1273 1272
-f 1273 1269 1272
-f 1276 1275 1274
-f 1275 1273 1274
-f 1276 1259 1275
-f 1267 1275 1259
-f 1278 1279 1277
-f 1277 1279 1280
-f 1277 1281 1278
-f 1281 1282 1278
-f 1283 1284 1281
-f 1284 1282 1281
-f 1283 1285 1284
-f 1285 1286 1284
-f 1285 1287 1286
-f 1287 1288 1286
-f 1289 1290 1278
-f 1278 1290 1279
-f 1278 1282 1289
-f 1282 1291 1289
-f 1282 1284 1291
-f 1284 1292 1291
-f 1284 1286 1292
-f 1286 1293 1292
-f 1288 1294 1286
-f 1294 1293 1286
-f 1295 1296 1289
-f 1289 1296 1290
-f 1289 1291 1295
-f 1291 1297 1295
-f 1292 1298 1291
-f 1298 1297 1291
-f 1293 1299 1292
-f 1299 1298 1292
-f 1294 1299 1293
-f 1300 1301 1295
-f 1295 1301 1296
-f 1295 1297 1300
-f 1297 1302 1300
-f 1297 1298 1302
-f 1298 1303 1302
-f 1299 1304 1298
-f 1304 1303 1298
-f 1305 1306 1300
-f 1300 1306 1301
-f 1300 1302 1305
-f 1302 1307 1305
-f 1302 1303 1307
-f 1303 1308 1307
-f 1303 1304 1308
-f 1304 1309 1308
-f 1310 1311 1305
-f 1305 1311 1306
-f 1305 1307 1310
-f 1307 1312 1310
-f 1307 1308 1312
-f 1308 1313 1312
-f 1309 1314 1308
-f 1314 1313 1308
-f 1294 1315 1299
-f 1287 1316 1288
-f 1288 1316 1317
-f 1294 1288 1317
-f 1294 1317 1315
-f 1315 1318 1299
-f 1315 1319 1318
-v -1.883160 -1.829718 -0.401567
-v -1.933565 -1.993029 -0.438902
-v -1.971059 -1.992958 -0.500845
-v -1.936032 -1.829617 -0.488916
-v -2.035740 -1.981182 -0.547873
-v -2.027242 -1.813012 -0.555232
-v -2.106039 -2.019111 -0.510759
-v -2.126375 -1.866497 -0.502895
-v -2.141621 -2.024301 -0.470257
-v -2.176551 -1.873816 -0.445782
-v -2.120746 -2.045137 -0.411171
-v -2.147113 -1.903198 -0.362462
-v -2.060902 -2.031698 -0.372079
-v -2.062725 -1.884246 -0.307336
-v -1.978344 -2.023535 -0.398257
-v -1.946306 -1.872735 -0.344251
-v -2.446375 -1.893261 -0.494110
-v -2.499138 -2.038090 -0.504529
-v -2.513608 -2.012858 -0.558673
-v -2.466779 -1.857679 -0.570461
-v -2.571019 -1.995375 -0.586230
-v -2.547737 -1.833025 -0.609321
-v -2.641567 -2.003164 -0.575611
-v -2.647220 -1.844010 -0.594347
-v -2.678971 -2.007694 -0.558395
-v -2.699966 -1.850397 -0.570070
-v -2.685663 -2.028649 -0.514928
-v -2.709403 -1.879947 -0.508775
-v -2.667969 -2.036634 -0.471396
-v -2.684452 -1.891207 -0.447388
-v -2.618068 -2.046419 -0.441284
-v -2.614084 -1.905005 -0.404925
-v -2.539874 -2.049824 -0.460098
-v -2.503818 -1.909806 -0.431456
-v -2.065655 -2.124623 -0.368720
-v -1.985123 -2.116661 -0.394256
-v -2.124030 -2.137733 -0.406853
-v -2.144393 -2.117408 -0.464489
-v -2.109684 -2.112345 -0.503997
-v -2.041110 -2.075348 -0.540201
-v -1.978016 -2.086834 -0.494327
-v -1.941442 -2.086904 -0.433904
-v -2.552923 -2.142304 -0.454579
-v -2.513187 -2.130859 -0.497920
-v -2.629199 -2.138983 -0.436227
-v -2.677875 -2.129439 -0.465600
-v -2.695135 -2.121650 -0.508064
-v -2.688607 -2.101208 -0.550465
-v -2.652120 -2.096790 -0.567258
-v -2.583303 -2.089191 -0.577616
-v -2.527301 -2.106246 -0.550735
-v -2.048681 -2.165282 -0.450843
-v -2.603284 -2.176802 -0.510638
-f 1320 1321 1323
-f 1321 1322 1323
-f 1325 1323 1324
-f 1323 1322 1324
-f 1325 1324 1327
-f 1324 1326 1327
-f 1329 1327 1328
-f 1327 1326 1328
-f 1329 1328 1331
-f 1328 1330 1331
-f 1333 1331 1332
-f 1331 1330 1332
-f 1333 1332 1335
-f 1332 1334 1335
-f 1320 1335 1321
-f 1335 1334 1321
-f 1336 1337 1339
-f 1337 1338 1339
-f 1341 1339 1340
-f 1339 1338 1340
-f 1341 1340 1343
-f 1340 1342 1343
-f 1345 1343 1344
-f 1343 1342 1344
-f 1345 1344 1347
-f 1344 1346 1347
-f 1347 1346 1349
-f 1346 1348 1349
-f 1349 1348 1351
-f 1348 1350 1351
-f 1353 1351 1352
-f 1351 1350 1352
-f 1336 1353 1337
-f 1353 1352 1337
-f 1334 1332 1355
-f 1332 1354 1355
-f 1356 1354 1330
-f 1330 1354 1332
-f 1328 1357 1330
-f 1357 1356 1330
-f 1326 1358 1328
-f 1358 1357 1328
-f 1324 1359 1326
-f 1359 1358 1326
-f 1322 1360 1324
-f 1360 1359 1324
-f 1361 1360 1321
-f 1321 1360 1322
-f 1321 1334 1361
-f 1334 1355 1361
-f 1362 1363 1352
-f 1352 1363 1337
-f 1352 1350 1362
-f 1350 1364 1362
-f 1348 1365 1350
-f 1365 1364 1350
-f 1346 1366 1348
-f 1366 1365 1348
-f 1344 1367 1346
-f 1367 1366 1346
-f 1342 1368 1344
-f 1368 1367 1344
-f 1369 1368 1340
-f 1340 1368 1342
-f 1338 1370 1340
-f 1370 1369 1340
-f 1338 1337 1370
-f 1337 1363 1370
-f 1360 1361 1371
-f 1359 1360 1371
-f 1358 1359 1371
-f 1357 1358 1371
-f 1356 1357 1371
-f 1354 1356 1371
-f 1355 1354 1371
-f 1361 1355 1371
-f 1370 1363 1372
-f 1369 1370 1372
-f 1368 1369 1372
-f 1367 1368 1372
-f 1366 1367 1372
-f 1365 1366 1372
-f 1364 1365 1372
-f 1362 1364 1372
-f 1363 1362 1372
-v 4.897808 1.946794 -0.628057
-v 4.925394 1.955229 -0.618837
-v 4.953739 1.952580 -0.592256
-v 4.971872 1.924079 -0.586026
-v 4.953403 1.907939 -0.605609
-v 4.925499 1.917814 -0.613413
-v 4.973133 1.992779 -0.533466
-v 5.001903 1.914398 -0.486724
-v 4.982364 1.873300 -0.536190
-v 4.926194 1.859813 -0.582137
-v 4.852578 1.889721 -0.605031
-v 4.824747 1.946835 -0.626358
-v 4.861611 2.001639 -0.621913
-v 4.935561 2.016016 -0.585700
-f 1373 1374 1378
-f 1374 1375 1378
-f 1378 1375 1377
-f 1375 1376 1377
-f 1375 1379 1376
-f 1379 1380 1376
-f 1380 1381 1376
-f 1376 1381 1377
-f 1377 1381 1382
-f 1383 1378 1382
-f 1378 1377 1382
-f 1384 1373 1383
-f 1373 1378 1383
-f 1373 1384 1385
-f 1379 1375 1386
-f 1386 1375 1374
-v 4.760921 1.881357 -0.613120
-v 4.824747 1.946835 -0.626358
-v 4.852578 1.889721 -0.605031
-v 4.861618 1.854067 -0.618095
-v 4.861611 2.001639 -0.621913
-v 4.842883 2.021333 -0.638025
-v 4.935880 2.051665 -0.572853
-v 4.935561 2.016016 -0.585700
-v 4.991746 2.009819 -0.523206
-v 5.001903 1.914398 -0.486724
-v 4.973133 1.992779 -0.533466
-v 4.926194 1.859813 -0.582137
-v 4.944706 1.840663 -0.575374
-v 4.982364 1.873300 -0.536190
-v 4.991709 1.844295 -0.520761
-v 4.908019 1.796041 -0.587882
-v 4.852582 1.816115 -0.603105
-v 4.963546 1.783161 -0.553515
-v 4.983034 1.806343 -0.505779
-v 5.011430 1.875569 -0.463205
-v 4.918466 2.084725 -0.532713
-v 4.964945 2.053575 -0.499903
-v 5.020077 1.978170 -0.480978
-v 4.825996 2.089176 -0.576083
-v 4.881574 2.094571 -0.539949
-v 4.788476 2.028047 -0.608619
-v 4.751519 2.039658 -0.634134
-v 4.798297 2.118191 -0.591085
-v 4.872539 2.159259 -0.542891
-v 4.927885 2.156560 -0.516579
-v 5.002440 2.105746 -0.468233
-v 5.057495 2.002751 -0.451974
-v 5.075994 1.900999 -0.443793
-v 5.030289 1.827419 -0.440803
-v 4.991904 1.760829 -0.510386
-v 4.936066 1.737668 -0.557276
-v 4.871155 1.741238 -0.592326
-v 4.816181 1.797860 -0.604026
-v 5.095375 1.961238 -0.401516
-v 5.085813 1.888503 -0.408327
-v 5.058179 1.788186 -0.417387
-v 5.019836 1.739907 -0.485562
-v 4.917973 1.681480 -0.544201
-v 4.862636 1.684144 -0.570155
-v 4.752337 1.723388 -0.591296
-v 4.697607 1.768061 -0.576663
-v 5.030641 2.102197 -0.432329
-v 5.067202 2.027704 -0.422291
-v 4.937950 2.181155 -0.486939
-v 4.881855 2.194544 -0.530288
-v 4.807794 2.143653 -0.570393
-v 4.728963 2.036146 -0.614307
-v 4.742358 1.882232 -0.621650
-v 4.744050 2.179337 -0.556057
-v 4.688114 2.046378 -0.604518
-v 4.837331 2.235678 -0.479332
-v 4.893850 2.220523 -0.417713
-v 4.995978 2.148785 -0.344534
-v 5.060840 2.053335 -0.309324
-v 5.097062 1.954206 -0.328795
-v 5.105589 1.864086 -0.347113
-v 4.697024 1.862575 -0.604048
-v 4.739441 2.299169 -0.369987
-v 4.832890 2.262727 -0.283787
-v 4.971394 2.146686 -0.224781
-v 5.072165 2.043630 -0.209228
-v 5.127157 1.942759 -0.211214
-v 5.152698 1.830661 -0.287042
-v 5.133171 1.715563 -0.334258
-v 5.103427 1.624404 -0.434275
-v 4.982822 1.503071 -0.507606
-v 4.927282 1.486953 -0.526327
-v 4.798410 1.473149 -0.570618
-v 4.715646 1.502195 -0.584339
-v 4.615408 1.639641 -0.577768
-v 4.560751 1.785154 -0.562428
-v 4.551484 1.841749 -0.575191
-v 4.533113 1.989009 -0.578975
-v 4.636582 2.263383 -0.471997
-v 4.561299 2.133066 -0.547248
-v 4.912303 2.162645 -0.000090
-v 5.049690 2.032731 0.000071
-v 5.156645 1.942902 -0.119993
-v 5.218821 1.803552 -0.199306
-v 5.216855 1.636645 -0.279797
-v 5.233176 1.442459 -0.362988
-v 4.679116 1.438434 -0.589658
-v 4.596478 1.512987 -0.598982
-v 4.560024 1.604023 -0.589333
-v 4.477781 1.687858 -0.597407
-v 4.459682 1.778884 -0.588185
-v 4.432610 1.878873 -0.577888
-v 4.433020 2.024714 -0.563794
-v 4.634996 2.369115 -0.140117
-v 4.747988 2.300163 -0.000276
-v 4.577573 2.389535 -0.256196
-v 4.472349 2.325133 -0.443764
-v 4.389484 2.190421 -0.473320
-v 5.223191 1.371491 -0.388069
-v 5.158322 1.236770 -0.418043
-v 4.955360 1.236724 -0.505230
-v 4.761601 1.363013 -0.571370
-v 5.177545 1.932323 0.000214
-v 5.321136 1.795562 -0.119606
-v 5.378289 1.768448 0.000441
-v 5.424281 1.721152 0.000496
-v 5.421809 1.685349 -0.123555
-v 5.383208 1.619661 -0.202452
-v 5.373133 1.541142 -0.246712
-v 5.334328 1.402713 -0.332639
-v 5.296963 1.322443 -0.357984
-v 5.260653 1.184173 -0.352062
-v 5.250485 1.123029 -0.385234
-v 4.991713 1.163096 -0.504149
-v 4.733657 1.227371 -0.592883
-v 4.641547 1.285422 -0.622034
-v 4.522247 1.398278 -0.644892
-v 4.430999 1.535753 -0.638888
-v 4.404221 1.662433 -0.616610
-v 4.386380 1.770868 -0.596666
-v 4.377095 1.871713 -0.595743
-v 5.588763 1.573846 0.000686
-v 5.604888 1.546091 -0.113773
-v 5.566339 1.498677 -0.190905
-v 5.528186 1.440180 -0.250666
-v 5.471928 1.345179 -0.313899
-v 5.425783 1.264372 -0.329687
-v 5.397967 1.174238 -0.346802
-v 5.388455 1.119419 -0.351883
-v 5.687035 1.499636 -0.110765
-v 5.741781 1.463956 -0.124891
-v 5.730427 1.435668 -0.209848
-v 5.685194 1.452202 -0.188749
-v 5.710154 1.360653 -0.290072
-v 5.608974 1.317869 -0.319719
-v 5.647186 1.394606 -0.257833
-v 5.681726 1.282503 -0.333871
-v 5.563253 1.235295 -0.317238
-v 5.672187 1.164767 -0.354080
-v 5.580797 1.174135 -0.351054
-v 5.680007 1.510009 0.000786
-v 5.479630 1.111310 -0.364188
-v 5.842092 1.427708 -0.130724
-v 5.915025 1.382159 -0.136820
-v 5.886832 1.385674 -0.172365
-v 5.813217 1.415581 -0.195261
-v 5.908842 1.388968 0.001026
-v 5.963117 1.307775 0.001098
-v 5.979357 1.325532 -0.125337
-v 5.941384 1.330818 -0.178936
-v 5.743997 1.482739 0.000851
-v 5.835498 1.436280 0.000946
-v 5.783731 1.341471 -0.284590
-v 5.847989 1.311569 -0.261476
-v 5.931474 1.233483 -0.215613
-v 5.998088 1.231874 -0.107334
-v 5.963527 1.232407 0.001121
-v 5.927110 1.131195 0.001118
-v 5.961686 1.110978 -0.090324
-v 5.908782 1.066916 0.001121
-v 5.934596 1.054796 -0.077039
-f 1390 1387 1389
-f 1387 1388 1389
-f 1393 1394 1392
-f 1391 1392 1394
-f 1395 1396 1397
-f 1399 1390 1398
-f 1398 1390 1389
-f 1398 1400 1399
-f 1400 1401 1399
-f 1399 1402 1390
-f 1390 1402 1403
-f 1401 1404 1399
-f 1399 1404 1402
-f 1401 1405 1404
-f 1401 1406 1405
-f 1395 1393 1408
-f 1407 1408 1393
-f 1408 1409 1395
-f 1395 1409 1406
-f 1393 1392 1411
-f 1392 1410 1411
-f 1387 1412 1392
-f 1410 1392 1412
-f 1413 1414 1412
-f 1414 1410 1412
-f 1414 1415 1410
-f 1415 1411 1410
-f 1415 1416 1411
-f 1416 1407 1411
-f 1416 1417 1407
-f 1417 1408 1407
-f 1418 1409 1417
-f 1417 1409 1408
-f 1406 1409 1419
-f 1418 1419 1409
-f 1419 1420 1406
-f 1420 1421 1406
-f 1406 1421 1405
-f 1422 1404 1421
-f 1405 1421 1404
-f 1423 1402 1422
-f 1402 1404 1422
-f 1424 1403 1423
-f 1403 1402 1423
-f 1387 1403 1424
-f 1419 1425 1426
-f 1426 1427 1419
-f 1419 1427 1420
-f 1421 1420 1428
-f 1420 1427 1428
-f 1429 1422 1428
-f 1421 1428 1422
-f 1422 1429 1423
-f 1423 1429 1430
-f 1431 1424 1430
-f 1424 1423 1430
-f 1387 1424 1432
-f 1424 1431 1432
-f 1418 1417 1434
-f 1417 1433 1434
-f 1433 1417 1435
-f 1435 1417 1416
-f 1435 1416 1436
-f 1436 1416 1415
-f 1414 1437 1415
-f 1436 1415 1437
-f 1437 1414 1438
-f 1414 1413 1438
-f 1413 1387 1438
-f 1439 1438 1387
-f 1439 1387 1432
-f 1440 1437 1441
-f 1437 1438 1441
-f 1442 1436 1440
-f 1440 1436 1437
-f 1443 1435 1442
-f 1442 1435 1436
-f 1444 1433 1443
-f 1443 1433 1435
-f 1444 1445 1433
-f 1445 1434 1433
-f 1445 1446 1434
-f 1446 1425 1434
-f 1446 1447 1425
-f 1425 1447 1426
-f 1426 1447 1427
-f 1448 1439 1432
-f 1450 1443 1449
-f 1442 1449 1443
-f 1451 1444 1450
-f 1450 1444 1443
-f 1451 1452 1444
-f 1452 1445 1444
-f 1446 1445 1453
-f 1452 1453 1445
-f 1453 1454 1446
-f 1454 1447 1446
-f 1455 1427 1454
-f 1447 1454 1427
-f 1456 1428 1455
-f 1427 1455 1428
-f 1456 1457 1428
-f 1428 1457 1429
-f 1430 1429 1458
-f 1429 1457 1458
-f 1430 1458 1459
-f 1431 1430 1460
-f 1430 1459 1460
-f 1460 1461 1431
-f 1432 1431 1461
-f 1461 1462 1432
-f 1448 1432 1462
-f 1462 1463 1448
-f 1463 1441 1448
-f 1464 1441 1463
-f 1465 1440 1466
-f 1440 1441 1466
-f 1466 1441 1464
-f 1467 1468 1451
-f 1468 1452 1451
-f 1468 1469 1452
-f 1469 1453 1452
-f 1469 1470 1453
-f 1470 1454 1453
-f 1471 1455 1470
-f 1470 1455 1454
-f 1455 1471 1472
-f 1455 1472 1456
-f 1461 1460 1474
-f 1460 1473 1474
-f 1461 1474 1475
-f 1462 1461 1476
-f 1461 1475 1476
-f 1476 1477 1462
-f 1463 1462 1477
-f 1464 1463 1478
-f 1478 1463 1477
-f 1466 1464 1479
-f 1479 1464 1478
-f 1481 1450 1480
-f 1480 1450 1449
-f 1480 1449 1482
-f 1482 1449 1465
-f 1483 1482 1465
-f 1484 1483 1466
-f 1483 1465 1466
-f 1484 1466 1479
-f 1485 1457 1472
-f 1456 1472 1457
-f 1458 1457 1486
-f 1457 1485 1486
-f 1486 1487 1458
-f 1458 1487 1459
-f 1487 1488 1459
-f 1459 1488 1460
-f 1460 1488 1473
-f 1489 1490 1469
-f 1490 1470 1469
-f 1489 1491 1490
-f 1493 1490 1492
-f 1491 1492 1490
-f 1494 1470 1493
-f 1470 1490 1493
-f 1470 1494 1471
-f 1494 1495 1471
-f 1471 1495 1472
-f 1495 1496 1472
-f 1472 1496 1485
-f 1496 1497 1485
-f 1498 1486 1497
-f 1485 1497 1486
-f 1486 1498 1499
-f 1499 1500 1486
-f 1486 1500 1487
-f 1500 1501 1487
-f 1488 1487 1501
-f 1473 1488 1502
-f 1488 1501 1502
-f 1502 1503 1473
-f 1474 1473 1503
-f 1503 1504 1474
-f 1475 1474 1504
-f 1475 1504 1476
-f 1476 1504 1505
-f 1505 1506 1476
-f 1506 1477 1476
-f 1477 1506 1478
-f 1507 1478 1506
-f 1493 1492 1509
-f 1492 1508 1509
-f 1509 1510 1493
-f 1493 1510 1494
-f 1494 1510 1495
-f 1510 1511 1495
-f 1495 1511 1496
-f 1511 1512 1496
-f 1512 1513 1496
-f 1496 1513 1497
-f 1497 1513 1498
-f 1513 1514 1498
-f 1499 1498 1515
-f 1498 1514 1515
-f 1516 1517 1519
-f 1517 1518 1519
-f 1520 1521 1522
-f 1524 1521 1523
-f 1521 1520 1523
-f 1525 1526 1523
-f 1524 1523 1526
-f 1527 1516 1508
-f 1516 1509 1508
-f 1510 1509 1519
-f 1509 1516 1519
-f 1522 1511 1519
-f 1519 1511 1510
-f 1512 1511 1521
-f 1511 1522 1521
-f 1521 1524 1512
-f 1512 1524 1513
-f 1526 1514 1524
-f 1513 1524 1514
-f 1526 1528 1514
-f 1514 1528 1515
-f 1529 1530 1532
-f 1530 1531 1532
-f 1534 1535 1533
-f 1533 1535 1530
-f 1536 1531 1535
-f 1530 1535 1531
-f 1529 1517 1538
-f 1537 1538 1517
-f 1517 1529 1518
-f 1529 1532 1518
-f 1532 1539 1518
-f 1518 1539 1520
-f 1531 1540 1532
-f 1532 1540 1539
-f 1541 1540 1536
-f 1531 1536 1540
-f 1535 1542 1536
-f 1535 1534 1542
-f 1534 1543 1542
-f 1536 1542 1541
-f 1542 1543 1545
-f 1543 1544 1545
-f 1544 1546 1545
-f 1546 1547 1545
-v 5.908782 1.066916 0.001121
-v 5.871947 1.021428 0.001102
-v 5.897758 1.009309 -0.080583
-v 5.934596 1.054796 -0.077039
-v 5.878630 0.986485 -0.128292
-v 5.923808 1.025283 -0.153084
-f 1549 1550 1548
-f 1548 1550 1551
-f 1551 1550 1553
-f 1550 1552 1553
-v 5.961686 1.110978 -0.090324
-v 5.934596 1.054796 -0.077039
-v 5.923808 1.025283 -0.153084
-v 5.950684 1.082725 -0.175648
-v 5.800778 1.078596 -0.319450
-v 5.884856 1.062202 -0.249545
-v 5.857750 0.997026 -0.236768
-v 5.755282 1.004149 -0.307505
-v 5.763952 1.062109 -0.338641
-v 5.912147 1.117911 -0.254197
-v 5.959462 1.157227 -0.187097
-f 1554 1555 1557
-f 1555 1556 1557
-f 1561 1562 1560
-f 1562 1558 1560
-f 1558 1559 1560
-f 1557 1559 1564
-f 1563 1564 1559
-f 1560 1559 1556
-f 1559 1557 1556
-v 5.923808 1.025283 -0.153084
-v 5.878630 0.986485 -0.128292
-v 5.757506 0.957900 -0.210732
-v 5.857750 0.997026 -0.236768
-v 5.755282 1.004149 -0.307505
-v 5.674999 0.950754 -0.227960
-f 1567 1568 1566
-f 1565 1566 1568
-f 1568 1567 1569
-f 1569 1567 1570
-v 5.800778 1.078596 -0.319450
-v 5.837875 1.141493 -0.305184
-v 5.912147 1.117911 -0.254197
-v 5.884856 1.062202 -0.249545
-v 5.672187 1.164767 -0.354080
-v 5.773410 1.225861 -0.323025
-v 5.681726 1.282503 -0.333871
-v 5.764774 1.279824 -0.308562
-v 5.710154 1.360653 -0.290072
-v 5.783731 1.341471 -0.284590
-f 1571 1572 1574
-f 1572 1573 1574
-f 1575 1576 1571
-f 1576 1572 1571
-f 1577 1578 1575
-f 1578 1576 1575
-f 1577 1579 1578
-f 1579 1580 1578
-v 5.895899 1.182730 -0.164705
-v 5.959462 1.157227 -0.187097
-v 5.912147 1.117911 -0.254197
-v 5.849792 1.193480 -0.181047
-v 5.837875 1.141493 -0.305184
-v 5.803425 1.260787 -0.210002
-v 5.840665 1.221942 -0.187128
-v 5.773410 1.225861 -0.323025
-v 5.764774 1.279824 -0.308562
-v 5.783731 1.341471 -0.284590
-v 5.847989 1.311569 -0.261476
-v 5.931474 1.233483 -0.215613
-v 5.998088 1.231874 -0.107334
-v 5.672385 1.007694 -0.341778
-v 5.755282 1.004149 -0.307505
-v 5.674999 0.950754 -0.227960
-v 5.573803 0.952578 -0.243886
-v 5.580727 0.999330 -0.349867
-v 5.535184 0.980180 -0.341257
-f 1581 1582 1583
-f 1585 1584 1583
-f 1584 1581 1583
-f 1587 1588 1586
-f 1586 1588 1589
-f 1586 1589 1590
-f 1586 1590 1591
-f 1592 1587 1591
-f 1586 1591 1587
-f 1587 1592 1584
-f 1593 1581 1592
-f 1592 1581 1584
-f 1594 1595 1597
-f 1595 1596 1597
-f 1598 1594 1597
-f 1598 1597 1599
-v 5.690122 1.092917 -0.370850
-v 5.763952 1.062109 -0.338641
-v 5.681086 1.054964 -0.355860
-v 5.672187 1.164767 -0.354080
-v 5.800778 1.078596 -0.319450
-v 5.580797 1.174135 -0.351054
-v 5.598282 1.094735 -0.386994
-v 5.479630 1.111310 -0.364188
-v 5.470775 1.009574 -0.355371
-v 5.580223 1.047470 -0.372696
-v 5.672385 1.007694 -0.341778
-v 5.580727 0.999330 -0.349867
-v 5.535184 0.980180 -0.341257
-v 5.388455 1.119419 -0.351883
-v 5.425352 1.035967 -0.342720
-v 5.434594 0.970412 -0.330823
-v 5.480649 0.941387 -0.316248
-v 5.379461 1.045817 -0.349748
-v 5.370709 0.980272 -0.337432
-v 5.373646 0.885375 -0.208840
-f 1600 1601 1602
-f 1604 1601 1603
-f 1603 1601 1600
-f 1605 1603 1606
-f 1603 1600 1606
-f 1605 1606 1607
-f 1607 1606 1608
-f 1602 1609 1600
-f 1606 1600 1609
-f 1602 1610 1609
-f 1609 1610 1611
-f 1609 1608 1606
-f 1608 1609 1612
-f 1609 1611 1612
-f 1613 1607 1614
-f 1607 1608 1614
-f 1614 1608 1615
-f 1608 1612 1615
-f 1612 1616 1615
-f 1613 1614 1617
-f 1618 1617 1615
-f 1617 1614 1615
-f 1615 1616 1619
-f 1618 1615 1619
-v 5.573803 0.952578 -0.243886
-v 5.674999 0.950754 -0.227960
-v 5.638369 0.904402 -0.222548
-v 5.546347 0.916044 -0.246782
-v 5.757506 0.957900 -0.210732
-v 5.748613 0.920490 -0.205099
-f 1621 1622 1620
-f 1620 1622 1623
-f 1625 1622 1624
-f 1621 1624 1622
-v 5.480649 0.941387 -0.316248
-v 5.546347 0.916044 -0.246782
-v 5.511556 0.863525 -0.177613
-v 5.373646 0.885375 -0.208840
-v 5.638369 0.904402 -0.222548
-v 5.603370 0.852748 -0.162335
-v 5.748613 0.920490 -0.205099
-v 5.704630 0.849158 -0.128130
-v 5.250485 1.123029 -0.385234
-v 5.388455 1.119419 -0.351883
-v 5.379461 1.045817 -0.349748
-v 5.241466 1.040469 -0.383965
-v 5.370709 0.980272 -0.337432
-v 5.223571 0.974029 -0.362117
-v 5.299005 0.908991 -0.260177
-v 5.197562 0.922406 -0.302473
-f 1629 1626 1628
-f 1626 1627 1628
-f 1628 1627 1631
-f 1627 1630 1631
-f 1633 1631 1632
-f 1630 1632 1631
-f 1637 1634 1636
-f 1634 1635 1636
-f 1639 1637 1638
-f 1637 1636 1638
-f 1638 1629 1640
-f 1638 1640 1639
-f 1639 1640 1641
-v 5.878630 0.986485 -0.128292
-v 5.851404 0.929008 -0.105362
-v 5.748613 0.920490 -0.205099
-v 5.757506 0.957900 -0.210732
-v 5.871947 1.021428 0.001102
-v 5.836005 0.945722 0.001092
-v 5.897758 1.009309 -0.080583
-f 1642 1643 1645
-f 1643 1644 1645
-f 1646 1647 1648
-f 1648 1647 1642
-f 1647 1643 1642
-v 5.836005 0.945722 0.001092
-v 5.780790 0.891286 0.001059
-v 5.797411 0.880032 -0.072306
-v 5.851404 0.929008 -0.105362
-v 5.704630 0.849158 -0.128130
-v 5.748613 0.920490 -0.205099
-v 5.679621 0.839500 0.000985
-v 5.568745 0.834653 -0.071390
-v 5.579253 0.837796 0.000896
-v 5.449164 0.847535 -0.103909
-v 5.603370 0.852748 -0.162335
-v 5.247762 0.848549 -0.108546
-v 5.213434 0.856784 0.000565
-v 5.112563 0.840686 0.000480
-v 5.137075 0.824518 -0.144842
-v 5.356900 0.851120 -0.138324
-v 5.511556 0.863525 -0.177613
-v 5.264430 0.855571 -0.181694
-v 5.373646 0.885375 -0.208840
-v 5.323232 0.866039 0.000660
-v 5.469641 0.838722 0.000798
-v 5.299005 0.908991 -0.260177
-v 5.197562 0.922406 -0.302473
-v 5.153735 0.831575 -0.218348
-v 4.920855 0.812339 0.000318
-v 4.963526 0.797382 -0.143440
-v 4.996710 0.810560 -0.280771
-v 4.712067 0.770512 -0.333393
-v 4.669690 0.738163 -0.188296
-v 4.655453 0.758022 0.000098
-v 5.004627 0.908637 -0.345273
-v 4.728809 0.878731 -0.405801
-v 5.011084 1.066770 -0.458562
-v 5.241466 1.040469 -0.383965
-v 5.223571 0.974029 -0.362117
-v 5.021254 0.951308 -0.405567
-v 4.733657 1.227371 -0.592883
-v 4.991713 1.163096 -0.504149
-v 4.743250 1.059210 -0.563421
-v 4.744871 0.950945 -0.491082
-v 4.641547 1.285422 -0.622034
-v 4.567896 1.149805 -0.642484
-v 4.496191 1.024566 -0.579491
-v 4.416475 0.921264 -0.458839
-v 4.333503 0.951176 -0.481517
-v 4.399629 0.850459 -0.391855
-v 4.297891 0.911506 -0.447987
-v 4.380854 0.704574 -0.000130
-v 4.359048 0.700414 -0.166651
-v 4.319799 0.731007 -0.291212
-v 4.216374 0.852328 -0.405873
-v 4.449011 1.260929 -0.647431
-v 4.366867 1.131136 -0.630581
-v 4.141189 1.008775 -0.499342
-v 4.277227 1.077746 -0.550819
-v 4.085564 1.288885 -0.544406
-v 4.175444 1.350332 -0.613988
-v 4.247733 1.381058 -0.649596
-v 4.329607 1.464801 -0.661485
-v 4.430999 1.535753 -0.638888
-v 4.522247 1.398278 -0.644892
-v 4.312225 1.683392 -0.639944
-v 4.404221 1.662433 -0.616610
-v 4.303615 1.799914 -0.610388
-v 4.386380 1.770868 -0.596666
-v 4.304562 1.906537 -0.572242
-v 4.377095 1.871713 -0.595743
-v 4.240116 1.770049 -0.583946
-v 4.221814 1.660769 -0.594090
-v 4.121121 1.614451 -0.587188
-v 4.067576 1.572668 -0.534997
-v 4.148883 1.759918 -0.573765
-v 4.076852 1.746601 -0.527436
-v 4.747988 2.300163 -0.000276
-v 4.912303 2.162645 -0.000090
-v 4.971394 2.146686 -0.224781
-v 4.832890 2.262727 -0.283787
-v 5.049690 2.032731 0.000071
-v 5.177545 1.932323 0.000214
-v 5.156645 1.942902 -0.119993
-v 5.680007 1.510009 0.000786
-v 5.743997 1.482739 0.000851
-v 5.741781 1.463956 -0.124891
-v 5.687035 1.499636 -0.110765
-v 5.835498 1.436280 0.000946
-v 5.908842 1.388968 0.001026
-v 5.915025 1.382159 -0.136820
-v 5.842092 1.427708 -0.130724
-v 4.342351 2.581176 -0.140317
-v 4.317602 2.588926 -0.000745
-v 4.454962 2.523303 -0.000603
-v 4.452383 2.524558 -0.130255
-v 4.332083 2.586481 -0.194917
-v 4.440143 2.510529 -0.269164
-v 4.339601 2.592642 -0.258891
-v 4.429895 2.495758 -0.306894
-v 4.187258 2.590221 -0.135844
-v 4.189883 2.606916 -0.000863
-v 4.203325 2.589186 -0.219164
-v 4.211652 2.602538 -0.264011
-v 4.209941 2.600612 -0.337597
-v 4.328606 2.563996 -0.343892
-v 4.410844 2.500167 -0.351972
-f 1652 1649 1651
-f 1649 1650 1651
-f 1654 1652 1653
-f 1652 1651 1653
-f 1651 1650 1655
-f 1656 1653 1655
-f 1651 1655 1653
-f 1655 1657 1656
-f 1658 1659 1656
-f 1653 1656 1659
-f 1663 1660 1662
-f 1660 1661 1662
-f 1659 1658 1665
-f 1658 1664 1665
-f 1665 1664 1667
-f 1664 1666 1667
-f 1668 1661 1660
-f 1658 1656 1669
-f 1656 1657 1669
-f 1660 1658 1668
-f 1658 1669 1668
-f 1664 1658 1660
-f 1664 1660 1666
-f 1670 1667 1666
-f 1671 1670 1672
-f 1670 1666 1672
-f 1660 1663 1666
-f 1666 1663 1672
-f 1673 1674 1662
-f 1663 1662 1674
-f 1675 1672 1674
-f 1672 1663 1674
-f 1674 1677 1675
-f 1676 1675 1677
-f 1674 1673 1677
-f 1673 1678 1677
-f 1679 1671 1675
-f 1671 1672 1675
-f 1680 1679 1676
-f 1679 1675 1676
-f 1682 1683 1681
-f 1681 1683 1684
-f 1684 1683 1679
-f 1683 1671 1679
-f 1685 1686 1687
-f 1686 1681 1687
-f 1688 1687 1684
-f 1687 1681 1684
-f 1688 1684 1680
-f 1684 1679 1680
-f 1687 1690 1685
-f 1689 1685 1690
-f 1688 1691 1687
-f 1690 1687 1691
-f 1692 1691 1680
-f 1691 1688 1680
-f 1694 1695 1692
-f 1693 1692 1695
-f 1677 1678 1697
-f 1678 1696 1697
-f 1698 1676 1697
-f 1676 1677 1697
-f 1694 1676 1698
-f 1698 1699 1694
-f 1694 1699 1695
-f 1676 1694 1680
-f 1694 1692 1680
-f 1691 1701 1690
-f 1700 1690 1701
-f 1702 1695 1699
-f 1703 1693 1702
-f 1702 1693 1695
-f 1705 1703 1704
-f 1704 1703 1702
-f 1693 1691 1692
-f 1693 1703 1691
-f 1703 1701 1691
-f 1703 1705 1701
-f 1705 1706 1701
-f 1701 1706 1700
-f 1706 1707 1700
-f 1700 1707 1709
-f 1707 1708 1709
-f 1707 1710 1708
-f 1710 1711 1708
-f 1712 1713 1710
-f 1713 1711 1710
-f 1714 1715 1712
-f 1715 1713 1712
-f 1717 1716 1710
-f 1716 1712 1710
-f 1706 1717 1707
-f 1717 1710 1707
-f 1717 1706 1718
-f 1718 1706 1705
-f 1704 1719 1705
-f 1719 1718 1705
-f 1718 1720 1717
-f 1720 1716 1717
-f 1719 1721 1718
-f 1721 1720 1718
-f 1722 1723 1725
-f 1723 1724 1725
-f 1726 1727 1728
-f 1731 1732 1730
-f 1729 1730 1732
-f 1735 1736 1734
-f 1733 1734 1736
-f 1738 1739 1737
-f 1737 1739 1740
-f 1742 1741 1740
-f 1741 1737 1740
-f 1741 1742 1743
-f 1743 1742 1744
-f 1737 1745 1738
-f 1745 1746 1738
-f 1737 1741 1745
-f 1747 1745 1741
-f 1743 1748 1741
-f 1748 1747 1741
-f 1750 1749 1743
-f 1749 1748 1743
-f 1743 1744 1750
-f 1750 1744 1751
-v 4.224730 2.624525 -0.491916
-v 4.209941 2.600612 -0.337597
-v 4.328606 2.563996 -0.343892
-v 4.344028 2.585635 -0.470949
-v 4.410844 2.500167 -0.351972
-v 4.407729 2.531640 -0.486692
-v 4.277169 2.652435 -0.591369
-v 4.359483 2.615839 -0.596817
-v 4.423033 2.561337 -0.603562
-v 4.356680 2.682996 -0.719050
-v 4.411541 2.663824 -0.713132
-v 4.476090 2.606654 -0.692301
-v 4.418954 2.707401 -0.782531
-v 4.465268 2.695425 -0.757267
-v 4.520603 2.639162 -0.745542
-v 4.509555 2.719807 -0.819972
-v 4.546655 2.709095 -0.803780
-v 4.574545 2.669863 -0.780363
-f 1752 1753 1755
-f 1753 1754 1755
-f 1754 1756 1755
-f 1755 1756 1757
-f 1752 1755 1758
-f 1758 1755 1759
-f 1755 1757 1759
-f 1759 1757 1760
-f 1758 1759 1761
-f 1761 1759 1762
-f 1762 1759 1763
-f 1759 1760 1763
-f 1764 1761 1765
-f 1761 1762 1765
-f 1763 1766 1762
-f 1762 1766 1765
-f 1765 1768 1764
-f 1767 1764 1768
-f 1766 1769 1765
-f 1765 1769 1768
-v 4.528082 2.467537 -0.000521
-v 4.747988 2.300163 -0.000276
-v 4.634996 2.369115 -0.140117
-v 4.452383 2.524558 -0.130255
-v 4.454962 2.523303 -0.000603
-v 4.577573 2.389535 -0.256196
-v 4.440143 2.510529 -0.269164
-v 4.429895 2.495758 -0.306894
-v 4.474318 2.418432 -0.361347
-v 4.410844 2.500167 -0.351972
-f 1770 1771 1772
-f 1775 1773 1772
-f 1772 1773 1770
-f 1773 1774 1770
-f 1776 1773 1775
-f 1777 1776 1775
-f 1778 1779 1777
-v 4.407729 2.531640 -0.486692
-v 4.410844 2.500167 -0.351972
-v 4.474318 2.418432 -0.361347
-v 4.443850 2.449921 -0.495432
-v 4.423033 2.561337 -0.603562
-v 4.440760 2.490353 -0.629287
-v 4.476090 2.606654 -0.692301
-v 4.484667 2.534451 -0.708888
-v 4.520603 2.639162 -0.745542
-v 4.520165 2.557971 -0.762427
-v 4.574545 2.669863 -0.780363
-v 4.592620 2.569879 -0.790452
-v 4.656565 2.680542 -0.799684
-v 4.674691 2.598833 -0.808006
-v 4.646703 2.728688 -0.822295
-v 4.546655 2.709095 -0.803780
-v 4.636909 2.750501 -0.856859
-v 4.509555 2.719807 -0.819972
-v 4.748031 2.683805 -0.800044
-v 4.729447 2.606204 -0.807513
-v 4.728931 2.721892 -0.832625
-v 4.719171 2.751091 -0.865965
-v 4.821325 2.691794 -0.791887
-v 4.821336 2.621498 -0.789636
-v 4.811798 2.728680 -0.815406
-v 4.801436 2.750224 -0.858918
-v 5.096148 2.759720 -0.774729
-f 1782 1783 1781
-f 1780 1781 1783
-f 1785 1784 1783
-f 1784 1780 1783
-f 1784 1785 1786
-f 1786 1785 1787
-f 1788 1786 1789
-f 1786 1787 1789
-f 1790 1788 1791
-f 1788 1789 1791
-f 1791 1793 1790
-f 1792 1790 1793
-f 1795 1790 1794
-f 1794 1790 1792
-f 1797 1795 1796
-f 1796 1795 1794
-f 1792 1793 1798
-f 1798 1793 1799
-f 1792 1798 1794
-f 1800 1794 1798
-f 1801 1796 1800
-f 1796 1794 1800
-f 1799 1803 1798
-f 1802 1798 1803
-f 1804 1800 1802
-f 1800 1798 1802
-f 1805 1801 1804
-f 1801 1800 1804
-f 1806 1805 1804
-f 1806 1804 1802
-f 1806 1802 1803
-v 4.474318 2.418432 -0.361347
-v 4.429895 2.495758 -0.306894
-v 4.577573 2.389535 -0.256196
-v 4.472349 2.325133 -0.443764
-f 1807 1808 1809
-f 1807 1809 1810
-v 4.442912 2.343263 -0.533220
-v 4.443850 2.449921 -0.495432
-v 4.474318 2.418432 -0.361347
-v 4.472349 2.325133 -0.443764
-v 4.440713 2.398472 -0.629128
-v 4.440760 2.490353 -0.629287
-v 4.484667 2.534451 -0.708888
-v 4.474625 2.465214 -0.751890
-v 4.314039 2.329460 -0.577510
-v 4.320630 2.385528 -0.682583
-v 4.296769 2.260422 -0.528796
-v 4.382053 2.433474 -0.798757
-v 4.520165 2.557971 -0.762427
-v 4.538177 2.513353 -0.776566
-v 4.444739 2.475795 -0.860515
-v 4.592620 2.569879 -0.790452
-v 4.601515 2.533324 -0.794193
-v 4.554459 2.511417 -0.850571
-v 4.674691 2.598833 -0.808006
-v 4.683344 2.554221 -0.821927
-v 4.681847 2.551036 -0.886235
-v 4.737893 2.564648 -0.830389
-v 4.755192 2.568818 -0.876311
-v 4.829566 2.580797 -0.821827
-v 4.856249 2.593812 -0.867067
-v 4.729447 2.606204 -0.807513
-v 4.821336 2.621498 -0.789636
-v 4.662221 2.556346 -0.940618
-v 4.497719 2.547480 -0.937659
-v 4.763337 2.590834 -0.929248
-v 4.883022 2.613658 -0.893163
-v 4.352603 2.524888 -0.890532
-v 4.262798 2.490674 -0.818316
-v 4.192789 2.411967 -0.668016
-v 4.193959 2.370476 -0.616705
-v 4.113935 2.334131 -0.526471
-v 5.096148 2.759720 -0.774729
-v 4.735139 2.645464 -0.950890
-v 4.854957 2.660227 -0.924310
-v 4.615662 2.633870 -0.977986
-v 4.460582 2.622875 -0.957002
-v 4.343217 2.589542 -0.893106
-v 4.244622 2.554467 -0.811726
-v 4.138687 2.474013 -0.642311
-v 4.121994 2.458034 -0.570029
-v 4.078510 2.411810 -0.472193
-v 4.235494 2.636171 -0.803613
-v 4.342998 2.664049 -0.904347
-v 4.460786 2.695616 -0.949972
-v 4.624800 2.708372 -0.989445
-v 4.138494 2.557838 -0.652651
-v 4.104292 2.537976 -0.543437
-v 4.088356 2.510913 -0.453793
-f 1813 1814 1812
-f 1811 1812 1814
-f 1812 1811 1816
-f 1815 1816 1811
-f 1815 1818 1816
-f 1817 1816 1818
-f 1820 1815 1819
-f 1815 1811 1819
-f 1814 1821 1811
-f 1819 1811 1821
-f 1820 1822 1815
-f 1818 1815 1822
-f 1818 1824 1817
-f 1823 1817 1824
-f 1824 1818 1825
-f 1818 1822 1825
-f 1826 1823 1827
-f 1823 1824 1827
-f 1825 1828 1824
-f 1827 1824 1828
-f 1830 1829 1827
-f 1829 1826 1827
-f 1828 1831 1827
-f 1830 1827 1831
-f 1833 1832 1831
-f 1832 1830 1831
-f 1833 1835 1832
-f 1834 1832 1835
-f 1832 1836 1830
-f 1836 1829 1830
-f 1837 1836 1834
-f 1836 1832 1834
-f 1839 1838 1828
-f 1838 1831 1828
-f 1840 1833 1838
-f 1831 1838 1833
-f 1841 1835 1840
-f 1835 1833 1840
-f 1842 1839 1825
-f 1828 1825 1839
-f 1843 1842 1822
-f 1842 1825 1822
-f 1843 1822 1844
-f 1822 1820 1844
-f 1819 1845 1820
-f 1844 1820 1845
-f 1821 1846 1819
-f 1846 1845 1819
-f 1841 1847 1835
-f 1841 1840 1849
-f 1840 1848 1849
-f 1850 1848 1838
-f 1838 1848 1840
-f 1838 1839 1850
-f 1839 1851 1850
-f 1839 1842 1851
-f 1842 1852 1851
-f 1853 1852 1843
-f 1843 1852 1842
-f 1853 1843 1854
-f 1844 1854 1843
-f 1841 1849 1847
-f 1855 1854 1845
-f 1854 1844 1845
-f 1845 1846 1855
-f 1855 1846 1856
-f 1857 1858 1853
-f 1853 1858 1852
-f 1852 1858 1851
-f 1858 1859 1851
-f 1859 1860 1851
-f 1851 1860 1850
-f 1854 1861 1853
-f 1861 1857 1853
-f 1862 1861 1855
-f 1861 1854 1855
-f 1855 1856 1862
-f 1863 1862 1856
-v 4.063205 2.509679 -0.342987
-v 4.088356 2.510913 -0.453793
-v 4.078510 2.411810 -0.472193
-v 4.043796 2.386524 -0.400392
-v 4.055262 2.505284 -0.297282
-v 4.035753 2.399538 -0.343957
-f 1864 1865 1867
-f 1865 1866 1867
-f 1864 1867 1868
-f 1868 1867 1869
-v 4.624800 2.708372 -0.989445
-v 4.753015 2.699695 -0.973279
-v 4.735139 2.645464 -0.950890
-v 4.615662 2.633870 -0.977986
-v 4.863709 2.722151 -0.936660
-v 4.854957 2.660227 -0.924310
-f 1871 1872 1870
-f 1870 1872 1873
-f 1872 1871 1875
-f 1871 1874 1875
-v 4.187258 2.590221 -0.135844
-v 4.084506 2.570978 -0.218168
-v 4.079812 2.571649 -0.000951
-v 4.189883 2.606916 -0.000863
-v 4.203325 2.589186 -0.219164
-v 4.101754 2.557092 -0.265856
-v 4.211652 2.602538 -0.264011
-v 4.100907 2.560626 -0.302396
-v 4.209941 2.600612 -0.337597
-v 4.117367 2.568514 -0.384500
-f 1877 1878 1876
-f 1876 1878 1879
-f 1876 1880 1877
-f 1880 1881 1877
-f 1883 1881 1882
-f 1882 1881 1880
-f 1883 1882 1885
-f 1884 1885 1882
-v 4.224730 2.624525 -0.491916
-v 4.151183 2.579059 -0.494606
-v 4.117367 2.568514 -0.384500
-v 4.209941 2.600612 -0.337597
-v 4.636909 2.750501 -0.856859
-v 4.616626 2.749486 -0.939333
-v 4.462368 2.725999 -0.882675
-v 4.509555 2.719807 -0.819972
-v 4.354196 2.711836 -0.826545
-v 4.418954 2.707401 -0.782531
-v 4.273414 2.686575 -0.753674
-v 4.356680 2.682996 -0.719050
-v 4.277169 2.652435 -0.591369
-v 4.176065 2.636883 -0.618384
-f 1889 1886 1888
-f 1886 1887 1888
-f 1891 1892 1890
-f 1890 1892 1893
-f 1892 1894 1893
-f 1893 1894 1895
-f 1896 1897 1894
-f 1895 1894 1897
-f 1887 1886 1899
-f 1886 1898 1899
-v 4.035753 2.399538 -0.343957
-v 4.000110 2.424158 -0.313254
-v 4.029016 2.519175 -0.249385
-v 4.055262 2.505284 -0.297282
-v 4.024214 2.527933 -0.000987
-v 3.988172 2.489642 -0.001008
-v 4.079812 2.571649 -0.000951
-v 4.084506 2.570978 -0.218168
-v 4.101754 2.557092 -0.265856
-v 4.100907 2.560626 -0.302396
-v 4.063205 2.509679 -0.342987
-v 4.117367 2.568514 -0.384500
-v 4.088356 2.510913 -0.453793
-f 1902 1903 1901
-f 1900 1901 1903
-f 1901 1905 1902
-f 1904 1902 1905
-f 1904 1906 1902
-f 1906 1907 1902
-f 1907 1908 1902
-f 1902 1908 1903
-f 1910 1903 1909
-f 1903 1908 1909
-f 1912 1910 1911
-f 1910 1909 1911
-v 4.088356 2.510913 -0.453793
-v 4.117367 2.568514 -0.384500
-v 4.151183 2.579059 -0.494606
-v 4.104292 2.537976 -0.543437
-v 4.176065 2.636883 -0.618384
-v 4.277169 2.652435 -0.591369
-v 4.356680 2.682996 -0.719050
-v 4.273414 2.686575 -0.753674
-v 4.138494 2.557838 -0.652651
-v 4.235494 2.636171 -0.803613
-v 4.354196 2.711836 -0.826545
-v 4.342998 2.664049 -0.904347
-v 4.462368 2.725999 -0.882675
-v 4.460786 2.695616 -0.949972
-v 4.636909 2.750501 -0.856859
-v 4.719171 2.751091 -0.865965
-v 4.735445 2.749285 -0.940329
-v 4.616626 2.749486 -0.939333
-v 4.801436 2.750224 -0.858918
-v 4.827733 2.754390 -0.905049
-v 5.096148 2.759720 -0.774729
-v 4.624800 2.708372 -0.989445
-v 4.753015 2.699695 -0.973279
-v 4.863709 2.722151 -0.936660
-f 1914 1915 1913
-f 1913 1915 1916
-f 1917 1918 1920
-f 1918 1919 1920
-f 1915 1917 1916
-f 1916 1917 1921
-f 1921 1917 1922
-f 1917 1920 1922
-f 1922 1920 1924
-f 1920 1923 1924
-f 1924 1923 1926
-f 1923 1925 1926
-f 1929 1930 1928
-f 1927 1928 1930
-f 1929 1928 1932
-f 1931 1932 1928
-f 1932 1931 1933
-f 1926 1925 1934
-f 1925 1930 1934
-f 1935 1934 1929
-f 1930 1929 1934
-f 1935 1929 1936
-f 1936 1929 1932
-f 1936 1932 1933
-v 3.787342 2.396113 -0.001159
-v 3.988172 2.489642 -0.001008
-v 4.000110 2.424158 -0.313254
-v 3.828001 2.352540 -0.233341
-v 3.961908 2.347745 -0.374747
-v 3.870548 2.292106 -0.368964
-v 4.035753 2.399538 -0.343957
-v 4.043796 2.386524 -0.400392
-v 4.025364 2.359300 -0.402597
-v 4.077563 2.305187 -0.510338
-v 3.967085 2.280648 -0.537643
-v 3.903911 2.241501 -0.512468
-v 3.857922 2.141554 -0.521067
-v 3.823349 2.141733 -0.428356
-v 4.078510 2.411810 -0.472193
-v 4.113935 2.334131 -0.526471
-v 4.112302 2.285832 -0.595500
-v 4.010847 2.270246 -0.622149
-v 3.928869 2.223919 -0.615683
-v 3.892378 2.149432 -0.603589
-v 4.146067 2.278102 -0.707372
-v 4.044730 2.254459 -0.744209
-v 3.990744 2.205448 -0.710795
-v 3.945464 2.130100 -0.689536
-v 4.296769 2.260422 -0.528796
-v 4.212974 2.303184 -0.587113
-v 4.212058 2.279450 -0.625927
-v 4.229332 2.274522 -0.672749
-v 4.172143 2.303394 -0.778972
-v 4.079122 2.264104 -0.845010
-v 4.024700 2.187859 -0.814219
-v 4.273005 2.310529 -0.762172
-v 4.215419 2.350484 -0.885764
-v 4.104864 2.298353 -0.915735
-v 4.059714 2.194906 -0.888152
-v 4.061989 2.231988 -1.178382
-v 4.102304 2.299960 -1.025862
-v 4.155551 2.388662 -1.091960
-v 4.097362 2.366600 -1.239986
-v 4.194233 2.408334 -1.008471
-v 4.307092 2.367482 -0.877202
-v 4.266263 2.421651 -1.054799
-v 4.228523 2.435029 -1.098575
-v 4.170470 2.458441 -1.241846
-v 4.094116 2.426172 -1.381032
-v 4.058311 2.293363 -1.338054
-v 4.046673 2.341349 -1.452530
-v 4.047406 2.207209 -1.015108
-v 3.989434 2.118832 -0.765086
-v 4.022592 2.123052 -0.903284
-v 4.020299 2.141675 -1.002365
-v 4.036947 1.992167 -1.072561
-v 4.024858 2.106568 -1.208099
-v 4.082988 2.175805 -1.450930
-v 4.103303 2.038565 -1.363737
-v 4.152166 1.868775 -1.225002
-v 4.031515 1.968248 -0.918460
-v 4.127903 1.828359 -1.090512
-v 3.922437 1.972461 -0.483563
-v 3.966639 1.969285 -0.549291
-v 3.982910 1.987391 -0.639809
-v 4.094112 1.889281 -0.578435
-v 4.059885 1.860460 -0.470087
-v 4.017509 1.996169 -0.731654
-v 4.150297 1.820575 -0.917046
-v 4.472349 2.325133 -0.443764
-v 4.389484 2.190421 -0.473320
-v 4.314791 2.142163 -0.540650
-v 4.342700 2.112281 -0.516692
-v 4.305411 2.059245 -0.539407
-v 4.433020 2.024714 -0.563794
-v 4.148927 2.388726 -1.376879
-v 4.101726 2.312318 -1.438163
-v 4.149438 2.340550 -1.353693
-v 4.169404 2.306276 -1.284031
-v 4.140097 2.295949 -1.367196
-v 4.129926 2.308770 -1.402259
-v 4.141759 2.279958 -1.295340
-v 4.197644 2.394643 -1.248646
-v 4.197516 2.349135 -1.253043
-v 4.199317 2.304652 -1.174540
-v 4.274886 2.220030 -0.679075
-v 4.267320 2.121987 -0.614940
-v 4.380990 2.207701 -0.839016
-v 4.354411 2.102985 -0.802580
-v 4.369751 2.298204 -0.921894
-v 4.303193 2.347123 -1.044413
-v 4.245861 2.375093 -1.141312
-v 4.218457 2.356834 -1.142444
-v 4.275405 2.319905 -1.046400
-v 4.296538 2.243779 -0.925459
-v 4.289048 2.172969 -0.858693
-v 4.211815 2.282490 -1.039137
-v 4.278045 1.976660 -0.537351
-v 4.290375 2.112337 -0.800190
-v 4.222795 2.228178 -0.952752
-v 4.197609 2.164063 -0.857433
-v 4.153175 2.084823 -0.799668
-v 4.151090 2.102939 -0.889759
-v 4.148865 2.148829 -0.986567
-v 4.154566 2.190480 -1.129552
-v 4.152557 2.235471 -1.217046
-v 4.131949 2.050757 -0.921856
-v 4.119993 2.063095 -1.049178
-v 4.126160 2.120930 -1.172520
-v 4.133175 2.175231 -1.259323
-v 4.137657 1.944837 -1.061024
-v 4.159229 1.949902 -0.923197
-v 4.143794 2.013720 -1.201386
-v 4.123290 2.086854 -1.295135
-v 4.112680 2.195089 -1.366908
-v 4.111934 2.234814 -1.399949
-v 4.304562 1.906537 -0.572242
-v 4.232341 1.903079 -0.534362
-v 4.240116 1.770049 -0.583946
-v 4.303615 1.799914 -0.610388
-v 4.377095 1.871713 -0.595743
-v 4.432610 1.878873 -0.577888
-v 4.148883 1.759918 -0.573765
-v 4.281287 2.055751 -0.787000
-v 4.354941 2.064161 -0.778851
-v 4.245225 2.008532 -0.772641
-f 1939 1940 1938
-f 1937 1938 1940
-f 1939 1941 1940
-f 1941 1942 1940
-f 1939 1943 1945
-f 1943 1944 1945
-f 1939 1945 1941
-f 1947 1941 1946
-f 1941 1945 1946
-f 1947 1948 1941
-f 1942 1941 1948
-f 1942 1948 1950
-f 1948 1949 1950
-f 1944 1951 1952
-f 1944 1952 1945
-f 1952 1946 1945
-f 1947 1946 1954
-f 1946 1953 1954
-f 1955 1948 1954
-f 1947 1954 1948
-f 1948 1955 1949
-f 1955 1956 1949
-f 1958 1954 1957
-f 1953 1957 1954
-f 1954 1958 1955
-f 1955 1958 1959
-f 1955 1959 1956
-f 1959 1960 1956
-f 1952 1961 1962
-f 1953 1946 1962
-f 1946 1952 1962
-f 1957 1953 1963
-f 1962 1963 1953
-f 1965 1957 1964
-f 1963 1964 1957
-f 1966 1958 1965
-f 1957 1965 1958
-f 1967 1959 1966
-f 1958 1966 1959
-f 1969 1965 1968
-f 1964 1968 1965
-f 1965 1969 1966
-f 1969 1970 1966
-f 1970 1971 1966
-f 1966 1971 1967
-f 1972 1973 1975
-f 1973 1974 1975
-f 1969 1976 1970
-f 1970 1976 1973
-f 1973 1976 1974
-f 1969 1968 1977
-f 1977 1978 1969
-f 1969 1978 1976
-f 1974 1976 1979
-f 1976 1978 1979
-f 1975 1974 1980
-f 1974 1979 1980
-f 1980 1981 1975
-f 1975 1981 1982
-f 1982 1981 1983
-f 1971 1970 1984
-f 1970 1973 1984
-f 1984 1973 1972
-f 1967 1985 1959
-f 1960 1959 1985
-f 1985 1967 1986
-f 1967 1971 1986
-f 1984 1987 1971
-f 1986 1971 1987
-f 1987 1984 1972
-f 1972 1975 1982
-f 1972 1989 1987
-f 1988 1987 1989
-f 1989 1972 1982
-f 1982 1983 1990
-f 1982 1990 1989
-f 1991 1989 1990
-f 1992 1988 1991
-f 1989 1991 1988
-f 1993 1988 1994
-f 1988 1992 1994
-f 1993 1986 1988
-f 1986 1987 1988
-f 1996 1995 1949
-f 1995 1950 1949
-f 1949 1956 1996
-f 1996 1956 1997
-f 1999 1995 1998
-f 1995 1996 1998
-f 1996 1997 1998
-f 2000 1985 1993
-f 1985 1986 1993
-f 2000 1960 1985
-f 1997 1956 2000
-f 1956 1960 2000
-f 1997 2000 1998
-f 2000 2001 1998
-f 2000 1993 2001
-f 1993 1994 2001
-f 1961 2002 2003
-f 2004 2003 2005
-f 2004 2005 2006
-f 2004 1961 2003
-f 2005 2003 2007
-f 2006 2005 2007
-f 1983 1981 2009
-f 1981 2008 2009
-f 2011 2012 2010
-f 2010 2012 2013
-f 2011 2014 2012
-f 1981 1980 2008
-f 1980 2015 2008
-f 2008 2015 2010
-f 2015 2016 2010
-f 2017 2011 2016
-f 2016 2011 2010
-f 1961 2004 2018
-f 2018 2004 2019
-f 2021 2020 2019
-f 2020 2018 2019
-f 1962 1961 1963
-f 1963 1961 1964
-f 1964 1961 2018
-f 1968 1964 2018
-f 1968 2018 1977
-f 2019 2004 2006
-f 2018 2020 1977
-f 1977 2020 2022
-f 1977 2022 1978
-f 2023 1978 2022
-f 2024 1979 2023
-f 1979 1978 2023
-f 1980 1979 2015
-f 2024 2015 1979
-f 2015 2024 2016
-f 2016 2024 2025
-f 2026 2025 2023
-f 2025 2024 2023
-f 2027 2026 2022
-f 2023 2022 2026
-f 2022 2020 2027
-f 2020 2028 2027
-f 2017 2016 2025
-f 2017 2025 2029
-f 2025 2026 2029
-f 2030 2021 2006
-f 2021 2019 2006
-f 2020 2021 2028
-f 2028 2021 2031
-f 2027 2032 2026
-f 2029 2026 2032
-f 2032 2027 2033
-f 2027 2028 2033
-f 2031 2034 2028
-f 2033 2028 2034
-f 2035 2033 2034
-f 2036 2032 2035
-f 2032 2033 2035
-f 2037 2029 2036
-f 2029 2032 2036
-f 2029 2037 2017
-f 2038 2017 2037
-f 2017 2038 2011
-f 2014 2011 2038
-f 2039 2035 2034
-f 2036 2035 2040
-f 2040 2035 2039
-f 2036 2040 2037
-f 2041 2037 2040
-f 2037 2041 2038
-f 2042 2038 2041
-f 2042 2014 2038
-f 2040 2039 2043
-f 2043 2039 2044
-f 2043 2045 2040
-f 2045 2041 2040
-f 2045 2046 2041
-f 2046 2042 2041
-f 2046 2047 2042
-f 2047 2014 2042
-f 2014 2047 2012
-f 2048 2012 2047
-f 2048 2013 2012
-f 2030 2049 2050
-f 2051 2050 2052
-f 2050 2049 2052
-f 2006 2053 2030
-f 2049 2030 2053
-f 2006 2007 2053
-f 2053 2007 2054
-f 1998 2050 2055
-f 2055 2050 2051
-f 2031 2021 2056
-f 2021 2057 2056
-f 2056 2057 2058
-f 2034 2031 2056
-f 2056 2044 2034
-f 2039 2034 2044
-f 2057 2021 2030
-f 2057 2030 2058
-f 2030 2050 2058
-f 2044 2056 2058
-v 5.998088 1.231874 -0.107334
-v 5.959462 1.157227 -0.187097
-v 5.895899 1.182730 -0.164705
-f 2059 2060 2061
-v 5.998088 1.231874 -0.107334
-v 5.961686 1.110978 -0.090324
-v 5.950684 1.082725 -0.175648
-v 5.959462 1.157227 -0.187097
-v 5.672385 1.007694 -0.341778
-v 5.681086 1.054964 -0.355860
-v 5.763952 1.062109 -0.338641
-v 5.755282 1.004149 -0.307505
-f 2062 2063 2065
-f 2063 2064 2065
-f 2068 2069 2067
-f 2066 2067 2069
-v 5.837875 1.141493 -0.305184
-v 5.773410 1.225861 -0.323025
-v 5.840665 1.221942 -0.187128
-v 5.849792 1.193480 -0.181047
-v 5.535184 0.980180 -0.341257
-v 5.573803 0.952578 -0.243886
-v 5.546347 0.916044 -0.246782
-v 5.480649 0.941387 -0.316248
-f 2073 2070 2072
-f 2070 2071 2072
-f 2077 2074 2076
-f 2074 2075 2076
-v 5.647186 1.394606 -0.257833
-v 5.685194 1.452202 -0.188749
-v 5.730427 1.435668 -0.209848
-v 5.710154 1.360653 -0.290072
-v 5.250485 1.123029 -0.385234
-v 5.241466 1.040469 -0.383965
-v 5.011084 1.066770 -0.458562
-v 4.991713 1.163096 -0.504149
-v 4.567896 1.149805 -0.642484
-v 4.449011 1.260929 -0.647431
-v 4.522247 1.398278 -0.644892
-v 4.641547 1.285422 -0.622034
-v 4.697024 1.862575 -0.604048
-v 4.688114 2.046378 -0.604518
-v 4.728963 2.036146 -0.614307
-v 4.742358 1.882232 -0.621650
-v 4.842883 2.021333 -0.638025
-v 4.861611 2.001639 -0.621913
-v 4.824747 1.946835 -0.626358
-v 4.760921 1.881357 -0.613120
-f 2081 2078 2080
-f 2078 2079 2080
-f 2082 2083 2085
-f 2083 2084 2085
-f 2088 2089 2087
-f 2086 2087 2089
-f 2091 2092 2090
-f 2090 2092 2093
-f 2097 2094 2096
-f 2094 2095 2096
-v 4.897808 1.946794 -0.628057
-v 4.861611 2.001639 -0.621913
-v 4.935561 2.016016 -0.585700
-v 4.925394 1.955229 -0.618837
-f 2100 2101 2099
-f 2098 2099 2101
-v 4.760921 1.881357 -0.613120
-v 4.861618 1.854067 -0.618095
-v 4.852582 1.816115 -0.603105
-v 4.935561 2.016016 -0.585700
-v 4.935880 2.051665 -0.572853
-v 4.991746 2.009819 -0.523206
-v 4.973133 1.992779 -0.533466
-v 4.751519 2.039658 -0.634134
-v 4.788476 2.028047 -0.608619
-v 4.982364 1.873300 -0.536190
-v 5.001903 1.914398 -0.486724
-v 5.011430 1.875569 -0.463205
-v 4.991709 1.844295 -0.520761
-v 4.881574 2.094571 -0.539949
-v 4.918466 2.084725 -0.532713
-v 4.636582 2.263383 -0.471997
-v 4.739441 2.299169 -0.369987
-v 4.837331 2.235678 -0.479332
-v 4.744050 2.179337 -0.556057
-v 5.057495 2.002751 -0.451974
-v 5.067202 2.027704 -0.422291
-v 5.095375 1.961238 -0.401516
-v 5.075994 1.900999 -0.443793
-v 4.082988 2.175805 -1.450930
-v 4.046673 2.341349 -1.452530
-v 4.101726 2.312318 -1.438163
-v 4.129926 2.308770 -1.402259
-v 4.111934 2.234814 -1.399949
-v 4.159229 1.949902 -0.923197
-v 4.245225 2.008532 -0.772641
-v 4.094112 1.889281 -0.578435
-v 4.150297 1.820575 -0.917046
-v 4.137657 1.944837 -1.061024
-v 4.127903 1.828359 -1.090512
-v 4.143794 2.013720 -1.201386
-v 4.152166 1.868775 -1.225002
-v 4.123290 2.086854 -1.295135
-v 4.103303 2.038565 -1.363737
-v 4.112680 2.195089 -1.366908
-f 2102 2103 2104
-f 2106 2107 2105
-f 2105 2107 2108
-f 2109 2110 2102
-f 2113 2114 2112
-f 2111 2112 2114
-f 2107 2113 2112
-f 2115 2116 2106
-f 2118 2119 2117
-f 2117 2119 2120
-f 2124 2121 2123
-f 2121 2122 2123
-f 2125 2126 2127
-f 2127 2128 2125
-f 2125 2128 2129
-f 2133 2130 2132
-f 2130 2131 2132
-f 2135 2134 2133
-f 2134 2130 2133
-f 2136 2134 2137
-f 2134 2135 2137
-f 2137 2139 2136
-f 2138 2136 2139
-f 2125 2140 2139
-f 2140 2138 2139
-f 2129 2140 2125
-v 4.854957 2.660227 -0.924310
-v 4.863709 2.722151 -0.936660
-v 5.096148 2.759720 -0.774729
-f 2141 2142 2143
-v 4.059885 1.860460 -0.470087
-v 4.094112 1.889281 -0.578435
-v 4.148883 1.759918 -0.573765
-v 4.076852 1.746601 -0.527436
-v 4.126565 0.642027 0.000000
-v 4.120842 0.627141 -0.185461
-v 4.359048 0.700414 -0.166651
-v 4.380854 0.704574 -0.000130
-v 3.881998 1.764428 -0.476337
-v 3.886058 1.550141 -0.504830
-v 4.067576 1.572668 -0.534997
-v 3.988510 1.297806 -0.539537
-v 4.085564 1.288885 -0.544406
-v 4.041657 1.039756 -0.496922
-v 4.141189 1.008775 -0.499342
-v 4.068249 0.798926 -0.400813
-v 4.216374 0.852328 -0.405873
-v 4.105198 0.672581 -0.300001
-v 4.319799 0.731007 -0.291212
-v 3.745669 2.266001 -0.241930
-v 3.828001 2.352540 -0.233341
-v 3.870548 2.292106 -0.368964
-v 3.758215 2.206683 -0.323051
-v 3.727093 2.308406 -0.150049
-v 3.716360 2.343387 0.000000
-v 3.787342 2.396113 -0.001159
-v 3.922437 1.972461 -0.483563
-v 3.814876 1.968416 -0.443000
-v 3.823349 2.141733 -0.428356
-f 2144 2145 2147
-f 2145 2146 2147
-f 2149 2150 2148
-f 2148 2150 2151
-f 2152 2144 2147
-f 2153 2152 2154
-f 2152 2147 2154
-f 2154 2156 2153
-f 2155 2153 2156
-f 2158 2157 2156
-f 2157 2155 2156
-f 2157 2158 2159
-f 2159 2158 2160
-f 2162 2161 2160
-f 2161 2159 2160
-f 2150 2149 2162
-f 2149 2161 2162
-f 2164 2165 2163
-f 2163 2165 2166
-f 2164 2167 2169
-f 2167 2168 2169
-f 2163 2167 2164
-f 2170 2144 2152
-f 2170 2152 2171
-f 2172 2170 2171
-f 2172 2171 2166
-f 2165 2172 2166
-v 4.821336 2.621498 -0.789636
-v 4.829566 2.580797 -0.821827
-v 5.096148 2.759720 -0.774729
-v 4.856249 2.593812 -0.867067
-f 2173 2174 2175
-f 2174 2176 2175
-v 4.245225 2.008532 -0.772641
-v 4.232341 1.903079 -0.534362
-v 4.094112 1.889281 -0.578435
-v 1.655948 -2.520927 -0.844269
-v 1.678986 -2.513137 -0.891745
-v 1.718315 -2.775468 -0.921796
-v 1.700797 -2.794792 -0.824250
-v 1.734568 -2.965876 -0.986396
-v 1.705953 -3.006628 -0.832630
-v -1.305099 -1.708460 -0.484230
-v -1.108758 -1.770749 -0.473033
-v -0.977375 -1.793126 -0.498747
-v -0.972514 -1.822778 -0.372649
-v -1.406693 -1.697325 -0.450399
-v -1.397474 -1.693815 -0.570541
-v -1.266738 -1.691944 -0.557922
-f 2177 2178 2179
-f 2183 2180 2182
-f 2180 2181 2182
-f 2184 2185 2182
-f 2182 2185 2183
-f 2186 2187 2189
-f 2187 2188 2189
-f 2190 2191 2186
-f 2191 2192 2186
-v -3.139394 -1.687482 -0.638546
-v -3.008323 -1.759271 -0.655672
-v -2.941731 -1.787431 -0.442574
-v -3.120907 -1.707924 -0.431829
-v -2.709403 -1.879947 -0.508775
-v -2.811581 -1.798210 -0.712737
-v -2.699966 -1.850397 -0.570070
-f 2195 2196 2194
-f 2193 2194 2196
-f 2194 2197 2195
-f 2197 2194 2199
-f 2194 2198 2199
-v -3.392806 1.769365 0.000000
-v -3.413372 1.871604 -0.142309
-v -3.358510 1.810253 -0.380095
-v -3.348274 1.767738 -0.000085
-v -3.380836 1.819691 -0.123273
-v 4.149438 2.340550 -1.353693
-v 4.129926 2.308770 -1.402259
-v 4.101726 2.312318 -1.438163
-v 4.148927 2.388726 -1.376879
-v -2.811581 -1.798210 -0.712737
-v -3.008323 -1.759271 -0.655672
-v -3.066022 -1.953125 -0.719516
-v -2.964215 -1.978727 -0.776572
-v -3.139394 -1.687482 -0.638546
-v -3.211005 -1.850398 -0.700723
-v 2.407309 -0.974980 0.805091
-v 2.410367 -0.777999 0.841105
-v 2.292449 -0.871852 0.882400
-v 2.229345 -0.992723 0.862826
-v 2.520417 -0.954785 0.739445
-v 2.539200 -0.727778 0.750475
-v 2.637655 -0.768176 0.637039
-v 2.514167 -1.077721 0.706614
-v 2.669281 -0.930664 0.557166
-v 2.386465 -1.116066 0.761367
-v 2.180012 -1.130557 0.821812
-v 2.158051 -1.209613 0.783941
-v 2.354287 -1.193746 0.735189
-v 2.126237 -1.330172 0.721011
-v 2.318787 -1.294090 0.673863
-v 2.274533 -1.433487 0.567366
-v 2.457060 -1.400958 0.539866
-v 2.486533 -1.274971 0.627822
-v 2.549322 -1.335209 0.535156
-v 2.617970 -1.235597 0.520238
-v 2.670253 -1.108365 0.544018
-v 2.510841 -1.158786 0.678057
-v 2.710721 -0.830091 0.532493
-v 2.757946 -1.099958 0.471684
-v 2.857666 -0.930625 0.391195
-v 2.803736 -1.255869 0.438328
-v 2.847364 -1.103812 0.402301
-v 2.740886 -1.339225 0.463604
-v 2.663024 -1.440487 0.478149
-v 2.515314 -1.507063 0.483275
-v 2.422296 -1.510915 0.494169
-v 2.249663 -1.492705 0.531270
-v 2.079600 -1.473377 0.654997
-v 2.928787 -1.107467 0.312054
-v 2.960118 -0.941827 0.284743
-v 2.893096 -1.302168 0.332049
-v 2.824356 -1.407256 0.355013
-v 2.721135 -1.520418 0.362378
-v 2.545261 -1.593300 0.386310
-v 2.396607 -1.593239 0.389972
-v 2.243492 -1.584783 0.431143
-v 2.048200 -1.581983 0.555832
-v 2.931756 -1.129655 0.000000
-v 2.970902 -0.959664 0.000000
-v 2.896234 -1.319560 0.000000
-v 2.821376 -1.431534 0.000000
-v 2.706963 -1.528854 0.000000
-v 2.534227 -1.617078 0.000000
-v 2.348182 -1.624595 0.000000
-v 2.167167 -1.596326 0.000000
-v 1.920432 -1.567396 0.000000
-v 2.835437 -0.231101 0.577890
-v 2.736198 -0.346225 0.659345
-v 2.881063 -0.493146 0.521968
-v 2.986408 -0.413503 0.428964
-v 2.910769 -0.638444 0.431191
-v 2.825540 -0.567578 0.552597
-v 2.688131 -0.517509 0.672975
-v 2.647368 -0.611550 0.669485
-v 2.618307 -0.549092 0.805491
-v 2.993075 -0.708434 0.342596
-v 3.045715 -0.767786 0.261741
-v 3.065544 -0.788768 0.000000
-v 3.118124 -0.703925 0.000000
-v 3.107533 -0.691019 0.264602
-v 3.053144 -0.609681 0.326931
-f 2200 2201 2202
-f 2201 2200 2204
-f 2203 2204 2200
-f 2207 2208 2206
-f 2205 2206 2208
-f 2209 2210 2212
-f 2210 2211 2212
-f 2210 2213 2211
-f 2213 2214 2211
-f 2216 2217 2215
-f 2215 2217 2218
-f 2220 2216 2219
-f 2219 2216 2215
-f 2221 2220 2219
-f 2222 2223 2219
-f 2219 2223 2221
-f 2224 2222 2215
-f 2215 2222 2219
-f 2225 2224 2218
-f 2218 2224 2215
-f 2224 2225 2227
-f 2226 2227 2225
-f 2226 2228 2227
-f 2228 2229 2227
-f 2230 2229 2228
-f 2230 2231 2229
-f 2231 2232 2229
-f 2233 2232 2231
-f 2234 2232 2233
-f 2235 2236 2234
-f 2236 2232 2234
-f 2229 2232 2227
-f 2227 2232 2236
-f 2227 2236 2224
-f 2236 2222 2224
-f 2223 2222 2235
-f 2235 2222 2236
-f 2237 2221 2223
-f 2238 2239 2235
-f 2235 2234 2238
-f 2234 2240 2238
-f 2240 2241 2238
-f 2239 2238 2241
-f 2242 2240 2234
-f 2243 2242 2233
-f 2233 2242 2234
-f 2244 2243 2231
-f 2231 2243 2233
-f 2245 2244 2231
-f 2231 2230 2245
-f 2230 2246 2245
-f 2247 2246 2228
-f 2228 2246 2230
-f 2249 2239 2248
-f 2241 2248 2239
-f 2248 2241 2250
-f 2240 2250 2241
-f 2250 2240 2251
-f 2242 2251 2240
-f 2243 2252 2251
-f 2253 2252 2244
-f 2244 2252 2243
-f 2254 2253 2245
-f 2245 2253 2244
-f 2246 2255 2245
-f 2255 2254 2245
-f 2255 2246 2256
-f 2247 2256 2246
-f 2248 2257 2249
-f 2257 2258 2249
-f 2259 2257 2250
-f 2250 2257 2248
-f 2251 2260 2250
-f 2260 2259 2250
-f 2261 2260 2252
-f 2252 2260 2251
-f 2262 2261 2253
-f 2253 2261 2252
-f 2263 2262 2254
-f 2254 2262 2253
-f 2264 2263 2255
-f 2255 2263 2254
-f 2256 2265 2255
-f 2265 2264 2255
-f 2266 2267 2268
-f 2268 2269 2266
-f 2270 2269 2268
-f 2268 2271 2270
-f 2272 2271 2268
-f 2273 2220 2221
-f 2274 2220 2273
-f 2273 2272 2274
-f 2270 2271 2237
-f 2237 2271 2221
-f 2239 2270 2237
-f 2275 2270 2239
-f 2239 2249 2275
-f 2249 2276 2275
-f 2249 2258 2276
-f 2258 2277 2276
-f 2279 2276 2278
-f 2278 2276 2277
-f 2223 2235 2239
-f 2223 2239 2237
-f 2271 2272 2273
-f 2271 2273 2221
-f 2269 2270 2280
-f 2270 2275 2280
-f 2280 2275 2279
-f 2276 2279 2275
-v -2.306662 -1.116976 0.961238
-v -2.119856 -1.128800 0.970960
-v -2.033406 -0.910030 0.964220
-v -2.031698 -1.097344 0.966701
-v -1.782298 -1.020581 0.943381
-v -2.337617 -1.334842 0.966761
-v -2.462835 -1.305500 0.966395
-v -2.161843 -1.325837 0.957465
-v -2.042059 -1.312976 0.940911
-v -1.776785 -1.275107 0.914703
-v -1.709172 -1.283232 0.897427
-v -1.456655 -1.295527 0.894240
-v -2.417777 -1.553136 0.887222
-v -2.591357 -1.510845 0.885470
-v -2.223917 -1.541268 0.879260
-v -2.049879 -1.562369 0.829319
-v -1.778934 -1.550199 0.776454
-v -1.777628 -1.473076 0.845827
-v -1.686329 -1.414405 0.869373
-v -1.592146 -1.408592 0.838483
-v -1.552229 -1.555077 0.735708
-v -1.659758 -1.544361 0.788181
-v -1.376186 -1.661988 0.718954
-v -1.366873 -1.340211 0.907567
-v -1.200688 -1.577575 0.799188
-v -1.198513 -1.456102 0.885435
-v -0.953236 -1.545941 0.899180
-f 2281 2282 2283
-f 2284 2283 2282
-f 2285 2283 2284
-f 2286 2281 2287
-f 2286 2288 2281
-f 2288 2282 2281
-f 2289 2284 2288
-f 2284 2282 2288
-f 2285 2284 2290
-f 2290 2284 2289
-f 2291 2285 2290
-f 2292 2285 2291
-f 2294 2293 2287
-f 2293 2286 2287
-f 2295 2288 2293
-f 2288 2286 2293
-f 2296 2289 2295
-f 2289 2288 2295
-f 2289 2296 2298
-f 2297 2298 2296
-f 2290 2289 2298
-f 2298 2299 2290
-f 2299 2291 2290
-f 2292 2291 2300
-f 2300 2291 2299
-f 2301 2292 2300
-f 2300 2302 2301
-f 2299 2302 2300
-f 2302 2299 2297
-f 2298 2297 2299
-f 2303 2304 2301
-f 2304 2292 2301
-f 2303 2305 2304
-f 2305 2306 2304
-f 2307 2306 2305
-v -1.200688 -1.577575 0.799188
-v -1.226563 -1.655159 0.687343
-v -1.091175 -1.707120 0.727242
-v -0.953236 -1.545941 0.899180
-v -1.376186 -1.661988 0.718954
-v -1.266738 -1.691944 0.557922
-v -1.089642 -1.757196 0.685154
-v -0.972089 -1.774507 0.768570
-v -0.812845 -1.785424 0.768511
-v -0.680046 -1.768325 0.819080
-v -0.535144 -1.615983 0.920556
-v -0.564074 -1.789401 0.803191
-v -0.422877 -1.751200 0.823423
-v -0.078470 -1.688266 0.800230
-v -0.063012 -1.583021 0.865082
-v -0.543078 -1.810473 0.563825
-v -0.094135 -1.769086 0.556924
-v -0.977375 -1.793126 0.498747
-v -1.108758 -1.770749 0.473033
-v -1.305099 -1.708460 0.484230
-v -1.397474 -1.693815 0.570541
-f 2311 2308 2310
-f 2308 2309 2310
-f 2312 2309 2308
-f 2313 2314 2309
-f 2314 2310 2309
-f 2315 2311 2310
-f 2316 2311 2315
-f 2318 2311 2317
-f 2317 2311 2316
-f 2319 2318 2317
-f 2320 2318 2319
-f 2318 2320 2322
-f 2321 2322 2320
-f 2323 2324 2320
-f 2324 2321 2320
-f 2320 2319 2323
-f 2317 2323 2319
-f 2325 2323 2316
-f 2316 2323 2317
-f 2315 2310 2314
-f 2313 2326 2314
-f 2326 2325 2314
-f 2313 2327 2326
-f 2309 2312 2313
-f 2328 2313 2312
-v -1.376186 -1.661988 0.718954
-v -1.480217 -1.656600 0.606638
-v -1.397474 -1.693815 0.570541
-v -1.552229 -1.555077 0.735708
-v -1.601625 -1.593321 0.605607
-v -1.519339 -1.653776 0.501741
-v -1.406693 -1.697325 0.450399
-v -1.576196 -1.696317 0.358146
-v -1.386502 -1.718441 0.350823
-f 2329 2330 2331
-f 2332 2330 2329
-f 2333 2330 2332
-f 2334 2330 2333
-f 2335 2331 2334
-f 2331 2330 2334
-f 2336 2334 2333
-f 2336 2337 2334
-f 2337 2335 2334
-v -1.305099 -1.708460 0.484230
-v -1.406693 -1.697325 0.450399
-v -1.386502 -1.718441 0.350823
-v -0.972514 -1.822778 0.372649
-v -0.523838 -1.850065 0.388007
-v -0.543078 -1.810473 0.563825
-v -0.977375 -1.793126 0.498747
-v -0.112666 -1.806584 0.383324
-v -0.094135 -1.769086 0.556924
-v 0.480235 -1.631521 0.401961
-v 0.489819 -1.524947 0.672392
-v -0.155114 -1.828285 0.000000
-v 0.446550 -1.672950 0.000000
-v -0.530369 -1.860806 0.000000
-v -0.956007 -1.825728 0.000000
-v -1.395728 -1.723811 0.000000
-f 2338 2339 2340
-f 2341 2338 2340
-f 2343 2344 2342
-f 2342 2344 2341
-f 2346 2343 2345
-f 2345 2343 2342
-f 2348 2346 2347
-f 2347 2346 2345
-f 2347 2345 2350
-f 2345 2349 2350
-f 2345 2342 2349
-f 2342 2351 2349
-f 2342 2341 2351
-f 2341 2352 2351
-f 2352 2341 2353
-f 2340 2353 2341
-v -1.576196 -1.696317 0.358146
-v -1.610025 -1.711571 0.000000
-v -1.395728 -1.723811 0.000000
-v -1.386502 -1.718441 0.350823
-v -1.764045 -1.764987 0.406586
-v -1.799827 -1.753136 0.000000
-v -1.601625 -1.593321 0.605607
-v -1.747790 -1.667608 0.606340
-v -1.778934 -1.550199 0.776454
-v -1.659758 -1.544361 0.788181
-v -1.552229 -1.555077 0.735708
-v -2.508885 -1.719933 0.721675
-v -2.417777 -1.553136 0.887222
-v -2.591357 -1.510845 0.885470
-v -2.734184 -1.717948 0.749581
-v -2.267049 -1.753901 0.662106
-v -2.223917 -1.541268 0.879260
-v -2.037371 -1.736360 0.656787
-v -2.049879 -1.562369 0.829319
-v -1.936032 -1.829617 0.488916
-v -1.883160 -1.829718 0.401567
-v -2.027242 -1.813012 0.555232
-v -2.126375 -1.866497 0.502895
-v -2.317557 -1.874200 0.470587
-v -2.176551 -1.873816 0.445782
-v -2.466779 -1.857679 0.570461
-v -2.446375 -1.893261 0.494110
-v -2.547737 -1.833025 0.609321
-v -2.647220 -1.844010 0.594347
-v -2.811581 -1.798210 0.712737
-v -2.699966 -1.850397 0.570070
-v -2.892162 -1.781087 0.000000
-v -2.684452 -1.891207 0.447388
-v -2.709403 -1.879947 0.508775
-v -2.941731 -1.787431 0.442574
-v -2.656867 -1.853045 0.000000
-v -2.614084 -1.905005 0.404925
-v -2.348005 -1.869142 0.000000
-v -2.503818 -1.909806 0.431456
-v -2.147113 -1.903198 0.362462
-v -2.092921 -1.839622 0.000000
-v -2.062725 -1.884246 0.307336
-v -1.946306 -1.872735 0.344251
-f 2355 2356 2354
-f 2354 2356 2357
-f 2358 2359 2354
-f 2359 2355 2354
-f 2360 2361 2354
-f 2354 2361 2358
-f 2362 2361 2360
-f 2360 2363 2362
-f 2364 2363 2360
-f 2368 2365 2367
-f 2365 2366 2367
-f 2369 2370 2365
-f 2370 2366 2365
-f 2369 2371 2370
-f 2371 2372 2370
-f 2361 2362 2371
-f 2362 2372 2371
-f 2374 2358 2373
-f 2373 2358 2361
-f 2371 2375 2361
-f 2361 2375 2373
-f 2376 2375 2369
-f 2369 2375 2371
-f 2377 2378 2369
-f 2378 2376 2369
-f 2377 2369 2380
-f 2369 2379 2380
-f 2365 2381 2369
-f 2381 2379 2369
-f 2368 2382 2365
-f 2382 2381 2365
-f 2383 2384 2368
-f 2384 2382 2368
-f 2387 2388 2386
-f 2385 2386 2388
-f 2386 2385 2390
-f 2389 2390 2385
-f 2389 2391 2390
-f 2391 2392 2390
-f 2377 2380 2391
-f 2380 2392 2391
-f 2377 2391 2378
-f 2391 2393 2378
-f 2395 2393 2394
-f 2394 2393 2391
-f 2394 2359 2395
-f 2359 2396 2395
-f 2358 2374 2359
-f 2374 2396 2359
-v -0.977375 -1.793126 0.498747
-v -0.972089 -1.774507 0.768570
-v -1.089642 -1.757196 0.685154
-v -0.812845 -1.785424 0.768511
-f 2397 2398 2399
-f 2398 2397 2400
-v -3.304804 -1.582192 0.643445
-v -3.314868 -1.599081 0.439626
-v -3.120907 -1.707924 0.431829
-v -3.139394 -1.687482 0.638546
-v -3.387254 -1.486027 0.672861
-v -3.442085 -1.484120 0.406377
-v -3.533910 -1.330455 0.568246
-v -3.557869 -1.325941 0.378030
-v -3.631179 -1.157838 0.505610
-v -3.639586 -1.140102 0.333800
-v -3.667859 -0.964867 0.464702
-v -3.686518 -0.955181 0.320349
-v -3.665774 -0.734080 0.446286
-v -3.676599 -0.729578 0.330724
-v -3.595973 -0.346391 0.426453
-v -3.616627 -0.350374 0.338492
-v -3.529709 -0.065998 0.437217
-v -3.570243 -0.060093 0.344854
-v -3.516840 0.149002 0.430359
-v -3.535416 0.191408 0.338478
-v -3.536654 0.442277 0.322000
-v -3.544507 0.467147 0.000000
-v -3.552320 0.219613 0.000000
-v -3.583763 -0.052271 0.000000
-v -3.673607 -0.720796 0.000000
-v -3.637643 -0.356271 0.000000
-v -3.678793 -0.926816 0.000000
-v -3.650579 -1.142448 0.000000
-v -3.522115 -1.366623 0.000000
-v -3.417689 -1.494416 0.000000
-v -3.271035 -1.609292 0.000000
-v -3.110300 -1.691720 0.000000
-v -2.892162 -1.781087 0.000000
-v -2.941731 -1.787431 0.442574
-v -3.470778 -0.078218 0.546398
-v -3.526766 -0.317542 0.560837
-v -3.569993 -0.731989 0.649435
-v -3.550120 -0.984868 0.675228
-v -3.492599 -1.180646 0.692282
-v -3.335942 -1.365685 0.724590
-v -3.438226 -0.721479 0.728141
-v -3.283698 -0.730967 0.793898
-v -3.415655 -0.308965 0.671045
-v -3.355398 -0.969157 0.766213
-v -3.279790 -1.162072 0.784602
-v -3.251210 -0.948205 0.819868
-v -3.556552 0.704883 0.280630
-v -3.566995 0.656967 0.000000
-v -3.578170 0.837714 0.288502
-v -3.599077 0.796217 0.000000
-f 2403 2404 2402
-f 2401 2402 2404
-f 2405 2406 2401
-f 2406 2402 2401
-f 2406 2405 2408
-f 2407 2408 2405
-f 2407 2409 2408
-f 2409 2410 2408
-f 2409 2411 2410
-f 2411 2412 2410
-f 2412 2411 2414
-f 2413 2414 2411
-f 2415 2416 2413
-f 2416 2414 2413
-f 2416 2415 2418
-f 2417 2418 2415
-f 2420 2418 2419
-f 2419 2418 2417
-f 2421 2420 2419
-f 2420 2421 2423
-f 2422 2423 2421
-f 2423 2424 2420
-f 2424 2418 2420
-f 2416 2426 2414
-f 2425 2414 2426
-f 2414 2425 2412
-f 2427 2412 2425
-f 2410 2412 2428
-f 2428 2412 2427
-f 2429 2408 2428
-f 2408 2410 2428
-f 2406 2408 2430
-f 2430 2408 2429
-f 2402 2406 2431
-f 2431 2406 2430
-f 2402 2431 2403
-f 2432 2403 2431
-f 2433 2434 2432
-f 2434 2403 2432
-f 2426 2416 2424
-f 2416 2418 2424
-f 2417 2435 2419
-f 2415 2436 2417
-f 2436 2435 2417
-f 2437 2436 2413
-f 2413 2436 2415
-f 2438 2437 2411
-f 2411 2437 2413
-f 2439 2438 2409
-f 2409 2438 2411
-f 2440 2439 2407
-f 2407 2439 2409
-f 2405 2440 2407
-f 2441 2442 2443
-f 2436 2443 2435
-f 2436 2437 2443
-f 2437 2441 2443
-f 2444 2441 2438
-f 2438 2441 2437
-f 2439 2445 2438
-f 2445 2444 2438
-f 2440 2445 2439
-f 2446 2444 2445
-f 2447 2448 2421
-f 2448 2422 2421
-f 2450 2448 2449
-f 2449 2448 2447
-f 2444 2446 2441
-f 2442 2441 2446
-v 1.806371 -2.949735 0.984058
-v 1.771416 -2.769024 0.946100
-v 1.718315 -2.775468 0.921796
-v 1.734568 -2.965876 0.986396
-v 2.021366 -2.881725 0.945561
-v 1.960643 -2.712860 0.900890
-v 1.880971 -2.733242 0.890200
-v 1.911792 -2.895773 0.950117
-v 2.057496 -2.887282 0.844225
-v 1.994078 -2.713047 0.824553
-v 1.735077 -3.022732 0.972751
-v 1.721745 -3.116887 0.979111
-v 1.802387 -3.089615 0.961851
-v 1.811797 -3.135641 0.933096
-f 2454 2451 2453
-f 2451 2452 2453
-f 2455 2456 2458
-f 2456 2457 2458
-f 2459 2460 2455
-f 2460 2456 2455
-f 2461 2451 2454
-f 2462 2463 2461
-f 2464 2463 2462
-v 2.031262 -3.256709 1.111122
-v 2.148880 -3.221616 1.076203
-v 2.110033 -3.148257 1.068816
-v 1.970051 -3.141862 1.065178
-v 2.138771 -3.397683 1.214726
-v 2.247981 -3.342804 1.127459
-v 2.254361 -3.550931 1.235118
-v 2.343303 -3.507846 1.195262
-v 1.981186 -3.441282 1.180532
-v 2.025468 -3.556842 1.204841
-v 1.926176 -3.288880 1.093746
-v 1.886443 -3.191742 1.047318
-v 2.201939 -3.226457 0.996503
-v 2.281229 -3.338250 1.043475
-v 2.170039 -3.134504 0.978866
-v 2.217369 -3.156093 0.888927
-v 2.113587 -3.011851 0.851648
-v 2.091539 -3.032437 0.947029
-v 1.865135 -3.353827 1.054981
-v 1.841888 -3.246003 1.014774
-v 1.919391 -3.487078 1.110869
-v 1.980621 -3.043895 0.964237
-f 2468 2465 2467
-f 2465 2466 2467
-f 2465 2469 2466
-f 2469 2470 2466
-f 2470 2469 2472
-f 2471 2472 2469
-f 2474 2471 2473
-f 2469 2473 2471
-f 2469 2465 2473
-f 2465 2475 2473
-f 2465 2468 2475
-f 2468 2476 2475
-f 2466 2470 2477
-f 2477 2470 2478
-f 2467 2466 2479
-f 2479 2466 2477
-f 2480 2481 2479
-f 2481 2482 2479
-f 2475 2476 2483
-f 2483 2476 2484
-f 2475 2483 2473
-f 2473 2483 2485
-f 2485 2474 2473
-f 2467 2479 2486
-v 2.091539 -3.032437 0.947029
-v 2.113587 -3.011851 0.851648
-v 2.057496 -2.887282 0.844225
-v 2.021366 -2.881725 0.945561
-v 1.880971 -2.733242 0.890200
-v 1.830669 -2.736121 0.903313
-v 1.848272 -2.927260 0.996966
-v 1.911792 -2.895773 0.950117
-v 1.771416 -2.769024 0.946100
-v 1.806371 -2.949735 0.984058
-v 1.709173 -3.133145 0.807940
-v 1.721745 -3.116887 0.979111
-v 1.735077 -3.022732 0.972751
-v 1.705953 -3.006628 0.832630
-v 1.806407 -3.173343 0.834455
-v 1.811797 -3.135641 0.933096
-f 2490 2487 2489
-f 2487 2488 2489
-f 2493 2494 2492
-f 2491 2492 2494
-f 2492 2495 2493
-f 2493 2495 2496
-f 2498 2499 2497
-f 2497 2499 2500
-f 2498 2497 2502
-f 2501 2502 2497
-v 1.832790 -3.296508 0.865078
-v 1.841888 -3.246003 1.014774
-v 1.811797 -3.135641 0.933096
-v 1.806407 -3.173343 0.834455
-v 2.078928 -3.584991 0.917088
-v 2.025468 -3.556842 1.204841
-v 1.919391 -3.487078 1.110869
-v 1.933899 -3.546253 0.912438
-v 1.839523 -3.405292 0.883488
-v 1.865135 -3.353827 1.054981
-f 2504 2505 2503
-f 2503 2505 2506
-f 2507 2508 2510
-f 2508 2509 2510
-f 2512 2504 2511
-f 2511 2504 2503
-f 2510 2509 2511
-f 2509 2512 2511
-v 1.900481 -3.131932 0.728621
-v 1.806407 -3.173343 0.834455
-v 1.709173 -3.133145 0.807940
-v 1.741854 -3.114181 0.700705
-f 2513 2514 2516
-f 2514 2515 2516
-v 1.806407 -3.173343 0.834455
-v 1.900481 -3.131932 0.728621
-v 1.929730 -3.298418 0.689538
-v 1.832790 -3.296508 0.865078
-v 1.941325 -3.434803 0.701314
-v 1.839523 -3.405292 0.883488
-v 2.002745 -3.523420 0.688103
-v 1.933899 -3.546253 0.912438
-v 2.126553 -3.549679 0.701005
-v 2.078928 -3.584991 0.917088
-v 2.244147 -3.545557 0.732888
-v 2.197935 -3.583948 0.936437
-f 2519 2520 2518
-f 2517 2518 2520
-f 2519 2521 2520
-f 2521 2522 2520
-f 2524 2522 2523
-f 2523 2522 2521
-f 2524 2523 2526
-f 2525 2526 2523
-f 2526 2525 2528
-f 2527 2528 2525
-v 1.776024 -2.980086 0.707575
-v 1.741854 -3.114181 0.700705
-v 1.709173 -3.133145 0.807940
-v 1.705953 -3.006628 0.832630
-v 1.700797 -2.794792 0.824250
-v 1.736425 -2.743683 0.736866
-v 1.911792 -2.895773 0.950117
-v 1.980621 -3.043895 0.964237
-v 2.091539 -3.032437 0.947029
-v 2.021366 -2.881725 0.945561
-f 2529 2530 2532
-f 2530 2531 2532
-f 2534 2529 2533
-f 2532 2533 2529
-f 2537 2538 2536
-f 2535 2536 2538
-v 1.970051 -3.141862 1.065178
-v 2.110033 -3.148257 1.068816
-v 1.980621 -3.043895 0.964237
-v 1.898573 -3.068274 0.994338
-f 2540 2541 2539
-f 2539 2541 2542
-v 1.911792 -2.895773 0.950117
-v 1.848272 -2.927260 0.996966
-v 1.898573 -3.068274 0.994338
-v 1.980621 -3.043895 0.964237
-v 1.806371 -2.949735 0.984058
-v 1.855134 -3.083228 0.986129
-f 2546 2543 2545
-f 2543 2544 2545
-f 2544 2547 2545
-f 2547 2548 2545
-v 1.886443 -3.191742 1.047318
-v 1.970051 -3.141862 1.065178
-v 1.898573 -3.068274 0.994338
-v 1.855134 -3.083228 0.986129
-v 1.841888 -3.246003 1.014774
-v 1.811797 -3.135641 0.933096
-f 2550 2551 2549
-f 2549 2551 2552
-f 2553 2549 2554
-f 2549 2552 2554
-v 1.811797 -3.135641 0.933096
-v 1.855134 -3.083228 0.986129
-v 1.802387 -3.089615 0.961851
-v 1.806371 -2.949735 0.984058
-v 1.735077 -3.022732 0.972751
-v 1.734568 -2.965876 0.986396
-v 1.705953 -3.006628 0.832630
-f 2555 2556 2557
-f 2558 2559 2556
-f 2557 2556 2559
-f 2560 2561 2559
-v 2.187495 -3.161535 0.800285
-v 2.073690 -3.020848 0.782654
-v 2.113587 -3.011851 0.851648
-v 2.217369 -3.156093 0.888927
-f 2565 2562 2564
-f 2562 2563 2564
-v 2.073690 -3.020848 0.782654
-v 2.001343 -2.847715 0.762517
-v 2.057496 -2.887282 0.844225
-v 2.113587 -3.011851 0.851648
-f 2567 2568 2566
-f 2566 2568 2569
-v 2.201939 -3.226457 0.996503
-v 2.236407 -3.220054 0.892030
-v 2.217369 -3.156093 0.888927
-v 2.170039 -3.134504 0.978866
-v 2.343303 -3.507846 1.195262
-v 2.386827 -3.462222 1.136480
-v 2.281229 -3.338250 1.043475
-v 2.247981 -3.342804 1.127459
-v 2.440236 -3.509564 1.019417
-v 2.327021 -3.352317 0.958234
-v 2.377814 -3.484109 0.800332
-v 2.309358 -3.345468 0.801508
-v 2.235942 -3.243103 0.823955
-v 2.187495 -3.161535 0.800285
-f 2573 2570 2572
-f 2570 2571 2572
-f 2574 2575 2577
-f 2575 2576 2577
-f 2578 2579 2575
-f 2579 2576 2575
-f 2571 2570 2579
-f 2570 2576 2579
-f 2578 2580 2579
-f 2580 2581 2579
-f 2581 2582 2579
-f 2582 2571 2579
-f 2583 2572 2582
-f 2572 2571 2582
-v 1.857471 -2.950722 0.669988
-v 1.900481 -3.131932 0.728621
-v 1.741854 -3.114181 0.700705
-v 1.776024 -2.980086 0.707575
-v 1.945632 -2.876710 0.703118
-v 1.998099 -3.039955 0.718855
-v 2.001343 -2.847715 0.762517
-v 2.073690 -3.020848 0.782654
-v 1.841282 -2.716008 0.708009
-v 1.884318 -2.724404 0.701999
-v 1.972647 -2.728848 0.772496
-f 2584 2585 2586
-f 2587 2584 2586
-f 2585 2584 2589
-f 2584 2588 2589
-f 2590 2591 2588
-f 2588 2591 2589
-f 2592 2593 2584
-f 2593 2588 2584
-f 2593 2594 2588
-f 2594 2590 2588
-v 1.998099 -3.039955 0.718855
-v 2.059222 -3.230076 0.674936
-v 1.929730 -3.298418 0.689538
-v 1.900481 -3.131932 0.728621
-v 2.073690 -3.020848 0.782654
-v 2.187495 -3.161535 0.800285
-v 2.107985 -3.363571 0.677007
-v 1.941325 -3.434803 0.701314
-v 2.235942 -3.243103 0.823955
-f 2595 2596 2598
-f 2596 2597 2598
-f 2596 2595 2600
-f 2599 2600 2595
-f 2602 2597 2601
-f 2596 2601 2597
-f 2603 2601 2600
-f 2600 2601 2596
-v 1.736425 -2.743683 0.736866
-v 1.841282 -2.716008 0.708009
-v 1.857471 -2.950722 0.669988
-v 1.776024 -2.980086 0.707575
-f 2605 2606 2604
-f 2604 2606 2607
-v 2.002745 -3.523420 0.688103
-v 1.941325 -3.434803 0.701314
-v 2.107985 -3.363571 0.677007
-v 2.126553 -3.549679 0.701005
-v 2.309358 -3.345468 0.801508
-v 2.235942 -3.243103 0.823955
-v 2.244147 -3.545557 0.732888
-v 2.377814 -3.484109 0.800332
-v 2.197935 -3.583948 0.936437
-v 2.440236 -3.509564 1.019417
-v 2.254361 -3.550931 1.235118
-v 2.025468 -3.556842 1.204841
-v 2.078928 -3.584991 0.917088
-f 2608 2609 2610
-f 2608 2610 2611
-f 2612 2610 2613
-f 2610 2614 2611
-f 2614 2610 2615
-f 2610 2612 2615
-f 2616 2614 2617
-f 2614 2615 2617
-f 2618 2619 2616
-f 2616 2619 2620
-v -2.687162 -1.539807 0.988048
-v -2.837147 -1.791733 0.921563
-v -2.734184 -1.717948 0.749581
-v -2.591357 -1.510845 0.885470
-v -2.765069 -1.561164 1.084313
-v -2.918293 -1.904184 1.004659
-v -2.862576 -1.546894 1.117139
-v -3.010917 -1.884498 1.083510
-v -2.955052 -1.496840 1.128812
-v -3.117476 -1.866892 1.108034
-v -3.063133 -1.440555 1.090926
-v -3.232610 -1.834299 1.087832
-v -3.387254 -1.486027 0.672861
-v -3.498521 -1.762078 0.762472
-v -3.490520 -1.760417 0.903104
-v -3.365990 -1.485170 0.888076
-v -3.319817 -1.365015 0.886015
-v -3.335942 -1.365685 0.724590
-v -3.068444 -2.260195 1.035070
-v -3.177824 -2.279173 1.047580
-v -3.162498 -2.556375 1.058409
-v -3.078699 -2.553982 1.046834
-v -3.047974 -2.109628 1.063497
-v -3.169489 -2.110039 1.076796
-v -3.207447 -2.103206 1.071366
-v -3.281816 -2.305055 1.001878
-v -3.251541 -2.564050 1.023627
-v -3.327526 -2.075729 1.005328
-v -3.357996 -1.811803 0.975625
-v -3.389388 -2.305625 0.950348
-v -3.347304 -2.573628 0.955211
-v -3.451965 -2.077314 0.931974
-v -3.007483 -2.270712 0.984279
-v -3.022819 -2.522240 0.979148
-v -2.969687 -2.097941 0.982836
-v -2.892438 -1.950810 0.878120
-v -2.981187 -2.142718 0.858353
-v -3.030605 -2.311222 0.884330
-v -3.046610 -2.510881 0.900772
-v -3.040398 -2.156239 0.808208
-v -2.964215 -1.978727 0.776572
-v -3.144012 -2.333635 0.829994
-v -3.120761 -2.157770 0.766432
-v -3.066022 -1.953125 0.719516
-v -3.253309 -2.137354 0.760713
-v -3.211005 -1.850398 0.700723
-v -3.235873 -2.335338 0.820588
-v -3.132772 -2.528669 0.848639
-v -3.240554 -2.555467 0.856262
-v -3.381262 -1.828189 0.697034
-v -3.304804 -1.582192 0.643445
-v -3.139394 -1.687482 0.638546
-v -3.422698 -2.070796 0.773898
-v -3.339489 -2.328145 0.827572
-v -3.297886 -2.549020 0.861657
-v -3.463753 -2.079892 0.844667
-v -3.412068 -2.356105 0.865813
-v -3.372066 -2.569159 0.904785
-v -3.342096 -1.533989 0.921628
-v 2.024530 -2.195334 0.811284
-v 1.985330 -2.221319 0.893145
-v 1.930747 -2.463535 0.894743
-v 1.953911 -2.462233 0.830594
-v 2.047696 -2.050138 0.814712
-v 2.013095 -2.051912 0.911043
-v 2.053108 -1.738285 0.824853
-v 2.021591 -1.755289 0.912093
-v 2.059844 -1.561331 0.858957
-v 2.036036 -1.579080 0.967151
-v 1.718315 -2.775468 0.921796
-v 1.771416 -2.769024 0.946100
-v 1.737623 -2.485017 0.918334
-v 1.678986 -2.513137 0.891745
-v 1.710406 -2.272223 0.954296
-v 1.648793 -2.280014 0.929365
-v 1.720031 -2.105568 0.971354
-v 1.624900 -2.087301 0.963391
-v 1.717145 -1.809530 1.004092
-v 1.572979 -1.827591 0.985823
-v 1.650318 -1.645881 1.053347
-v 1.541750 -1.643613 1.014190
-v 1.655948 -2.520927 0.844269
-v 1.586321 -2.273752 0.880969
-v 1.529305 -2.092083 0.887353
-v 1.508714 -1.808578 0.934359
-v 1.480629 -1.640132 0.953447
-v 1.663494 -2.485963 0.790773
-v 1.601290 -2.267132 0.787696
-v 1.544087 -2.080722 0.786432
-v 1.473886 -1.818947 0.799576
-v 1.451825 -1.576856 0.702758
-v 1.756349 -2.446399 0.705428
-v 1.677597 -2.237953 0.696318
-v 1.643403 -2.076583 0.689565
-v 1.596751 -1.722028 0.684655
-v 1.599889 -1.595526 0.623185
-v 1.960643 -2.712860 0.900890
-v 1.994078 -2.713047 0.824553
-v 1.880971 -2.733242 0.890200
-v 1.864064 -2.469953 0.935601
-v 1.937009 -1.625419 1.026843
-v 1.941767 -1.759457 0.997454
-v 1.918641 -2.083654 1.001275
-v 1.906370 -2.282284 0.964887
-v 1.830669 -2.736121 0.903313
-v 1.801127 -2.484690 0.938593
-v 1.818846 -1.756976 1.023593
-v 1.804927 -1.581954 1.089198
-v 1.839224 -2.109267 0.998351
-v 1.818266 -2.313852 0.968652
-f 2622 2623 2621
-f 2621 2623 2624
-f 2625 2626 2621
-f 2626 2622 2621
-f 2626 2625 2628
-f 2627 2628 2625
-f 2629 2630 2627
-f 2630 2628 2627
-f 2631 2632 2629
-f 2632 2630 2629
-f 2636 2633 2635
-f 2633 2634 2635
-f 2633 2636 2638
-f 2636 2637 2638
-f 2642 2639 2641
-f 2639 2640 2641
-f 2640 2639 2644
-f 2643 2644 2639
-f 2630 2644 2628
-f 2628 2644 2643
-f 2644 2645 2640
-f 2644 2630 2645
-f 2630 2632 2645
-f 2641 2640 2647
-f 2640 2646 2647
-f 2648 2646 2645
-f 2645 2646 2640
-f 2649 2648 2632
-f 2632 2648 2645
-f 2650 2651 2646
-f 2646 2651 2647
-f 2652 2650 2648
-f 2648 2650 2646
-f 2635 2652 2649
-f 2649 2652 2648
-f 2639 2642 2653
-f 2653 2642 2654
-f 2653 2655 2639
-f 2655 2643 2639
-f 2628 2643 2626
-f 2626 2643 2655
-f 2622 2626 2656
-f 2657 2656 2655
-f 2655 2656 2626
-f 2655 2653 2657
-f 2653 2658 2657
-f 2653 2654 2658
-f 2654 2659 2658
-f 2656 2657 2661
-f 2657 2660 2661
-f 2658 2660 2657
-f 2658 2662 2660
-f 2662 2663 2660
-f 2664 2661 2663
-f 2660 2663 2661
-f 2666 2664 2665
-f 2663 2665 2664
-f 2665 2663 2667
-f 2662 2667 2663
-f 2669 2667 2668
-f 2668 2667 2662
-f 2633 2671 2634
-f 2670 2634 2671
-f 2671 2672 2670
-f 2672 2666 2670
-f 2665 2673 2666
-f 2673 2670 2666
-f 2673 2665 2674
-f 2667 2674 2665
-f 2667 2669 2674
-f 2669 2675 2674
-f 2676 2634 2673
-f 2673 2634 2670
-f 2676 2673 2677
-f 2674 2677 2673
-f 2674 2675 2677
-f 2675 2678 2677
-f 2676 2677 2652
-f 2677 2650 2652
-f 2651 2650 2678
-f 2678 2650 2677
-f 2634 2676 2635
-f 2676 2652 2635
-f 2636 2635 2679
-f 2679 2635 2649
-f 2680 2681 2683
-f 2681 2682 2683
-f 2681 2680 2685
-f 2684 2685 2680
-f 2684 2686 2685
-f 2686 2687 2685
-f 2689 2687 2688
-f 2688 2687 2686
-f 2691 2692 2690
-f 2690 2692 2693
-f 2693 2692 2695
-f 2692 2694 2695
-f 2695 2694 2697
-f 2694 2696 2697
-f 2696 2698 2697
-f 2697 2698 2699
-f 2698 2700 2699
-f 2699 2700 2701
-f 2702 2693 2703
-f 2693 2695 2703
-f 2697 2704 2695
-f 2703 2695 2704
-f 2704 2697 2705
-f 2697 2699 2705
-f 2699 2701 2705
-f 2705 2701 2706
-f 2703 2708 2702
-f 2707 2702 2708
-f 2708 2703 2709
-f 2703 2704 2709
-f 2705 2710 2704
-f 2709 2704 2710
-f 2706 2711 2705
-f 2710 2705 2711
-f 2712 2707 2713
-f 2707 2708 2713
-f 2709 2714 2708
-f 2713 2708 2714
-f 2715 2714 2710
-f 2714 2709 2710
-f 2711 2716 2710
-f 2715 2710 2716
-f 2717 2718 2682
-f 2718 2683 2682
-f 2719 2717 2720
-f 2717 2682 2720
-f 2689 2721 2687
-f 2687 2721 2722
-f 2723 2685 2722
-f 2685 2687 2722
-f 2681 2724 2682
-f 2720 2682 2724
-f 2724 2681 2723
-f 2681 2685 2723
-f 2692 2691 2726
-f 2725 2726 2691
-f 2720 2726 2719
-f 2725 2719 2726
-f 2728 2700 2727
-f 2727 2700 2698
-f 2727 2698 2729
-f 2729 2698 2696
-f 2729 2696 2730
-f 2730 2696 2694
-f 2694 2692 2730
-f 2726 2730 2692
-f 2727 2722 2728
-f 2722 2721 2728
-f 2729 2723 2727
-f 2723 2722 2727
-f 2730 2724 2729
-f 2724 2723 2729
-f 2724 2730 2720
-f 2720 2730 2726
-v 2.170039 -3.134504 0.978866
-v 2.091539 -3.032437 0.947029
-v 1.980621 -3.043895 0.964237
-v 2.440236 -3.509564 1.019417
-v 2.386827 -3.462222 1.136480
-v 2.343303 -3.507846 1.195262
-v 2.254361 -3.550931 1.235118
-v 2.197935 -3.583948 0.936437
-f 2731 2732 2733
-f 2737 2738 2736
-f 2736 2738 2735
-f 2734 2735 2738
-v 1.736425 -2.743683 0.736866
-v 1.663494 -2.485963 0.790773
-v 1.756349 -2.446399 0.705428
-v 1.841282 -2.716008 0.708009
-v 1.596751 -1.722028 0.684655
-v 1.599889 -1.595526 0.623185
-v 1.721211 -1.590185 0.601932
-v 1.740323 -1.679830 0.664098
-v 1.643403 -2.076583 0.689565
-v 1.747671 -2.067518 0.638841
-v 1.677597 -2.237953 0.696318
-v 1.772999 -2.230292 0.644940
-v 1.700797 -2.794792 0.824250
-v 1.655948 -2.520927 0.844269
-v 2.001343 -2.847715 0.762517
-v 1.972647 -2.728848 0.772496
-v 1.994078 -2.713047 0.824553
-v 2.057496 -2.887282 0.844225
-v 1.947264 -2.443232 0.732587
-v 1.884318 -2.724404 0.701999
-v 1.828658 -2.477348 0.673470
-v 1.921881 -2.157616 0.692678
-v 1.953911 -2.462233 0.830594
-v 1.963153 -1.588839 0.612861
-v 1.991892 -1.748400 0.652770
-v 1.945206 -2.015769 0.672724
-v 2.059844 -1.561331 0.858957
-v 2.053108 -1.738285 0.824853
-v 2.047696 -2.050138 0.814712
-v 2.024530 -2.195334 0.811284
-v 2.126237 -1.330172 0.721011
-v 2.158051 -1.209613 0.783941
-v 2.141273 -1.234642 0.941254
-v 2.111557 -1.376942 0.896570
-v 2.099566 -1.259996 1.055763
-v 2.071448 -1.410118 1.006192
-v 1.966698 -1.228160 1.153716
-v 1.974215 -1.469208 1.068951
-v 1.805207 -1.268427 1.165317
-v 1.801794 -1.465464 1.129277
-v 1.601721 -1.262359 1.141420
-v 1.612396 -1.485728 1.099731
-v 1.497480 -1.283201 1.088258
-v 1.516700 -1.453050 1.068516
-v 1.430817 -1.301205 1.024924
-v 1.454817 -1.430228 0.976569
-v 1.348219 -1.282064 0.845204
-v 1.328862 -1.352627 0.758733
-v 2.180012 -1.130557 0.821812
-v 2.177450 -1.127765 0.974416
-v 2.148553 -1.103067 1.065410
-v 2.024692 -1.074646 1.172465
-v 1.838895 -1.087204 1.201408
-v 1.645819 -1.087442 1.173773
-v 1.524407 -1.125312 1.142248
-v 1.438439 -1.148029 1.098069
-v 1.310865 -1.136322 0.914838
-v 2.048200 -1.581983 0.555832
-v 2.079600 -1.473377 0.654997
-v 1.650318 -1.645881 1.053347
-v 1.804927 -1.581954 1.089198
-v 1.937009 -1.625419 1.026843
-v 2.036036 -1.579080 0.967151
-v 2.229345 -0.992723 0.862826
-v 2.222082 -0.957342 1.014137
-v 1.867657 -0.920633 1.206933
-v 1.635139 -0.965221 1.184968
-v 2.058189 -0.931238 1.163518
-v 2.158585 -0.955809 1.113647
-v 1.451825 -1.576856 0.702758
-v 1.480629 -1.640132 0.953447
-v 1.428883 -0.986690 1.133905
-v 1.337875 -0.945716 1.021299
-v 1.541750 -1.643613 1.014190
-v 1.536037 -0.985876 1.185597
-v 3.247406 2.073333 0.000000
-v 2.985371 1.982663 0.000000
-v 3.009101 1.971604 0.034220
-v 3.233975 2.059193 0.072431
-v 3.036361 1.913989 0.169838
-v 3.252224 2.026347 0.148215
-v 3.058366 1.773346 0.297337
-v 3.276333 1.863773 0.294266
-v 3.086666 1.632991 0.338863
-v 3.337545 1.748927 0.340210
-v 3.115383 1.492390 0.380228
-v 3.377233 1.587800 0.400781
-v 3.163181 1.209972 0.462438
-v 3.473410 1.366149 0.454658
-v 3.189664 0.907503 0.500122
-v 3.528445 1.060127 0.489443
-v 3.280681 0.510802 0.499434
-v 3.559394 0.706516 0.452535
-v 3.321825 0.266690 0.465750
-v 3.619650 0.472046 0.391742
-v 3.360040 0.165487 0.412685
-v 3.641195 0.407454 0.362198
-v 3.378799 0.073736 0.355362
-v 3.674710 0.338839 0.307840
-v 3.438950 -0.082580 0.257015
-v 3.700363 0.265794 0.240762
-v 3.514981 -0.121886 0.187589
-v 3.737014 0.181837 0.176819
-v 3.486028 -0.141683 0.000000
-v 3.731689 0.186391 0.000000
-v 3.454971 2.169877 0.000000
-v 3.458300 2.151656 0.102662
-v 3.727093 2.308406 0.150049
-v 3.716360 2.343387 0.000000
-v 3.955635 0.432417 0.197586
-v 3.929251 0.411689 0.000000
-v 4.126565 0.642027 0.000000
-v 4.120842 0.627141 0.185461
-v 3.889626 0.475277 0.247365
-v 3.861841 0.560638 0.311961
-v 4.105198 0.672581 0.300001
-v 3.849352 0.664451 0.387198
-v 4.068249 0.798926 0.400813
-v 3.823137 0.853054 0.461519
-v 4.041657 1.039756 0.496922
-v 3.747724 1.184933 0.518662
-v 3.988510 1.297806 0.539537
-v 3.650974 1.463740 0.478617
-v 3.886058 1.550141 0.504830
-v 3.590526 1.701090 0.411994
-v 3.881998 1.764428 0.476337
-v 3.541188 1.849183 0.386366
-v 3.814876 1.968416 0.443000
-v 3.479418 1.978250 0.317478
-v 3.758215 2.206683 0.323051
-v 3.460196 2.103494 0.180368
-v 3.745669 2.266001 0.241930
-v 3.335210 -0.375755 0.000000
-v 3.342159 -0.384674 0.201349
-v 3.107533 -0.691019 0.264602
-v 3.118124 -0.703925 0.000000
-v 2.715712 1.828219 0.167709
-v 2.723503 1.898839 0.000000
-v 2.339597 1.807702 0.000000
-v 2.361089 1.766660 0.202595
-v 2.738132 1.687333 0.295046
-v 2.406969 1.645328 0.341479
-v 2.775680 1.538710 0.352829
-v 2.519027 1.485931 0.422962
-v 2.815366 1.377583 0.413399
-v 2.553871 1.284278 0.512335
-v 2.854291 1.093951 0.494650
-v 2.637461 1.017260 0.581611
-v 2.948387 0.783357 0.515058
-v 2.747937 0.712253 0.615674
-v 3.061090 0.397226 0.574193
-v 2.811504 0.469098 0.657443
-v 2.898733 0.271916 0.651298
-v 3.136321 0.171237 0.539896
-v 2.919870 0.084875 0.642460
-v 3.166160 0.021310 0.457261
-v 2.953029 -0.127690 0.520499
-v 3.199571 -0.153739 0.380150
-v 2.986408 -0.413503 0.428964
-v 3.286426 -0.300744 0.276331
-v 3.053144 -0.609681 0.326931
-v 2.835437 -0.231101 0.577890
-v 2.679445 0.687427 0.720573
-v 2.753156 0.400829 0.713141
-v 2.790681 0.219187 0.718263
-v 2.790657 0.044324 0.717488
-v 2.743995 -0.129852 0.718277
-v 2.736198 -0.346225 0.659345
-v 2.396355 1.242239 0.597722
-v 2.482917 0.997637 0.702425
-v 2.514162 0.988713 0.674527
-v 2.543372 -0.548031 0.937182
-v 2.410367 -0.777999 0.841105
-v 2.539200 -0.727778 0.750475
-v 2.618307 -0.549092 0.805491
-v 2.594499 -0.422948 0.981263
-v 2.690576 -0.368057 0.819343
-v 2.607430 -0.208248 0.974218
-v 2.702577 -0.197406 0.795611
-v 2.649413 0.031535 1.024796
-v 2.734183 0.038769 0.865810
-v 2.668936 0.206182 1.014371
-v 2.731512 0.219003 0.891585
-v 2.616001 0.447717 0.960748
-v 2.706960 0.393597 0.849582
-v 2.570400 0.738683 0.830405
-v 2.604217 0.728827 0.769671
-v 2.688131 -0.517509 0.672975
-v 2.542439 0.999928 0.648592
-v 2.128139 1.788397 0.000000
-v 2.132390 1.755821 0.180271
-v 2.183003 1.654070 0.341767
-v 2.301359 1.397721 0.546015
-v 2.346081 -0.745350 1.013296
-v 2.245624 -0.864372 0.995778
-v 2.292449 -0.871852 0.882400
-v 2.069379 1.727818 0.212746
-v 2.096552 1.678482 0.326810
-v 2.189848 1.468992 0.517501
-v 2.266003 1.273253 0.663332
-v 2.347317 1.066114 0.758763
-v 2.399389 0.782091 0.915279
-v 2.448969 0.529858 1.037335
-v 2.495354 0.250522 1.132081
-v 2.500490 -0.035029 1.170179
-v 2.452588 -0.244072 1.138797
-v 2.439827 -0.395385 1.131324
-v 2.384638 -0.591919 1.043058
-v 2.013534 -0.662303 1.191491
-v 2.108912 -0.357128 1.259691
-v 1.794465 1.787719 0.000000
-v 1.807583 1.756546 0.177627
-v 2.042206 1.777154 0.000000
-v 2.136269 -0.187666 1.278057
-v 2.141790 -0.055306 1.295565
-v 2.081700 0.283249 1.259461
-v 2.023441 0.529338 1.144399
-v 1.975941 0.827957 1.018423
-v 1.958254 1.130271 0.861813
-v 1.859443 1.450393 0.632222
-v 1.821946 1.618209 0.403751
-v 1.798719 1.714447 0.259352
-v 0.733818 1.740873 0.000000
-v 0.234527 1.730117 0.000000
-v 0.223642 1.684075 0.160743
-v 0.737904 1.604213 0.281713
-v 0.237330 1.595746 0.288672
-v 0.725959 1.478055 0.461804
-v 0.289039 1.496446 0.430055
-v 0.760722 1.205036 0.700545
-v 0.305671 1.298417 0.629719
-v 0.857323 0.985001 0.874029
-v 0.243473 1.134082 0.819993
-v 0.921312 0.755659 0.999330
-v 0.316341 0.785311 1.086260
-v 0.939271 0.379986 1.185872
-v 0.539252 0.353984 1.254493
-v 0.927775 0.195225 1.233043
-v 0.539150 0.148262 1.321014
-v 0.950215 0.042751 1.256188
-v 0.516872 -0.020713 1.356627
-v 0.943855 -0.101127 1.274771
-v 0.542386 -0.188227 1.370375
-v 0.960321 -0.308052 1.243133
-v 0.546875 -0.390940 1.363244
-v 0.974530 -0.525273 1.140353
-v 0.550658 -0.633015 1.331311
-v 0.948819 -0.638568 1.102958
-v 0.527724 -0.862854 1.253811
-v 0.939974 -0.894739 1.019809
-v 0.544825 -1.133123 1.096902
-v 0.956456 -1.070504 0.921063
-v 0.530629 -1.316423 0.929842
-v 0.930660 -1.216516 0.831196
-v 0.538756 -1.408602 0.764911
-v 0.922703 -1.296032 0.728307
-v 0.489819 -1.524947 0.672392
-v 0.912699 -1.455066 0.576185
-v 0.480235 -1.631521 0.401961
-v 0.912989 -1.499314 0.419547
-v 0.446550 -1.672950 0.000000
-v 0.927497 -1.558489 0.000000
-v -0.228904 1.734267 0.000000
-v -0.547248 1.742126 0.000000
-v -0.559706 1.694180 0.186107
-v -0.221516 1.686349 0.151403
-v -0.557624 1.641278 0.271462
-v -0.267035 1.627058 0.266577
-v -0.626493 1.585426 0.443136
-v -0.247999 1.565146 0.389142
-v -0.597781 1.489620 0.641047
-v -0.179548 1.471301 0.544513
-v -0.674657 1.333008 0.761059
-v -0.192546 1.305535 0.700080
-v -0.910602 1.204118 0.837740
-v -0.406155 1.005088 0.971088
-v -0.969076 0.901205 1.146223
-v -0.115190 0.458427 1.346197
-v -0.752416 0.438132 1.467349
-v 0.005537 0.163519 1.472265
-v -0.645496 0.179261 1.584316
-v 0.018086 0.002865 1.523199
-v -0.536767 -0.144454 1.682232
-v 0.034087 -0.225059 1.542949
-v -0.533528 -0.582280 1.701405
-v 0.010486 -0.502317 1.576297
-v -0.505045 -0.913827 1.645612
-v 0.021051 -0.831931 1.511548
-v -0.487217 -1.193519 1.504026
-v -0.041570 -1.143825 1.395176
-v -0.524231 -1.399266 1.313019
-v -0.071941 -1.346991 1.237379
-v -0.526127 -1.495000 1.167736
-v -0.072300 -1.450245 1.087397
-v -0.535144 -1.615983 0.920556
-v -0.063012 -1.583021 0.865082
-v -0.866132 1.754670 0.000000
-v -1.179474 1.786649 0.000000
-v -1.215563 1.757097 0.133494
-v -0.894132 1.712652 0.151911
-v -1.227613 1.709095 0.276029
-v -0.954897 1.677544 0.293034
-v -1.292756 1.656509 0.514030
-v -1.017767 1.607824 0.541965
-v -1.338488 1.613735 0.725441
-v -1.046070 1.509097 0.761060
-v -1.403848 1.533059 0.902827
-v -1.115594 1.392380 0.819623
-v -1.551526 1.400025 1.050193
-v -1.278903 1.192051 0.946843
-v -1.552899 1.128654 1.151040
-v -1.200768 0.978822 1.103391
-v -1.454529 0.875045 1.238858
-v -1.147922 0.807955 1.254191
-v -1.405685 0.573835 1.352181
-v -1.120716 0.424016 1.456990
-v -1.479588 0.295746 1.440042
-v -1.077307 0.165008 1.553393
-v -1.489699 -0.024215 1.510987
-v -1.053434 -0.342553 1.690245
-v -1.395501 -0.698702 1.553257
-v -1.077209 -0.869649 1.633144
-v -1.376176 -0.948757 1.451608
-v -1.061272 -1.141877 1.496230
-v -1.402349 -1.127845 1.309055
-v -1.001366 -1.335897 1.353338
-v -1.407658 -1.236026 1.112930
-v -0.952525 -1.440582 1.168650
-v 1.640095 -0.674556 1.246804
-v 1.644178 -0.857872 1.208494
-v 1.456656 1.785879 0.000000
-v 1.462507 1.745481 0.222394
-v 1.483832 1.697594 0.288781
-v 1.497138 1.618935 0.401108
-v 1.504951 1.483493 0.585976
-v 1.517126 1.334367 0.741076
-v 1.570685 0.938327 0.989108
-v 1.582203 0.771083 1.068180
-v 1.630080 0.420236 1.172369
-v 1.649027 0.224458 1.211969
-v 1.660355 0.019397 1.246002
-v 1.664159 -0.189659 1.266729
-v 1.678622 -0.410061 1.291177
-v 1.920432 -1.567396 0.000000
-v 1.604939 -1.556997 0.000000
-v 1.192040 -1.330605 0.678707
-v 1.210555 -1.460061 0.576841
-v 1.223415 -1.532658 0.434522
-v 1.289448 -1.546597 0.000000
-v 1.219163 -1.218342 0.823029
-v 1.373216 -0.564620 1.106245
-v 1.252961 -0.928825 1.001643
-v 1.230116 -1.085439 0.894543
-v -0.078470 -1.688266 0.800230
-v -0.094135 -1.769086 0.556924
-v -0.953236 -1.545941 0.899180
-v 2.881063 -0.493146 0.521968
-v 2.824356 -1.407256 0.355013
-v 2.740886 -1.339225 0.463604
-v 2.663024 -1.440487 0.478149
-v -1.350950 1.807009 0.000000
-v -1.365948 1.769608 0.133901
-v -1.396332 1.723782 0.267642
-v -1.417595 1.676180 0.529265
-v -1.465432 1.655336 0.722125
-v -1.582187 1.567542 0.982349
-v -1.721806 1.391264 1.113307
-v -1.733703 1.083864 1.181489
-v -1.807421 0.657142 1.209422
-v -1.796156 0.452382 1.243643
-v -1.810920 0.287592 1.292257
-v -1.795130 0.033439 1.371160
-v -1.802864 -0.282523 1.401315
-v -1.837859 -0.540871 1.295851
-v -1.782928 -0.770786 1.173619
-v -1.757573 -0.945337 1.075832
-v -1.676510 1.826886 0.000000
-v -1.683863 1.789041 0.121501
-v -1.714432 1.747956 0.247594
-v -1.744732 1.734849 0.433807
-v -1.929731 1.617188 0.806390
-v -1.996117 1.387891 1.064104
-v -1.980388 1.134038 1.143196
-v -2.013663 0.810726 1.158827
-v -2.030191 0.547622 1.189762
-v -2.021159 0.411979 1.234679
-v -1.932916 0.232972 1.304589
-v -1.897394 0.037852 1.365798
-v -1.950547 -0.275573 1.377028
-v -2.033655 -0.526012 1.277639
-v -2.050292 -0.755566 1.114167
-v -2.043593 -0.875823 1.028879
-v -2.033406 -0.910030 0.964220
-v -1.782298 -1.020581 0.943381
-v -1.198513 -1.456102 0.885435
-v -1.456655 -1.295527 0.894240
-v -1.366873 -1.340211 0.907567
-v -2.057387 1.841308 0.000000
-v -2.079597 1.817785 0.138375
-v -2.100170 1.789980 0.229245
-v -2.137524 1.753182 0.433142
-v -2.172139 1.623010 0.805318
-v -2.205791 1.356023 1.081662
-v -2.296056 1.062810 1.171139
-v -2.298249 0.768333 1.203884
-v -2.256285 0.547326 1.238301
-v -2.158400 0.381542 1.272962
-v -2.070413 0.207766 1.335106
-v -2.064786 0.018789 1.411866
-v -2.187634 -0.375454 1.406902
-v -2.276341 -0.689823 1.268026
-v -2.292049 -0.933921 1.128136
-v -2.299356 -1.025449 1.044687
-v -2.306662 -1.116976 0.961238
-v -2.629466 1.918204 0.000000
-v -2.672899 1.905110 0.067168
-v -2.697367 1.871291 0.218796
-v -2.703112 1.825435 0.395127
-v -2.715246 1.746763 0.604653
-v -2.717480 1.576797 0.875971
-v -2.684930 1.262021 1.110490
-v -2.572286 0.835495 1.252192
-v -2.536112 0.656633 1.269661
-v -2.520947 0.559036 1.273617
-v -2.473750 0.300945 1.316695
-v -2.433366 0.078222 1.371269
-v -2.414730 -0.108377 1.395384
-v -2.382920 -0.417450 1.375045
-v -2.430508 -0.822313 1.254486
-v -2.566746 -1.211312 1.167101
-v -3.037562 2.001526 0.000000
-v -3.053102 1.968810 0.051104
-v -3.077669 1.871112 0.217368
-v -3.075310 1.846000 0.363149
-v -3.109047 1.789477 0.565323
-v -3.085650 1.657340 0.784479
-v -3.028932 1.461517 0.941324
-v -2.930312 1.103580 1.125876
-v -2.825835 0.755899 1.209042
-v -2.790630 0.468810 1.224273
-v -2.787011 0.264495 1.237352
-v -2.687022 0.076781 1.290565
-v -2.649338 -0.241719 1.339644
-v -2.616467 -0.511373 1.344133
-v -2.624856 -0.888200 1.261176
-v -2.725776 -1.214862 1.190384
-v -2.862576 -1.546894 1.117139
-v -2.765069 -1.561164 1.084313
-v -3.392806 1.769365 0.000000
-v -3.507689 1.700214 0.000000
-v -3.519716 1.685231 0.317130
-v -3.358510 1.810253 0.380095
-v -3.527168 1.583508 0.512679
-v -3.395381 1.726325 0.554770
-v -3.512997 1.448050 0.611386
-v -3.338742 1.598933 0.689636
-v -3.476235 1.287798 0.704766
-v -3.278080 1.432418 0.853958
-v -3.442151 1.105486 0.762934
-v -3.244771 1.195540 0.910945
-v -3.379131 0.767915 0.885996
-v -3.196410 0.797564 0.985913
-v -3.306875 0.379713 0.987620
-v -3.112555 0.457376 1.084816
-v -3.251181 0.175063 1.053445
-v -3.044646 0.224321 1.164934
-v -3.160225 -0.018852 1.113626
-v -2.971546 0.032038 1.215971
-v -3.101125 -0.354760 1.162409
-v -2.907080 -0.345582 1.281557
-v -3.096267 -0.668100 1.140081
-v -2.901159 -0.619504 1.284058
-v -3.122061 -0.998702 1.065015
-v -2.937658 -1.002749 1.219413
-v -3.150210 -1.259588 1.001021
-v -2.982676 -1.264649 1.133596
-v -3.188954 -1.408279 0.963611
-v -3.063133 -1.440555 1.090926
-v -3.690685 1.602080 0.000000
-v -3.734989 1.589433 0.295202
-v -3.697974 1.466697 0.433432
-v -3.684619 1.350690 0.501428
-v -3.655148 1.190938 0.573692
-v -3.639878 1.015186 0.615203
-v -3.582867 0.734419 0.697787
-v -3.504525 0.405574 0.847066
-v -3.424258 0.158638 0.918279
-v -3.365413 -0.113447 0.952400
-v -3.290393 -0.424259 0.984153
-v -3.233333 -0.683782 1.015512
-v -3.238094 -0.979377 0.961631
-v -3.277510 -1.177346 0.915300
-v -3.319817 -1.365015 0.886015
-v -3.709827 1.417763 0.000000
-v -3.709741 1.351194 0.211745
-v -3.701634 1.272650 0.270469
-v -3.695872 1.156978 0.316829
-v -3.672431 1.044224 0.364991
-v -3.664355 0.932851 0.370749
-v -3.631292 0.701013 0.420276
-v -3.570384 0.385564 0.524480
-v -3.520188 0.140164 0.618561
-v -3.458251 -0.125950 0.731712
-v -3.406618 -0.343461 0.746456
-v -3.283698 -0.730967 0.793898
-v -2.687162 -1.539807 0.988048
-v -2.462835 -1.305500 0.966395
-v -2.591357 -1.510845 0.885470
-v -2.955052 -1.496840 1.128812
-v -3.357996 -1.811803 0.975625
-v -3.232610 -1.834299 1.087832
-v -3.365990 -1.485170 0.888076
-v -3.342096 -1.533989 0.921628
-v -2.964215 -1.978727 0.776572
-v -2.811581 -1.798210 0.712737
-v -2.734184 -1.717948 0.749581
-v -2.892438 -1.950810 0.878120
-v -2.837147 -1.791733 0.921563
-v -3.046610 -2.510881 0.900772
-v -3.132772 -2.528669 0.848639
-v -3.144012 -2.333635 0.829994
-v -3.030605 -2.311222 0.884330
-v -3.223286 -3.001780 1.126176
-v -3.261810 -2.821069 1.088218
-v -3.320330 -2.827513 1.063914
-v -3.302419 -3.017921 1.128514
-v -2.986345 -2.933770 1.087679
-v -3.053267 -2.764905 1.043008
-v -3.141072 -2.785287 1.032318
-v -3.107105 -2.947818 1.092235
-v -2.946527 -2.939327 0.986343
-v -3.016419 -2.765091 0.966671
-v -3.301857 -3.074776 1.114869
-v -3.316551 -3.168932 1.121229
-v -3.227676 -3.141660 1.103969
-v -3.217306 -3.187686 1.075214
-f 2741 2742 2740
-f 2739 2740 2742
-f 2744 2745 2743
-f 2743 2745 2746
-f 2746 2748 2743
-f 2747 2743 2748
-f 2748 2750 2747
-f 2749 2747 2750
-f 2739 2751 2740
-f 2751 2752 2740
-f 2755 2756 2754
-f 2753 2754 2756
-f 2754 2758 2757
-f 2757 2758 2759
-f 2757 2759 2760
-f 2760 2759 2750
-f 2741 2759 2742
-f 2758 2742 2759
-f 2759 2741 2750
-f 2741 2749 2750
-f 2757 2761 2754
-f 2755 2754 2761
-f 2762 2763 2745
-f 2746 2745 2763
-f 2748 2746 2764
-f 2746 2763 2764
-f 2762 2765 2763
-f 2763 2765 2766
-f 2766 2767 2763
-f 2764 2763 2767
-f 2764 2767 2760
-f 2760 2767 2768
-f 2760 2768 2757
-f 2757 2768 2761
-f 2769 2770 2772
-f 2770 2771 2772
-f 2773 2774 2771
-f 2772 2771 2774
-f 2775 2776 2773
-f 2774 2773 2776
-f 2776 2775 2778
-f 2775 2777 2778
-f 2779 2780 2777
-f 2778 2777 2780
-f 2779 2781 2780
-f 2780 2781 2782
-f 2781 2783 2782
-f 2782 2783 2784
-f 2784 2783 2786
-f 2783 2785 2786
-f 2771 2770 2788
-f 2770 2787 2788
-f 2789 2773 2788
-f 2771 2788 2773
-f 2773 2789 2775
-f 2789 2790 2775
-f 2791 2777 2790
-f 2775 2790 2777
-f 2779 2777 2792
-f 2777 2791 2792
-f 2792 2793 2779
-f 2779 2793 2781
-f 2793 2794 2781
-f 2781 2794 2783
-f 2794 2795 2783
-f 2783 2795 2785
-f 2765 2762 2797
-f 2762 2796 2797
-f 2780 2798 2778
-f 2778 2798 2799
-f 2800 2776 2799
-f 2776 2778 2799
-f 2801 2774 2800
-f 2774 2776 2800
-f 2765 2772 2801
-f 2772 2774 2801
-f 2765 2797 2772
-f 2797 2769 2772
-f 2788 2787 2803
-f 2802 2803 2787
-f 2804 2805 2791
-f 2805 2792 2791
-f 2791 2790 2804
-f 2806 2804 2790
-f 2789 2807 2790
-f 2807 2806 2790
-f 2788 2803 2789
-f 2803 2807 2789
-f 2808 2809 2786
-f 2809 2784 2786
-f 2795 2794 2811
-f 2794 2810 2811
-f 2782 2812 2780
-f 2812 2798 2780
-f 2784 2809 2782
-f 2809 2812 2782
-f 2793 2792 2813
-f 2792 2805 2813
-f 2794 2793 2810
-f 2793 2813 2810
-f 2814 2815 2817
-f 2815 2816 2817
-f 2816 2818 2817
-f 2817 2818 2819
-f 2819 2818 2821
-f 2818 2820 2821
-f 2822 2823 2820
-f 2821 2820 2823
-f 2823 2822 2825
-f 2822 2824 2825
-f 2826 2827 2824
-f 2825 2824 2827
-f 2828 2829 2826
-f 2827 2826 2829
-f 2830 2831 2828
-f 2829 2828 2831
-f 2832 2833 2830
-f 2831 2830 2833
-f 2832 2834 2833
-f 2833 2834 2835
-f 2836 2837 2834
-f 2835 2834 2837
-f 2838 2839 2836
-f 2837 2836 2839
-f 2839 2838 2841
-f 2838 2840 2841
-f 2842 2843 2840
-f 2841 2840 2843
-f 2846 2847 2845
-f 2844 2845 2847
-f 2850 2851 2849
-f 2848 2849 2851
-f 2852 2848 2851
-f 2851 2854 2852
-f 2853 2852 2854
-f 2854 2856 2853
-f 2855 2853 2856
-f 2858 2857 2856
-f 2857 2855 2856
-f 2859 2857 2860
-f 2857 2858 2860
-f 2861 2859 2862
-f 2859 2860 2862
-f 2864 2863 2862
-f 2863 2861 2862
-f 2866 2865 2864
-f 2865 2863 2864
-f 2868 2867 2866
-f 2867 2865 2866
-f 2867 2868 2869
-f 2869 2868 2870
-f 2870 2846 2869
-f 2845 2869 2846
-f 2873 2874 2872
-f 2871 2872 2874
-f 2877 2878 2876
-f 2875 2876 2878
-f 2878 2880 2875
-f 2879 2875 2880
-f 2880 2882 2879
-f 2881 2879 2882
-f 2884 2883 2882
-f 2883 2881 2882
-f 2883 2884 2885
-f 2885 2884 2886
-f 2885 2886 2887
-f 2887 2886 2888
-f 2889 2887 2890
-f 2887 2888 2890
-f 2889 2890 2891
-f 2889 2891 2892
-f 2892 2891 2893
-f 2895 2894 2893
-f 2894 2892 2893
-f 2897 2896 2895
-f 2896 2894 2895
-f 2899 2898 2897
-f 2898 2896 2897
-f 2898 2899 2872
-f 2872 2899 2873
-f 2817 2845 2814
-f 2814 2845 2844
-f 2840 2872 2842
-f 2842 2872 2871
-f 2816 2815 2876
-f 2818 2816 2875
-f 2816 2876 2875
-f 2820 2818 2879
-f 2818 2875 2879
-f 2879 2881 2820
-f 2822 2820 2881
-f 2883 2824 2881
-f 2824 2822 2881
-f 2885 2826 2883
-f 2826 2824 2883
-f 2826 2885 2828
-f 2828 2885 2887
-f 2828 2887 2830
-f 2830 2887 2889
-f 2830 2889 2832
-f 2832 2889 2892
-f 2894 2834 2892
-f 2834 2832 2892
-f 2896 2836 2894
-f 2836 2834 2894
-f 2836 2896 2838
-f 2838 2896 2898
-f 2840 2838 2872
-f 2838 2898 2872
-f 2848 2841 2849
-f 2841 2843 2849
-f 2841 2848 2839
-f 2839 2848 2852
-f 2853 2837 2852
-f 2837 2839 2852
-f 2835 2837 2853
-f 2853 2855 2835
-f 2833 2835 2855
-f 2833 2855 2831
-f 2831 2855 2857
-f 2831 2857 2829
-f 2829 2857 2859
-f 2829 2859 2827
-f 2827 2859 2861
-f 2863 2825 2861
-f 2825 2827 2861
-f 2825 2863 2823
-f 2823 2863 2865
-f 2867 2821 2865
-f 2821 2823 2865
-f 2821 2867 2819
-f 2819 2867 2869
-f 2845 2817 2869
-f 2817 2819 2869
-f 2895 2900 2897
-f 2902 2890 2901
-f 2890 2888 2901
-f 2891 2890 2903
-f 2890 2902 2903
-f 2891 2903 2893
-f 2893 2903 2904
-f 2905 2906 2900
-f 2905 2900 2893
-f 2900 2895 2893
-f 2893 2904 2905
-f 2907 2908 2909
-f 2911 2912 2910
-f 2910 2912 2913
-f 2915 2914 2913
-f 2914 2910 2913
-f 2914 2915 2916
-f 2916 2915 2917
-f 2917 2919 2916
-f 2918 2916 2919
-f 2919 2921 2918
-f 2920 2918 2921
-f 2922 2920 2923
-f 2920 2921 2923
-f 2923 2925 2922
-f 2924 2922 2925
-f 2908 2924 2909
-f 2924 2925 2909
-f 2913 2926 2915
-f 2926 2906 2915
-f 2927 2907 2909
-f 2927 2909 2901
-f 2901 2909 2925
-f 2923 2902 2925
-f 2902 2901 2925
-f 2921 2903 2923
-f 2903 2902 2923
-f 2903 2921 2904
-f 2904 2921 2919
-f 2917 2905 2919
-f 2905 2904 2919
-f 2905 2917 2906
-f 2906 2917 2915
-f 2901 2888 2927
-f 2888 2886 2927
-f 2878 2877 2929
-f 2877 2928 2929
-f 2929 2930 2878
-f 2880 2878 2930
-f 2930 2931 2880
-f 2882 2880 2931
-f 2882 2931 2884
-f 2884 2931 2907
-f 2884 2907 2886
-f 2886 2907 2927
-f 2932 2933 2911
-f 2911 2933 2934
-f 2930 2929 2936
-f 2929 2935 2936
-f 2931 2930 2937
-f 2930 2936 2937
-f 2937 2938 2931
-f 2907 2931 2938
-f 2908 2907 2939
-f 2907 2938 2939
-f 2939 2940 2908
-f 2924 2908 2940
-f 2922 2924 2941
-f 2924 2940 2941
-f 2941 2942 2922
-f 2920 2922 2942
-f 2942 2943 2920
-f 2918 2920 2943
-f 2916 2918 2944
-f 2918 2943 2944
-f 2916 2944 2914
-f 2914 2944 2945
-f 2945 2946 2914
-f 2910 2914 2946
-f 2910 2946 2911
-f 2911 2946 2932
-f 2934 2933 2802
-f 2933 2803 2802
-f 2947 2933 2932
-f 2948 2947 2946
-f 2947 2932 2946
-f 2935 2951 2950
-f 2949 2950 2951
-f 2946 2945 2948
-f 2952 2948 2945
-f 2952 2945 2944
-f 2944 2943 2952
-f 2953 2952 2943
-f 2954 2953 2942
-f 2953 2943 2942
-f 2955 2954 2941
-f 2954 2942 2941
-f 2955 2941 2956
-f 2956 2941 2940
-f 2940 2939 2956
-f 2957 2956 2939
-f 2958 2957 2938
-f 2957 2939 2938
-f 2938 2937 2958
-f 2959 2958 2937
-f 2937 2936 2959
-f 2960 2959 2936
-f 2936 2935 2960
-f 2950 2960 2935
-f 2964 2961 2963
-f 2961 2962 2963
-f 2963 2965 2964
-f 2964 2965 2966
-f 2968 2966 2967
-f 2966 2965 2967
-f 2970 2968 2969
-f 2968 2967 2969
-f 2972 2970 2971
-f 2970 2969 2971
-f 2971 2973 2972
-f 2972 2973 2974
-f 2973 2975 2974
-f 2974 2975 2976
-f 2978 2976 2977
-f 2976 2975 2977
-f 2980 2978 2979
-f 2978 2977 2979
-f 2982 2980 2981
-f 2980 2979 2981
-f 2984 2982 2983
-f 2982 2981 2983
-f 2985 2986 2983
-f 2984 2983 2986
-f 2988 2986 2987
-f 2986 2985 2987
-f 2989 2990 2987
-f 2988 2987 2990
-f 2991 2992 2989
-f 2990 2989 2992
-f 2991 2993 2992
-f 2992 2993 2994
-f 2995 2996 2993
-f 2994 2993 2996
-f 2997 2998 2995
-f 2996 2995 2998
-f 2999 3000 2997
-f 2998 2997 3000
-f 3002 3003 3001
-f 3001 3003 3004
-f 3004 3003 3006
-f 3003 3005 3006
-f 3007 3008 3005
-f 3006 3005 3008
-f 3010 3008 3009
-f 3008 3007 3009
-f 3011 3012 3009
-f 3010 3009 3012
-f 3013 3014 3011
-f 3012 3011 3014
-f 3016 3014 3015
-f 3014 3013 3015
-f 3015 3017 3016
-f 3016 3017 3018
-f 3017 3019 3018
-f 3018 3019 3020
-f 3019 3021 3020
-f 3020 3021 3022
-f 3021 3023 3022
-f 3022 3023 3024
-f 3023 3025 3024
-f 3024 3025 3026
-f 3026 3025 3028
-f 3025 3027 3028
-f 3029 3030 3027
-f 3028 3027 3030
-f 3030 3029 3032
-f 3029 3031 3032
-f 3034 3032 3033
-f 3032 3031 3033
-f 3038 3035 3037
-f 3035 3036 3037
-f 3038 3037 3040
-f 3037 3039 3040
-f 3040 3039 3042
-f 3039 3041 3042
-f 3044 3042 3043
-f 3042 3041 3043
-f 3043 3045 3044
-f 3044 3045 3046
-f 3046 3045 3048
-f 3045 3047 3048
-f 3050 3048 3049
-f 3048 3047 3049
-f 3050 3049 3052
-f 3049 3051 3052
-f 3052 3051 3054
-f 3051 3053 3054
-f 3055 3056 3053
-f 3054 3053 3056
-f 3058 3056 3057
-f 3056 3055 3057
-f 3057 3059 3058
-f 3058 3059 3060
-f 3062 3060 3061
-f 3060 3059 3061
-f 3064 3062 3063
-f 3062 3061 3063
-f 3066 3064 3065
-f 3064 3063 3065
-f 2947 3067 3068
-f 3070 2950 3069
-f 2950 2949 3069
-f 2950 3070 2960
-f 2960 3070 3071
-f 2959 2960 3072
-f 2960 3071 3072
-f 2958 2959 3073
-f 2959 3072 3073
-f 2957 2958 3074
-f 2958 3073 3074
-f 3074 3075 2957
-f 2956 2957 3075
-f 2956 3075 3076
-f 3077 2955 3076
-f 2955 2956 3076
-f 2955 3077 2954
-f 2954 3077 3078
-f 2953 2954 3079
-f 2954 3078 3079
-f 3079 3080 2953
-f 2952 2953 3080
-f 2952 3080 2948
-f 2948 3080 3081
-f 2948 3081 2947
-f 2947 3081 3067
-f 2803 2947 2807
-f 2947 2806 2807
-f 2947 2803 2933
-f 2947 3068 2805
-f 2947 2805 2804
-f 2947 2804 2806
-f 3083 3082 2745
-f 3082 2762 2745
-f 2808 2786 3085
-f 2786 3084 3085
-f 2744 2808 3086
-f 2808 3085 3086
-f 3082 2796 2762
-f 2744 3086 3083
-f 3086 3087 3083
-f 2745 2744 3083
-f 3088 3084 2785
-f 2786 2785 3084
-f 2811 3089 3090
-f 2795 2811 3091
-f 2811 3090 3091
-f 2785 2795 3088
-f 2795 3091 3088
-f 2813 2805 3068
-f 2810 2813 3067
-f 2813 3068 3067
-f 3067 3081 3089
-f 2810 3067 3089
-f 2961 3070 3069
-f 3087 3086 3000
-f 2998 3000 3086
-f 3086 3085 2998
-f 2996 2998 3085
-f 2994 2996 3084
-f 2996 3085 3084
-f 3084 3088 2994
-f 2992 2994 3088
-f 2992 3088 2990
-f 2990 3088 3091
-f 2988 2990 3090
-f 2990 3091 3090
-f 3089 2986 3090
-f 2986 2988 3090
-f 2984 2986 3089
-f 2982 2984 3081
-f 2984 3089 3081
-f 2980 2982 3080
-f 2982 3081 3080
-f 3080 3079 2980
-f 2978 2980 3079
-f 2976 2978 3078
-f 2978 3079 3078
-f 3078 3077 2976
-f 2974 2976 3077
-f 2972 2974 3076
-f 2974 3077 3076
-f 2970 2972 3075
-f 2972 3076 3075
-f 2968 2970 3075
-f 3075 3074 2968
-f 2966 2968 3074
-f 3074 3073 2966
-f 2964 2966 3073
-f 2964 3073 3072
-f 2961 2964 3071
-f 2964 3072 3071
-f 2961 3071 3070
-f 3001 3004 2962
-f 2962 3004 2963
-f 2965 2963 3006
-f 2963 3004 3006
-f 2967 2965 3008
-f 2965 3006 3008
-f 3008 3010 2967
-f 2967 3010 2969
-f 3010 3012 2969
-f 2969 3012 2971
-f 2973 2971 3014
-f 2971 3012 3014
-f 3014 3016 2973
-f 2973 3016 2975
-f 3016 3018 2975
-f 2975 3018 2977
-f 3018 3020 2977
-f 2977 3020 2979
-f 3020 3022 2979
-f 2979 3022 2981
-f 3022 3024 2981
-f 2981 3024 2983
-f 3024 3026 2983
-f 2983 3026 2985
-f 3028 2987 3026
-f 2985 3026 2987
-f 3030 2989 3028
-f 2987 3028 2989
-f 2989 3030 2991
-f 3030 3032 2991
-f 3032 3034 2991
-f 2991 3034 2993
-f 3034 3092 2993
-f 2993 3092 2995
-f 3092 3093 2995
-f 3003 3002 3038
-f 3002 3035 3038
-f 3040 3005 3038
-f 3003 3038 3005
-f 3042 3007 3040
-f 3005 3040 3007
-f 3009 3007 3044
-f 3007 3042 3044
-f 3009 3044 3011
-f 3044 3046 3011
-f 3011 3046 3013
-f 3046 3048 3013
-f 3015 3013 3050
-f 3013 3048 3050
-f 3017 3015 3052
-f 3015 3050 3052
-f 3052 3054 3017
-f 3017 3054 3019
-f 3021 3019 3056
-f 3019 3054 3056
-f 3056 3058 3021
-f 3021 3058 3023
-f 3058 3060 3023
-f 3023 3060 3025
-f 3027 3025 3062
-f 3025 3060 3062
-f 3027 3062 3029
-f 3062 3064 3029
-f 3029 3064 3031
-f 3064 3066 3031
-f 3066 3094 3031
-f 3031 3094 3033
-f 3095 2906 2926
-f 3096 3097 3098
-f 2811 2810 3089
-f 3036 3099 3037
-f 3099 3100 3037
-f 3101 3039 3100
-f 3037 3100 3039
-f 3039 3101 3041
-f 3101 3102 3041
-f 3043 3041 3103
-f 3041 3102 3103
-f 3103 3104 3043
-f 3043 3104 3045
-f 3105 3047 3104
-f 3045 3104 3047
-f 3106 3049 3105
-f 3047 3105 3049
-f 3107 3051 3106
-f 3049 3106 3051
-f 3051 3107 3053
-f 3107 3108 3053
-f 3053 3108 3055
-f 3108 3109 3055
-f 3057 3055 3110
-f 3055 3109 3110
-f 3059 3057 3111
-f 3057 3110 3111
-f 3061 3059 3112
-f 3059 3111 3112
-f 3112 3113 3061
-f 3061 3113 3063
-f 3113 3114 3063
-f 3063 3114 3065
-f 3099 3115 3100
-f 3115 3116 3100
-f 3100 3116 3101
-f 3116 3117 3101
-f 3102 3101 3118
-f 3101 3117 3118
-f 3119 3103 3118
-f 3102 3118 3103
-f 3103 3119 3104
-f 3119 3120 3104
-f 3104 3120 3105
-f 3120 3121 3105
-f 3122 3106 3121
-f 3105 3121 3106
-f 3106 3122 3107
-f 3122 3123 3107
-f 3108 3107 3124
-f 3107 3123 3124
-f 3124 3125 3108
-f 3108 3125 3109
-f 3109 3125 3110
-f 3125 3126 3110
-f 3111 3110 3127
-f 3110 3126 3127
-f 3128 3112 3127
-f 3111 3127 3112
-f 3113 3112 3129
-f 3112 3128 3129
-f 3114 3113 3130
-f 3113 3129 3130
-f 3114 3130 3132
-f 3130 3131 3132
-f 3065 3133 3066
-f 3094 3066 3133
-f 3065 3114 3134
-f 3114 3132 3134
-f 3065 3134 3135
-f 3065 3135 3133
-f 3137 3116 3136
-f 3115 3136 3116
-f 3116 3137 3117
-f 3137 3138 3117
-f 3139 3118 3138
-f 3117 3138 3118
-f 3118 3139 3119
-f 3139 3140 3119
-f 3141 3120 3140
-f 3119 3140 3120
-f 3142 3121 3141
-f 3120 3141 3121
-f 3121 3142 3122
-f 3142 3143 3122
-f 3122 3143 3123
-f 3143 3144 3123
-f 3144 3145 3123
-f 3123 3145 3124
-f 3125 3124 3146
-f 3124 3145 3146
-f 3147 3126 3146
-f 3125 3146 3126
-f 3147 3148 3126
-f 3126 3148 3127
-f 3149 3128 3148
-f 3127 3148 3128
-f 3150 3129 3149
-f 3128 3149 3129
-f 3129 3150 3130
-f 3150 3151 3130
-f 3131 3130 3152
-f 3130 3151 3152
-f 3154 3137 3153
-f 3136 3153 3137
-f 3155 3138 3154
-f 3137 3154 3138
-f 3138 3155 3139
-f 3155 3156 3139
-f 3140 3139 3157
-f 3139 3156 3157
-f 3141 3140 3158
-f 3140 3157 3158
-f 3158 3159 3141
-f 3141 3159 3142
-f 3159 3160 3142
-f 3142 3160 3143
-f 3144 3143 3161
-f 3143 3160 3161
-f 3145 3144 3162
-f 3144 3161 3162
-f 3163 3146 3162
-f 3145 3162 3146
-f 3146 3163 3147
-f 3163 3164 3147
-f 3148 3147 3165
-f 3147 3164 3165
-f 3165 3166 3148
-f 3148 3166 3149
-f 3166 3167 3149
-f 3149 3167 3150
-f 3167 3168 3150
-f 3150 3168 3151
-f 3153 3169 3154
-f 3169 3170 3154
-f 3170 3171 3154
-f 3154 3171 3155
-f 3156 3155 3172
-f 3155 3171 3172
-f 3157 3156 3173
-f 3156 3172 3173
-f 3157 3173 3158
-f 3173 3174 3158
-f 3159 3158 3175
-f 3158 3174 3175
-f 3160 3159 3176
-f 3159 3175 3176
-f 3176 3177 3160
-f 3160 3177 3161
-f 3177 3178 3161
-f 3161 3178 3162
-f 3162 3178 3163
-f 3178 3179 3163
-f 3163 3179 3164
-f 3179 3180 3164
-f 3180 3181 3164
-f 3164 3181 3165
-f 3166 3165 3182
-f 3165 3181 3182
-f 3182 3183 3166
-f 3166 3183 3167
-f 3168 3167 3184
-f 3167 3183 3184
-f 3186 3168 3185
-f 3168 3184 3185
-f 3190 3187 3189
-f 3187 3188 3189
-f 3191 3192 3189
-f 3190 3189 3192
-f 3193 3194 3191
-f 3192 3191 3194
-f 3195 3196 3193
-f 3194 3193 3196
-f 3196 3195 3198
-f 3195 3197 3198
-f 3198 3197 3200
-f 3197 3199 3200
-f 3199 3201 3200
-f 3200 3201 3202
-f 3204 3202 3203
-f 3202 3201 3203
-f 3203 3205 3204
-f 3204 3205 3206
-f 3206 3205 3208
-f 3205 3207 3208
-f 3209 3210 3207
-f 3208 3207 3210
-f 3210 3209 3212
-f 3209 3211 3212
-f 3212 3211 3214
-f 3211 3213 3214
-f 3214 3213 3216
-f 3213 3215 3216
-f 3188 3217 3189
-f 3217 3218 3189
-f 3189 3218 3191
-f 3218 3219 3191
-f 3191 3219 3193
-f 3219 3220 3193
-f 3221 3195 3220
-f 3193 3220 3195
-f 3222 3197 3221
-f 3195 3221 3197
-f 3199 3197 3223
-f 3197 3222 3223
-f 3201 3199 3224
-f 3199 3223 3224
-f 3224 3225 3201
-f 3201 3225 3203
-f 3225 3226 3203
-f 3203 3226 3205
-f 3205 3226 3207
-f 3226 3227 3207
-f 3207 3227 3209
-f 3227 3228 3209
-f 3209 3228 3211
-f 3228 3229 3211
-f 3213 3211 3230
-f 3211 3229 3230
-f 3230 3231 3213
-f 3213 3231 3215
-f 3217 3232 3218
-f 3232 3233 3218
-f 3219 3218 3234
-f 3218 3233 3234
-f 3220 3219 3235
-f 3219 3234 3235
-f 3221 3220 3236
-f 3220 3235 3236
-f 3221 3236 3222
-f 3236 3237 3222
-f 3222 3237 3223
-f 3237 3238 3223
-f 3224 3223 3239
-f 3223 3238 3239
-f 3239 3240 3224
-f 3224 3240 3225
-f 3240 3241 3225
-f 3225 3241 3226
-f 3226 3241 3227
-f 3241 3242 3227
-f 3242 3243 3227
-f 3227 3243 3228
-f 3183 3212 3184
-f 3212 3214 3184
-f 3183 3182 3212
-f 3210 3212 3182
-f 3182 3181 3210
-f 3208 3210 3181
-f 3208 3181 3206
-f 3206 3181 3180
-f 3180 3179 3206
-f 3204 3206 3179
-f 3202 3204 3178
-f 3204 3179 3178
-f 3200 3202 3177
-f 3202 3178 3177
-f 3177 3176 3200
-f 3198 3200 3176
-f 3175 3196 3176
-f 3196 3198 3176
-f 3174 3194 3175
-f 3194 3196 3175
-f 3173 3192 3174
-f 3192 3194 3174
-f 3192 3173 3190
-f 3190 3173 3172
-f 3244 3168 3186
-f 3151 3168 3152
-f 3245 3152 3168
-f 3244 3246 3168
-f 3246 3245 3168
-f 2748 2764 2750
-f 2750 2764 2760
-f 2935 2929 2951
-f 2929 2928 2951
-f 3185 3184 3247
-f 3248 3249 3215
-f 3216 3215 3249
-f 3184 3214 3247
-f 3214 3216 3247
-f 3251 3215 3250
-f 3215 3231 3250
-f 3215 3251 3248
-f 3254 3255 3253
-f 3252 3253 3255
-f 3254 3256 3255
-f 3260 3257 3259
-f 3257 3258 3259
-f 3263 3264 3262
-f 3261 3262 3264
-f 3265 3266 3268
-f 3266 3267 3268
-f 3269 3270 3265
-f 3270 3266 3265
-f 3271 3261 3264
-f 3272 3273 3271
-f 3274 3273 3272
-v -2.975439 -3.308754 1.253240
-v -2.845816 -3.273661 1.218321
-v -2.888628 -3.200302 1.210934
-v -3.042899 -3.193907 1.207296
-v -2.856957 -3.449728 1.356844
-v -2.736599 -3.394849 1.269577
-v -2.729567 -3.602976 1.377236
-v -2.631547 -3.559891 1.337380
-v -3.030627 -3.493327 1.322650
-v -2.981824 -3.608887 1.346959
-v -3.091252 -3.340925 1.235864
-v -3.135041 -3.243787 1.189436
-v -2.787341 -3.278502 1.138621
-v -2.699957 -3.390295 1.185593
-v -2.822497 -3.186549 1.120984
-v -2.770335 -3.208138 1.031045
-v -2.884711 -3.063896 0.993766
-v -2.909010 -3.084482 1.089147
-v -3.158524 -3.405872 1.197099
-v -3.184143 -3.298048 1.156892
-v -3.098730 -3.539123 1.252987
-v -3.031250 -3.095940 1.106355
-f 3278 3275 3277
-f 3275 3276 3277
-f 3275 3279 3276
-f 3279 3280 3276
-f 3280 3279 3282
-f 3281 3282 3279
-f 3284 3281 3283
-f 3279 3283 3281
-f 3279 3275 3283
-f 3275 3285 3283
-f 3275 3278 3285
-f 3278 3286 3285
-f 3276 3280 3287
-f 3287 3280 3288
-f 3277 3276 3289
-f 3289 3276 3287
-f 3290 3291 3289
-f 3291 3292 3289
-f 3285 3286 3293
-f 3293 3286 3294
-f 3285 3293 3283
-f 3283 3293 3295
-f 3295 3284 3283
-f 3277 3289 3296
-v -2.909010 -3.084482 1.089147
-v -2.884711 -3.063896 0.993766
-v -2.946527 -2.939327 0.986343
-v -2.986345 -2.933770 1.087679
-v -3.141072 -2.785287 1.032318
-v -3.196508 -2.788166 1.045431
-v -3.177108 -2.979305 1.139084
-v -3.107105 -2.947818 1.092235
-v -3.261810 -2.821069 1.088218
-v -3.223286 -3.001780 1.126176
-v -3.330406 -3.185190 0.950058
-v -3.316551 -3.168932 1.121229
-v -3.301857 -3.074776 1.114869
-v -3.333954 -3.058673 0.974748
-v -3.223246 -3.225388 0.976573
-v -3.217306 -3.187686 1.075214
-f 3300 3297 3299
-f 3297 3298 3299
-f 3303 3304 3302
-f 3301 3302 3304
-f 3302 3305 3303
-f 3303 3305 3306
-f 3308 3309 3307
-f 3307 3309 3310
-f 3308 3307 3312
-f 3311 3312 3307
-v -3.194170 -3.348553 1.007196
-v -3.184143 -3.298048 1.156892
-v -3.217306 -3.187686 1.075214
-v -3.223246 -3.225388 0.976573
-v -2.922908 -3.637036 1.059206
-v -2.981824 -3.608887 1.346959
-v -3.098730 -3.539123 1.252987
-v -3.082741 -3.598298 1.054556
-v -3.186750 -3.457336 1.025606
-v -3.158524 -3.405872 1.197099
-f 3314 3315 3313
-f 3313 3315 3316
-f 3317 3318 3320
-f 3318 3319 3320
-f 3321 3322 3313
-f 3322 3314 3313
-f 3320 3319 3321
-f 3319 3322 3321
-v -3.119570 -3.183977 0.870739
-v -3.223246 -3.225388 0.976573
-v -3.330406 -3.185190 0.950058
-v -3.294389 -3.166225 0.842823
-f 3323 3324 3326
-f 3324 3325 3326
-v -3.223246 -3.225388 0.976573
-v -3.119570 -3.183977 0.870739
-v -3.087335 -3.350463 0.831656
-v -3.194170 -3.348553 1.007196
-v -3.074557 -3.486847 0.843432
-v -3.186750 -3.457336 1.025606
-v -3.006867 -3.575464 0.830221
-v -3.082741 -3.598298 1.054556
-v -2.870422 -3.601724 0.843123
-v -2.922908 -3.637036 1.059206
-v -2.740824 -3.597601 0.875006
-v -2.791754 -3.635993 1.078555
-f 3329 3330 3328
-f 3327 3328 3330
-f 3329 3331 3330
-f 3331 3332 3330
-f 3332 3331 3334
-f 3333 3334 3331
-f 3334 3333 3336
-f 3335 3336 3333
-f 3336 3335 3338
-f 3337 3338 3335
-v -3.256731 -3.032131 0.849693
-v -3.294389 -3.166225 0.842823
-v -3.330406 -3.185190 0.950058
-v -3.333954 -3.058673 0.974748
-v -3.339637 -2.846837 0.966368
-v -3.300372 -2.795728 0.878984
-v -3.107105 -2.947818 1.092235
-v -3.031250 -3.095940 1.106355
-v -2.909010 -3.084482 1.089147
-v -2.986345 -2.933770 1.087679
-f 3339 3340 3342
-f 3340 3341 3342
-f 3344 3339 3343
-f 3342 3343 3339
-f 3345 3346 3348
-f 3346 3347 3348
-v -3.042899 -3.193907 1.207296
-v -2.888628 -3.200302 1.210934
-v -3.031250 -3.095940 1.106355
-v -3.121673 -3.120319 1.136456
-f 3350 3351 3349
-f 3349 3351 3352
-v -3.107105 -2.947818 1.092235
-v -3.177108 -2.979305 1.139084
-v -3.121673 -3.120319 1.136456
-v -3.031250 -3.095940 1.106355
-v -3.223286 -3.001780 1.126176
-v -3.169546 -3.135273 1.128247
-f 3356 3353 3355
-f 3353 3354 3355
-f 3354 3357 3355
-f 3357 3358 3355
-v -3.135041 -3.243787 1.189436
-v -3.042899 -3.193907 1.207296
-v -3.121673 -3.120319 1.136456
-v -3.169546 -3.135273 1.128247
-v -3.184143 -3.298048 1.156892
-v -3.217306 -3.187686 1.075214
-f 3360 3361 3359
-f 3359 3361 3362
-f 3363 3359 3364
-f 3359 3362 3364
-v -3.217306 -3.187686 1.075214
-v -3.169546 -3.135273 1.128247
-v -3.227676 -3.141660 1.103969
-v -3.223286 -3.001780 1.126176
-v -3.301857 -3.074776 1.114869
-v -3.302419 -3.017921 1.128514
-v -3.333954 -3.058673 0.974748
-v -3.320330 -2.827513 1.063914
-v -3.339637 -2.846837 0.966368
-f 3365 3366 3367
-f 3368 3369 3366
-f 3367 3366 3369
-f 3370 3371 3369
-f 3370 3372 3371
-f 3371 3372 3373
-v -2.803260 -3.213580 0.942403
-v -2.928681 -3.072892 0.924772
-v -2.884711 -3.063896 0.993766
-v -2.770335 -3.208138 1.031045
-f 3375 3376 3374
-f 3374 3376 3377
-v -2.928681 -3.072892 0.924772
-v -3.008412 -2.899760 0.904635
-v -2.946527 -2.939327 0.986343
-v -2.884711 -3.063896 0.993766
-f 3379 3380 3378
-f 3378 3380 3381
-v -2.787341 -3.278502 1.138621
-v -2.749355 -3.272099 1.034148
-v -2.770335 -3.208138 1.031045
-v -2.822497 -3.186549 1.120984
-v -2.631547 -3.559891 1.337380
-v -2.583580 -3.514267 1.278598
-v -2.699957 -3.390295 1.185593
-v -2.736599 -3.394849 1.269577
-v -2.524720 -3.561609 1.161535
-v -2.649491 -3.404362 1.100352
-v -2.593513 -3.536154 0.942450
-v -2.668957 -3.397513 0.943626
-v -2.749867 -3.295148 0.966073
-v -2.803260 -3.213580 0.942403
-f 3385 3382 3384
-f 3382 3383 3384
-f 3386 3387 3389
-f 3387 3388 3389
-f 3390 3391 3387
-f 3391 3388 3387
-f 3383 3382 3391
-f 3382 3388 3391
-f 3392 3393 3390
-f 3393 3391 3390
-f 3393 3394 3391
-f 3394 3383 3391
-f 3395 3384 3394
-f 3384 3383 3394
-v -3.166971 -3.002766 0.812106
-v -3.119570 -3.183977 0.870739
-v -3.294389 -3.166225 0.842823
-v -3.256731 -3.032131 0.849693
-v -3.069810 -2.928755 0.845236
-v -3.011987 -3.092000 0.860973
-v -3.008412 -2.899760 0.904635
-v -2.928681 -3.072892 0.924772
-v -3.184812 -2.768053 0.850127
-v -3.137383 -2.776449 0.844117
-v -3.040038 -2.780893 0.914614
-f 3396 3397 3398
-f 3399 3396 3398
-f 3397 3396 3401
-f 3396 3400 3401
-f 3402 3403 3400
-f 3400 3403 3401
-f 3404 3405 3396
-f 3405 3400 3396
-f 3405 3406 3400
-f 3406 3402 3400
-v -3.011987 -3.092000 0.860973
-v -2.944625 -3.282121 0.817054
-v -3.087335 -3.350463 0.831656
-v -3.119570 -3.183977 0.870739
-v -2.928681 -3.072892 0.924772
-v -2.803260 -3.213580 0.942403
-v -2.890885 -3.415616 0.819125
-v -3.074557 -3.486847 0.843432
-v -2.749867 -3.295148 0.966073
-f 3407 3408 3410
-f 3408 3409 3410
-f 3412 3408 3411
-f 3411 3408 3407
-f 3413 3414 3408
-f 3408 3414 3409
-f 3415 3413 3412
-f 3412 3413 3408
-v -3.300372 -2.795728 0.878984
-v -3.184812 -2.768053 0.850127
-v -3.166971 -3.002766 0.812106
-v -3.256731 -3.032131 0.849693
-f 3417 3418 3416
-f 3416 3418 3419
-v -3.006867 -3.575464 0.830221
-v -3.074557 -3.486847 0.843432
-v -2.890885 -3.415616 0.819125
-v -2.870422 -3.601724 0.843123
-v -2.668957 -3.397513 0.943626
-v -2.749867 -3.295148 0.966073
-v -2.740824 -3.597601 0.875006
-v -2.593513 -3.536154 0.942450
-v -2.791754 -3.635993 1.078555
-v -2.524720 -3.561609 1.161535
-v -2.729567 -3.602976 1.377236
-v -2.981824 -3.608887 1.346959
-v -2.922908 -3.637036 1.059206
-v -2.822497 -3.186549 1.120984
-v -2.909010 -3.084482 1.089147
-v -3.031250 -3.095940 1.106355
-v -2.583580 -3.514267 1.278598
-v -2.631547 -3.559891 1.337380
-f 3420 3421 3422
-f 3420 3422 3423
-f 3424 3422 3425
-f 3422 3426 3423
-f 3426 3422 3427
-f 3422 3424 3427
-f 3429 3428 3427
-f 3428 3426 3427
-f 3431 3432 3430
-f 3428 3430 3432
-f 3433 3434 3435
-f 3430 3428 3437
-f 3437 3428 3436
-f 3429 3436 3428
-v -3.008412 -2.899760 0.904635
-v -3.040038 -2.780893 0.914614
-v -3.016419 -2.765091 0.966671
-v -2.946527 -2.939327 0.986343
-v -3.078699 -2.553982 1.046834
-v -3.162498 -2.556375 1.058409
-v -3.141072 -2.785287 1.032318
-v -3.053267 -2.764905 1.043008
-v -3.347304 -2.573628 0.955211
-v -3.372066 -2.569159 0.904785
-v -3.339637 -2.846837 0.966368
-v -3.320330 -2.827513 1.063914
-v -3.251541 -2.564050 1.023627
-v -3.261810 -2.821069 1.088218
-v -3.196508 -2.788166 1.045431
-v -3.022819 -2.522240 0.979148
-v -3.300372 -2.795728 0.878984
-v -3.297886 -2.549020 0.861657
-v -3.184812 -2.768053 0.850127
-v -3.240554 -2.555467 0.856262
-v -3.137383 -2.776449 0.844117
-v -3.132772 -2.528669 0.848639
-v -3.046610 -2.510881 0.900772
-v -3.335942 -1.365685 0.724590
-v -3.319817 -1.365015 0.886015
-v -3.277510 -1.177346 0.915300
-v -3.279790 -1.162072 0.784602
-v -3.238094 -0.979377 0.961631
-v -3.233333 -0.683782 1.015512
-v -3.283698 -0.730967 0.793898
-v -3.251210 -0.948205 0.819868
-v -3.406618 -0.343461 0.746456
-v -3.415655 -0.308965 0.671045
-v -3.631292 0.701013 0.420276
-v -3.664355 0.932851 0.370749
-v -3.578170 0.837714 0.288502
-v -3.556552 0.704883 0.280630
-v -3.570384 0.385564 0.524480
-v -3.536654 0.442277 0.322000
-v -3.520188 0.140164 0.618561
-v -3.516840 0.149002 0.430359
-v -3.458251 -0.125950 0.731712
-v -3.470778 -0.078218 0.546398
-v -3.599077 0.796217 0.000000
-v -3.623861 0.911561 0.000000
-v -3.709741 1.351194 0.211745
-v -3.709827 1.417763 0.000000
-v -3.601668 1.293049 0.000000
-v -3.701634 1.272650 0.270469
-v -3.695872 1.156978 0.316829
-v -3.608593 1.163581 0.000000
-v -3.672431 1.044224 0.364991
-v -3.622326 1.005378 0.000000
-f 3441 3438 3440
-f 3438 3439 3440
-f 3443 3444 3442
-f 3442 3444 3445
-f 3447 3448 3446
-f 3446 3448 3449
-f 3446 3449 3450
-f 3450 3449 3451
-f 3450 3451 3443
-f 3443 3451 3452
-f 3443 3452 3444
-f 3440 3453 3445
-f 3445 3453 3442
-f 3448 3447 3454
-f 3454 3447 3455
-f 3454 3455 3456
-f 3456 3455 3457
-f 3458 3456 3459
-f 3456 3457 3459
-f 3439 3458 3460
-f 3458 3459 3460
-f 3439 3460 3440
-f 3440 3460 3453
-f 3462 3463 3461
-f 3461 3463 3464
-f 3466 3467 3465
-f 3465 3467 3468
-f 3464 3463 3468
-f 3463 3465 3468
-f 3467 3469 3470
-f 3472 3473 3471
-f 3471 3473 3474
-f 3475 3471 3476
-f 3471 3474 3476
-f 3478 3477 3476
-f 3477 3475 3476
-f 3477 3478 3479
-f 3479 3478 3480
-f 3480 3470 3479
-f 3469 3479 3470
-f 3472 3482 3473
-f 3481 3473 3482
-f 3483 3484 3485
-f 3486 3483 3485
-f 3487 3486 3488
-f 3486 3485 3488
-f 3489 3487 3490
-f 3487 3488 3490
-f 3489 3490 3472
-f 3472 3490 3482
-v -3.676450 -0.551317 0.077574
-v -3.740631 -0.558176 0.085478
-v -3.729470 -0.869371 0.096946
-v -3.699784 -0.759901 0.088664
-v -3.697889 -0.951955 0.098793
-v -3.733767 -1.141917 0.111139
-v -3.666536 -1.140372 0.078261
-v -3.743747 -1.367219 0.100951
-v -3.639696 -1.242349 0.057190
-v -3.823638 -1.557534 0.081533
-v -3.581963 -1.413947 -0.104371
-v -3.683069 -1.591975 -0.115233
-v -3.890388 -1.750102 0.017612
-v -3.828485 -1.786559 -0.114095
-v -3.778908 -0.541975 0.064258
-v -3.805841 -0.798961 0.099237
-v -3.843256 -0.981402 0.116282
-v -3.884588 -1.261469 0.148322
-v -3.914006 -1.486854 0.149147
-v -4.015306 -1.659952 0.130331
-v -4.107191 -1.836520 0.120149
-v -3.818598 -0.522690 0.055572
-v -3.900964 -0.780883 0.091579
-v -3.949814 -0.963797 0.140806
-v -3.974499 -1.169600 0.164243
-v -4.018866 -1.413191 0.154149
-v -4.154334 -1.677827 0.165852
-v -4.207566 -1.922824 0.155104
-v -3.896204 -0.629183 0.077883
-v -3.978115 -0.823440 0.099280
-v -4.029726 -1.043238 0.136305
-v -4.129295 -1.228786 0.120745
-v -4.184154 -1.598080 0.151191
-v -4.297769 -1.889903 0.177707
-v -3.932489 -0.556566 0.037354
-v -4.070739 -0.947648 0.110554
-v -4.227645 -1.227895 0.069894
-v -4.229164 -1.473093 0.111560
-v -4.309744 -1.743848 0.150329
-v -4.405365 -1.921443 0.192978
-v -3.975337 -0.554961 -0.014407
-v -4.112449 -0.875765 0.016326
-v -4.233834 -1.166542 0.022074
-v -4.333831 -1.548255 0.056938
-v -4.424122 -1.831742 0.130839
-v -4.445835 -2.015127 0.189702
-v -3.921874 -0.538502 -0.145307
-v -4.042715 -0.876710 -0.168968
-v -4.216296 -1.160854 -0.104034
-v -4.252683 -1.437854 -0.145620
-v -4.331331 -1.692590 -0.043593
-v -4.387148 -1.967814 0.045602
-v -3.910546 -0.601719 -0.163159
-v -3.988138 -0.962789 -0.223649
-v -4.111927 -1.333141 -0.267160
-v -4.201904 -1.668554 -0.214859
-v -4.273069 -1.798884 -0.099878
-v -4.351543 -1.947675 0.025020
-v -3.873622 -0.759035 -0.197169
-v -3.917882 -1.082831 -0.289171
-v -4.001496 -1.375703 -0.285641
-v -4.073086 -1.649491 -0.238382
-v -4.175757 -1.808223 -0.140659
-v -4.321269 -1.963488 0.025072
-v -3.742608 -0.729374 -0.149361
-v -3.777709 -1.051411 -0.240495
-v -3.820370 -1.239135 -0.269807
-v -4.000019 -1.567512 -0.275350
-v -3.977657 -1.750845 -0.184909
-v -4.075028 -1.904403 -0.041324
-v -4.192486 -1.953852 0.017313
-f 3491 3492 3493
-f 3491 3493 3494
-f 3494 3493 3495
-f 3495 3493 3496
-f 3495 3496 3497
-f 3497 3496 3498
-f 3497 3498 3499
-f 3499 3498 3500
-f 3499 3500 3501
-f 3501 3500 3502
-f 3502 3500 3503
-f 3502 3503 3504
-f 3492 3505 3493
-f 3505 3506 3493
-f 3493 3506 3496
-f 3506 3507 3496
-f 3507 3508 3496
-f 3496 3508 3498
-f 3508 3509 3498
-f 3498 3509 3500
-f 3509 3510 3500
-f 3500 3510 3503
-f 3510 3511 3503
-f 3505 3512 3513
-f 3505 3513 3506
-f 3506 3513 3514
-f 3506 3514 3507
-f 3507 3514 3515
-f 3507 3515 3508
-f 3508 3515 3516
-f 3508 3516 3509
-f 3509 3516 3517
-f 3509 3517 3510
-f 3510 3517 3518
-f 3510 3518 3511
-f 3512 3519 3520
-f 3512 3520 3513
-f 3513 3520 3521
-f 3513 3521 3514
-f 3514 3521 3515
-f 3515 3521 3522
-f 3515 3522 3516
-f 3516 3522 3523
-f 3516 3523 3517
-f 3517 3523 3524
-f 3517 3524 3518
-f 3519 3525 3526
-f 3519 3526 3520
-f 3520 3526 3527
-f 3520 3527 3521
-f 3521 3527 3528
-f 3521 3528 3522
-f 3522 3528 3529
-f 3522 3529 3523
-f 3523 3529 3530
-f 3523 3530 3524
-f 3525 3531 3532
-f 3525 3532 3526
-f 3526 3532 3533
-f 3526 3533 3527
-f 3527 3533 3534
-f 3527 3534 3528
-f 3528 3534 3535
-f 3528 3535 3529
-f 3529 3535 3536
-f 3529 3536 3530
-f 3531 3537 3538
-f 3531 3538 3532
-f 3532 3538 3539
-f 3532 3539 3533
-f 3533 3539 3540
-f 3533 3540 3534
-f 3534 3540 3541
-f 3534 3541 3535
-f 3535 3541 3542
-f 3535 3542 3536
-f 3537 3543 3544
-f 3537 3544 3538
-f 3538 3544 3545
-f 3538 3545 3539
-f 3539 3545 3546
-f 3539 3546 3540
-f 3540 3546 3547
-f 3540 3547 3541
-f 3541 3547 3548
-f 3541 3548 3542
-f 3543 3549 3550
-f 3543 3550 3544
-f 3544 3550 3551
-f 3544 3551 3545
-f 3545 3551 3552
-f 3545 3552 3546
-f 3546 3552 3553
-f 3546 3553 3547
-f 3547 3553 3554
-f 3547 3554 3548
-f 3549 3555 3550
-f 3555 3556 3550
-f 3550 3556 3551
-f 3556 3557 3551
-f 3557 3558 3551
-f 3551 3558 3552
-f 3558 3559 3552
-f 3552 3559 3553
-f 3559 3560 3553
-f 3553 3560 3554
-f 3560 3561 3554
-v -3.860740 -0.188349 -0.024962
-v -3.845990 -0.188820 0.019164
-v -3.817430 0.150343 0.048629
-v -3.828633 0.149083 0.000000
-v -3.844470 0.498176 0.053132
-v -3.856649 0.496801 0.000000
-v -3.887340 1.003866 0.057635
-v -3.900566 1.002504 0.000000
-v -3.860820 1.479723 0.062137
-v -3.875140 1.480358 0.000000
-v -3.698925 1.787941 0.066640
-v -3.712832 1.794492 0.000000
-v -3.469715 1.961504 0.071141
-v -3.478430 1.975409 0.000000
-v -3.238225 2.005405 0.075645
-v -3.242148 2.021387 0.000000
-v -3.805688 -0.190106 0.051472
-v -3.786822 0.153783 0.084233
-v -3.811194 0.501935 0.092033
-v -3.851206 1.007586 0.099831
-v -3.821694 1.477989 0.107631
-v -3.660928 1.770041 0.115431
-v -3.445903 1.923509 0.123229
-v -3.227504 1.961738 0.131029
-v -3.750630 -0.191863 0.063305
-v -3.745007 0.158482 0.097274
-v -3.765736 0.507070 0.106281
-v -3.801840 1.012668 0.115288
-v -3.768245 1.475619 0.124295
-v -3.609021 1.745588 0.133304
-v -3.413372 1.871604 0.142309
-v -3.695565 -0.193620 0.051497
-v -3.703185 0.163182 0.084262
-v -3.720269 0.512205 0.092064
-v -3.752468 1.017751 0.099865
-v -3.714787 1.473248 0.107668
-v -3.557104 1.721130 0.115470
-v -3.380836 1.819691 0.123273
-v -3.655240 -0.194907 0.019209
-v -3.672559 0.166625 0.048678
-v -3.686972 0.515966 0.053185
-v -3.716312 1.021474 0.057693
-v -3.675638 1.471512 0.062201
-v -3.519086 1.703220 0.066709
-v -3.357009 1.781675 0.071216
-v -3.640457 -0.195379 -0.024909
-v -3.661331 0.167886 0.000058
-v -3.674766 0.517345 -0.000063
-v -3.703058 1.022838 -0.000069
-v -3.661286 1.470876 -0.000074
-v -3.507689 1.700214 0.000000
-v -3.348274 1.767738 -0.000085
-v -3.655175 -0.194909 -0.069044
-v -3.672510 0.166630 -0.048579
-v -3.686972 0.515966 -0.053185
-v -3.695452 -0.193624 -0.101369
-v -3.703099 0.163192 -0.084205
-v -3.720269 0.512205 -0.092064
-v -3.750500 -0.191867 -0.113230
-v -3.744907 0.158493 -0.097274
-v -3.765736 0.507070 -0.106281
-v -3.805575 -0.190109 -0.101447
-v -3.786736 0.153792 -0.084291
-v -3.811194 0.501935 -0.092033
-v -3.845923 -0.188822 -0.069180
-v -3.817381 0.150348 -0.048728
-v -3.844470 0.498176 -0.053132
-f 3564 3565 3563
-f 3562 3563 3565
-f 3564 3566 3565
-f 3565 3566 3567
-f 3567 3566 3569
-f 3566 3568 3569
-f 3569 3568 3571
-f 3568 3570 3571
-f 3573 3571 3572
-f 3571 3570 3572
-f 3573 3572 3575
-f 3572 3574 3575
-f 3575 3574 3577
-f 3574 3576 3577
-f 3578 3579 3563
-f 3563 3579 3564
-f 3579 3580 3564
-f 3564 3580 3566
-f 3566 3580 3568
-f 3580 3581 3568
-f 3568 3581 3570
-f 3581 3582 3570
-f 3570 3582 3572
-f 3582 3583 3572
-f 3572 3583 3574
-f 3583 3584 3574
-f 3576 3574 3585
-f 3574 3584 3585
-f 3586 3587 3578
-f 3578 3587 3579
-f 3587 3588 3579
-f 3579 3588 3580
-f 3580 3588 3581
-f 3588 3589 3581
-f 3581 3589 3582
-f 3589 3590 3582
-f 3583 3582 3591
-f 3582 3590 3591
-f 3584 3583 3592
-f 3583 3591 3592
-f 3584 3592 3585
-f 3594 3587 3593
-f 3586 3593 3587
-f 3587 3594 3588
-f 3594 3595 3588
-f 3588 3595 3589
-f 3595 3596 3589
-f 3589 3596 3590
-f 3596 3597 3590
-f 3590 3597 3591
-f 3597 3598 3591
-f 3592 3591 3599
-f 3591 3598 3599
-f 3601 3594 3600
-f 3593 3600 3594
-f 3602 3595 3601
-f 3594 3601 3595
-f 3595 3602 3596
-f 3602 3603 3596
-f 3596 3603 3597
-f 3603 3604 3597
-f 3597 3604 3598
-f 3604 3605 3598
-f 3598 3605 3599
-f 3605 3606 3599
-f 3607 3608 3600
-f 3600 3608 3601
-f 3601 3608 3602
-f 3608 3609 3602
-f 3602 3609 3603
-f 3609 3610 3603
-f 3603 3610 3604
-f 3610 3611 3604
-f 3604 3611 3605
-f 3611 3612 3605
-f 3606 3605 3613
-f 3605 3612 3613
-f 3608 3607 3615
-f 3607 3614 3615
-f 3615 3616 3608
-f 3608 3616 3609
-f 3615 3614 3618
-f 3614 3617 3618
-f 3616 3615 3619
-f 3615 3618 3619
-f 3618 3617 3621
-f 3617 3620 3621
-f 3621 3622 3618
-f 3618 3622 3619
-f 3620 3623 3621
-f 3623 3624 3621
-f 3621 3624 3622
-f 3624 3625 3622
-f 3623 3626 3624
-f 3626 3627 3624
-f 3624 3627 3625
-f 3627 3628 3625
-f 3626 3562 3627
-f 3562 3565 3627
-f 3627 3565 3628
-f 3565 3567 3628
-v -3.655240 -0.194907 0.019209
-v -3.695565 -0.193620 0.051497
-v -3.740631 -0.558176 0.085478
-v -3.676450 -0.551317 0.077574
-v -3.805688 -0.190106 0.051472
-v -3.975337 -0.554961 -0.014407
-v -3.932489 -0.556566 0.037354
-v -3.896204 -0.629183 0.077883
-v -3.818598 -0.522690 0.055572
-v -3.750630 -0.191863 0.063305
-v -3.778908 -0.541975 0.064258
-v -3.845990 -0.188820 0.019164
-v -3.860740 -0.188349 -0.024962
-v -3.695452 -0.193624 -0.101369
-v -3.742608 -0.729374 -0.149361
-v -3.873622 -0.759035 -0.197169
-v -3.750500 -0.191867 -0.113230
-v -3.805575 -0.190109 -0.101447
-v -3.910546 -0.601719 -0.163159
-v -3.921874 -0.538502 -0.145307
-v -3.845923 -0.188822 -0.069180
-v -3.655175 -0.194909 -0.069044
-v -3.640457 -0.195379 -0.024909
-v -3.569386 -0.761644 -0.035893
-v -3.697889 -0.951955 0.098793
-v -3.666536 -1.140372 0.078261
-v -3.820370 -1.239135 -0.269807
-v -3.777709 -1.051411 -0.240495
-v -3.581963 -1.413947 -0.104371
-v -3.639696 -1.242349 0.057190
-v -3.977657 -1.750845 -0.184909
-v -3.890388 -1.750102 0.017612
-v -4.075028 -1.904403 -0.041324
-v -4.000019 -1.567512 -0.275350
-v -3.683069 -1.591975 -0.115233
-v -3.828485 -1.786559 -0.114095
-v -4.107191 -1.836520 0.120149
-v -4.207566 -1.922824 0.155104
-v -4.405365 -1.921443 0.192978
-v -4.387148 -1.967814 0.045602
-v -4.297769 -1.889903 0.177707
-v -4.192486 -1.953852 0.017313
-v -4.321269 -1.963488 0.025072
-v -4.351543 -1.947675 0.025020
-v -4.445835 -2.015127 0.189702
-f 3631 3632 3630
-f 3629 3630 3632
-f 3633 3634 3635
-f 3633 3635 3636
-f 3633 3636 3637
-f 3638 3633 3637
-f 3638 3637 3639
-f 3630 3639 3631
-f 3640 3641 3634
-f 3642 3643 3644
-f 3645 3642 3644
-f 3646 3645 3644
-f 3646 3644 3647
-f 3646 3647 3648
-f 3649 3646 3648
-f 3641 3648 3634
-f 3643 3650 3651
-f 3643 3642 3650
-f 3629 3632 3652
-f 3652 3643 3651
-f 3632 3653 3654
-f 3655 3656 3657
-f 3652 3632 3654
-f 3652 3654 3658
-f 3652 3658 3657
-f 3643 3652 3657
-f 3656 3643 3657
-f 3659 3660 3661
-f 3659 3662 3655
-f 3655 3657 3663
-f 3655 3663 3664
-f 3655 3664 3660
-f 3659 3655 3660
-f 3660 3665 3661
-f 3665 3666 3661
-f 3667 3668 3669
-f 3670 3661 3666
-f 3670 3666 3669
-f 3671 3670 3669
-f 3672 3671 3669
-f 3668 3672 3669
-f 3667 3673 3668
-f 3630 3638 3639
-f 3633 3640 3634
-f 3641 3649 3648
-f 3652 3651 3629
-v -3.413372 1.871604 0.142309
-v -3.077669 1.871112 0.217368
-v -3.227504 1.961738 0.131029
-v -3.053102 1.968810 0.051104
-v -3.037562 2.001526 0.000000
-v -3.242148 2.021387 0.000000
-v -3.238225 2.005405 0.075645
-v -3.358510 1.810253 0.380095
-v -3.075310 1.846000 0.363149
-f 3674 3675 3676
-f 3679 3680 3678
-f 3677 3678 3680
-f 3677 3680 3676
-f 3675 3677 3676
-f 3674 3681 3675
-f 3681 3682 3675
-v -1.936032 -1.829617 0.488916
-v -1.971059 -1.992958 0.500845
-v -1.933565 -1.993029 0.438902
-v -1.883160 -1.829718 0.401567
-v -2.027242 -1.813012 0.555232
-v -2.035740 -1.981182 0.547873
-v -2.126375 -1.866497 0.502895
-v -2.106039 -2.019111 0.510759
-v -2.176551 -1.873816 0.445782
-v -2.141621 -2.024301 0.470257
-v -2.147113 -1.903198 0.362462
-v -2.120746 -2.045137 0.411171
-v -2.062725 -1.884246 0.307336
-v -2.060902 -2.031698 0.372079
-v -1.946306 -1.872735 0.344251
-v -1.978344 -2.023535 0.398257
-v -2.466779 -1.857679 0.570461
-v -2.513608 -2.012858 0.558673
-v -2.499138 -2.038090 0.504529
-v -2.446375 -1.893261 0.494110
-v -2.547737 -1.833025 0.609321
-v -2.571019 -1.995375 0.586230
-v -2.647220 -1.844010 0.594347
-v -2.641567 -2.003164 0.575611
-v -2.699966 -1.850397 0.570070
-v -2.678971 -2.007694 0.558395
-v -2.709403 -1.879947 0.508775
-v -2.685663 -2.028649 0.514928
-v -2.684452 -1.891207 0.447388
-v -2.667969 -2.036634 0.471396
-v -2.614084 -1.905005 0.404925
-v -2.618068 -2.046419 0.441284
-v -2.503818 -1.909806 0.431456
-v -2.539874 -2.049824 0.460098
-v -1.985123 -2.116661 0.394256
-v -2.065655 -2.124623 0.368720
-v -2.124030 -2.137733 0.406853
-v -2.144393 -2.117408 0.464489
-v -2.109684 -2.112345 0.503997
-v -2.041110 -2.075348 0.540201
-v -1.978016 -2.086834 0.494327
-v -1.941442 -2.086904 0.433904
-v -2.513187 -2.130859 0.497920
-v -2.552923 -2.142304 0.454579
-v -2.629199 -2.138983 0.436227
-v -2.677875 -2.129439 0.465600
-v -2.695135 -2.121650 0.508064
-v -2.688607 -2.101208 0.550465
-v -2.652120 -2.096790 0.567258
-v -2.583303 -2.089191 0.577616
-v -2.527301 -2.106246 0.550735
-v -2.048681 -2.165282 0.450843
-v -2.603284 -2.176802 0.510638
-f 3686 3683 3685
-f 3683 3684 3685
-f 3687 3688 3683
-f 3688 3684 3683
-f 3687 3689 3688
-f 3689 3690 3688
-f 3691 3692 3689
-f 3692 3690 3689
-f 3691 3693 3692
-f 3693 3694 3692
-f 3695 3696 3693
-f 3696 3694 3693
-f 3695 3697 3696
-f 3697 3698 3696
-f 3686 3685 3697
-f 3685 3698 3697
-f 3702 3699 3701
-f 3699 3700 3701
-f 3703 3704 3699
-f 3704 3700 3699
-f 3703 3705 3704
-f 3705 3706 3704
-f 3707 3708 3705
-f 3708 3706 3705
-f 3707 3709 3708
-f 3709 3710 3708
-f 3709 3711 3710
-f 3711 3712 3710
-f 3711 3713 3712
-f 3713 3714 3712
-f 3715 3716 3713
-f 3716 3714 3713
-f 3702 3701 3715
-f 3701 3716 3715
-f 3698 3717 3696
-f 3717 3718 3696
-f 3696 3718 3694
-f 3718 3719 3694
-f 3719 3720 3694
-f 3694 3720 3692
-f 3720 3721 3692
-f 3692 3721 3690
-f 3688 3690 3722
-f 3690 3721 3722
-f 3722 3723 3688
-f 3688 3723 3684
-f 3684 3723 3685
-f 3723 3724 3685
-f 3685 3724 3698
-f 3724 3717 3698
-f 3701 3725 3716
-f 3725 3726 3716
-f 3716 3726 3714
-f 3726 3727 3714
-f 3712 3714 3728
-f 3714 3727 3728
-f 3710 3712 3729
-f 3712 3728 3729
-f 3729 3730 3710
-f 3710 3730 3708
-f 3730 3731 3708
-f 3708 3731 3706
-f 3706 3731 3704
-f 3731 3732 3704
-f 3732 3733 3704
-f 3704 3733 3700
-f 3700 3733 3701
-f 3733 3725 3701
-f 3734 3724 3723
-f 3734 3723 3722
-f 3734 3722 3721
-f 3734 3721 3720
-f 3734 3720 3719
-f 3734 3719 3718
-f 3734 3718 3717
-f 3734 3717 3724
-f 3735 3725 3733
-f 3735 3733 3732
-f 3735 3732 3731
-f 3735 3731 3730
-f 3735 3730 3729
-f 3735 3729 3728
-f 3735 3728 3727
-f 3735 3727 3726
-f 3735 3726 3725
-v 4.925499 1.917814 0.613413
-v 4.953403 1.907939 0.605609
-v 4.971872 1.924079 0.586026
-v 4.953739 1.952580 0.592256
-v 4.925394 1.955229 0.618837
-v 4.897808 1.946794 0.628057
-v 5.001903 1.914398 0.486724
-v 4.973133 1.992779 0.533466
-v 4.982364 1.873300 0.536190
-v 4.926194 1.859813 0.582137
-v 4.852578 1.889721 0.605031
-v 4.824747 1.946835 0.626358
-v 4.861611 2.001639 0.621913
-v 4.935561 2.016016 0.585700
-f 3741 3736 3740
-f 3740 3736 3739
-f 3736 3737 3739
-f 3737 3738 3739
-f 3739 3738 3743
-f 3738 3742 3743
-f 3742 3738 3744
-f 3737 3744 3738
-f 3745 3744 3737
-f 3746 3745 3736
-f 3745 3737 3736
-f 3747 3746 3741
-f 3746 3736 3741
-f 3748 3747 3741
-f 3743 3749 3739
-f 3740 3739 3749
-v 4.861618 1.854067 0.618095
-v 4.852578 1.889721 0.605031
-v 4.824747 1.946835 0.626358
-v 4.760921 1.881357 0.613120
-v 4.935561 2.016016 0.585700
-v 4.935880 2.051665 0.572853
-v 4.842883 2.021333 0.638025
-v 4.861611 2.001639 0.621913
-v 4.973133 1.992779 0.533466
-v 5.001903 1.914398 0.486724
-v 4.991746 2.009819 0.523206
-v 4.944706 1.840663 0.575374
-v 4.926194 1.859813 0.582137
-v 4.991709 1.844295 0.520761
-v 4.982364 1.873300 0.536190
-v 4.852582 1.816115 0.603105
-v 4.908019 1.796041 0.587882
-v 4.963546 1.783161 0.553515
-v 4.983034 1.806343 0.505779
-v 5.011430 1.875569 0.463205
-v 4.964945 2.053575 0.499903
-v 4.918466 2.084725 0.532713
-v 5.020077 1.978170 0.480978
-v 4.881574 2.094571 0.539949
-v 4.825996 2.089176 0.576083
-v 4.788476 2.028047 0.608619
-v 4.798297 2.118191 0.591085
-v 4.751519 2.039658 0.634134
-v 4.872539 2.159259 0.542891
-v 4.927885 2.156560 0.516579
-v 5.002440 2.105746 0.468233
-v 5.057495 2.002751 0.451974
-v 5.075994 1.900999 0.443793
-v 5.030289 1.827419 0.440803
-v 4.991904 1.760829 0.510386
-v 4.936066 1.737668 0.557276
-v 4.871155 1.741238 0.592326
-v 4.816181 1.797860 0.604026
-v 5.085813 1.888503 0.408327
-v 5.095375 1.961238 0.401516
-v 5.058179 1.788186 0.417387
-v 5.019836 1.739907 0.485562
-v 4.917973 1.681480 0.544201
-v 4.862636 1.684144 0.570155
-v 4.752337 1.723388 0.591296
-v 4.697607 1.768061 0.576663
-v 5.067202 2.027704 0.422291
-v 5.030641 2.102197 0.432329
-v 4.937950 2.181155 0.486939
-v 4.881855 2.194544 0.530288
-v 4.807794 2.143653 0.570393
-v 4.728963 2.036146 0.614307
-v 4.742358 1.882232 0.621650
-v 4.688114 2.046378 0.604518
-v 4.744050 2.179337 0.556057
-v 4.837331 2.235678 0.479332
-v 4.893850 2.220523 0.417713
-v 4.995978 2.148785 0.344534
-v 5.060840 2.053335 0.309324
-v 5.097062 1.954206 0.328795
-v 5.105589 1.864086 0.347113
-v 4.697024 1.862575 0.604048
-v 4.832890 2.262727 0.283787
-v 4.739441 2.299169 0.369987
-v 4.971394 2.146686 0.224781
-v 5.072165 2.043630 0.209228
-v 5.127157 1.942759 0.211214
-v 5.152698 1.830661 0.287042
-v 5.133171 1.715563 0.334258
-v 5.103427 1.624404 0.434275
-v 4.982822 1.503071 0.507606
-v 4.927282 1.486953 0.526327
-v 4.798410 1.473149 0.570618
-v 4.715646 1.502195 0.584339
-v 4.615408 1.639641 0.577768
-v 4.560751 1.785154 0.562428
-v 4.551484 1.841749 0.575191
-v 4.533113 1.989009 0.578975
-v 4.561299 2.133066 0.547248
-v 4.636582 2.263383 0.471997
-v 5.049690 2.032731 0.000071
-v 4.912303 2.162645 -0.000090
-v 5.156645 1.942902 0.119993
-v 5.218821 1.803552 0.199306
-v 5.216855 1.636645 0.279797
-v 5.233176 1.442459 0.362988
-v 4.596478 1.512987 0.598982
-v 4.679116 1.438434 0.589658
-v 4.560024 1.604023 0.589333
-v 4.477781 1.687858 0.597407
-v 4.459682 1.778884 0.588185
-v 4.432610 1.878873 0.577888
-v 4.433020 2.024714 0.563794
-v 4.747988 2.300163 -0.000276
-v 4.634996 2.369115 0.140117
-v 4.577573 2.389535 0.256196
-v 4.472349 2.325133 0.443764
-v 4.389484 2.190421 0.473320
-v 5.223191 1.371491 0.388069
-v 5.158322 1.236770 0.418043
-v 4.955360 1.236724 0.505230
-v 4.761601 1.363013 0.571370
-v 5.321136 1.795562 0.119606
-v 5.177545 1.932323 0.000214
-v 5.378289 1.768448 0.000441
-v 5.421809 1.685349 0.123555
-v 5.424281 1.721152 0.000496
-v 5.383208 1.619661 0.202452
-v 5.373133 1.541142 0.246712
-v 5.334328 1.402713 0.332639
-v 5.296963 1.322443 0.357984
-v 5.260653 1.184173 0.352062
-v 5.250485 1.123029 0.385234
-v 4.991713 1.163096 0.504149
-v 4.733657 1.227371 0.592883
-v 4.641547 1.285422 0.622034
-v 4.522247 1.398278 0.644892
-v 4.430999 1.535753 0.638888
-v 4.404221 1.662433 0.616610
-v 4.386380 1.770868 0.596666
-v 4.377095 1.871713 0.595743
-v 5.604888 1.546091 0.113773
-v 5.588763 1.573846 0.000686
-v 5.566339 1.498677 0.190905
-v 5.528186 1.440180 0.250666
-v 5.471928 1.345179 0.313899
-v 5.425783 1.264372 0.329687
-v 5.397967 1.174238 0.346802
-v 5.388455 1.119419 0.351883
-v 5.685194 1.452202 0.188749
-v 5.730427 1.435668 0.209848
-v 5.741781 1.463956 0.124891
-v 5.687035 1.499636 0.110765
-v 5.647186 1.394606 0.257833
-v 5.608974 1.317869 0.319719
-v 5.710154 1.360653 0.290072
-v 5.563253 1.235295 0.317238
-v 5.681726 1.282503 0.333871
-v 5.580797 1.174135 0.351054
-v 5.672187 1.164767 0.354080
-v 5.680007 1.510009 0.000786
-v 5.479630 1.111310 0.364188
-v 5.813217 1.415581 0.195261
-v 5.886832 1.385674 0.172365
-v 5.915025 1.382159 0.136820
-v 5.842092 1.427708 0.130724
-v 5.979357 1.325532 0.125337
-v 5.963117 1.307775 0.001098
-v 5.908842 1.388968 0.001026
-v 5.941384 1.330818 0.178936
-v 5.835498 1.436280 0.000946
-v 5.743997 1.482739 0.000851
-v 5.783731 1.341471 0.284590
-v 5.847989 1.311569 0.261476
-v 5.931474 1.233483 0.215613
-v 5.998088 1.231874 0.107334
-v 5.963527 1.232407 0.001121
-v 5.961686 1.110978 0.090324
-v 5.927110 1.131195 0.001118
-v 5.934596 1.054796 0.077039
-v 5.908782 1.066916 0.001121
-f 3750 3751 3753
-f 3751 3752 3753
-f 3755 3756 3754
-f 3754 3756 3757
-f 3758 3759 3760
-f 3761 3762 3750
-f 3751 3750 3762
-f 3762 3761 3764
-f 3761 3763 3764
-f 3761 3750 3766
-f 3765 3766 3750
-f 3763 3761 3767
-f 3766 3767 3761
-f 3767 3768 3763
-f 3768 3769 3763
-f 3760 3770 3755
-f 3755 3770 3771
-f 3760 3772 3770
-f 3769 3772 3760
-f 3755 3773 3756
-f 3773 3774 3756
-f 3753 3756 3775
-f 3775 3756 3774
-f 3777 3775 3776
-f 3775 3774 3776
-f 3776 3774 3778
-f 3774 3773 3778
-f 3779 3778 3771
-f 3773 3771 3778
-f 3779 3771 3780
-f 3771 3770 3780
-f 3781 3780 3772
-f 3770 3772 3780
-f 3769 3782 3772
-f 3772 3782 3781
-f 3769 3783 3782
-f 3784 3783 3768
-f 3768 3783 3769
-f 3785 3784 3767
-f 3767 3784 3768
-f 3786 3785 3766
-f 3785 3767 3766
-f 3787 3786 3765
-f 3786 3766 3765
-f 3787 3765 3753
-f 3788 3789 3782
-f 3788 3782 3790
-f 3783 3790 3782
-f 3784 3791 3783
-f 3791 3790 3783
-f 3792 3791 3785
-f 3785 3791 3784
-f 3785 3786 3792
-f 3793 3792 3786
-f 3794 3793 3787
-f 3793 3786 3787
-f 3753 3795 3787
-f 3795 3794 3787
-f 3781 3796 3780
-f 3796 3797 3780
-f 3797 3798 3780
-f 3779 3780 3798
-f 3798 3799 3779
-f 3778 3779 3799
-f 3776 3778 3800
-f 3800 3778 3799
-f 3800 3801 3776
-f 3801 3777 3776
-f 3777 3801 3753
-f 3753 3801 3802
-f 3795 3753 3802
-f 3804 3803 3800
-f 3803 3801 3800
-f 3805 3804 3799
-f 3800 3799 3804
-f 3806 3805 3798
-f 3799 3798 3805
-f 3807 3806 3797
-f 3798 3797 3806
-f 3807 3797 3808
-f 3797 3796 3808
-f 3808 3796 3809
-f 3796 3789 3809
-f 3809 3789 3810
-f 3788 3810 3789
-f 3790 3810 3788
-f 3795 3802 3811
-f 3812 3813 3806
-f 3806 3813 3805
-f 3814 3812 3807
-f 3806 3807 3812
-f 3814 3807 3815
-f 3807 3808 3815
-f 3809 3816 3808
-f 3808 3816 3815
-f 3816 3809 3817
-f 3809 3810 3817
-f 3790 3818 3810
-f 3818 3817 3810
-f 3818 3790 3819
-f 3791 3819 3790
-f 3820 3819 3792
-f 3792 3819 3791
-f 3793 3821 3792
-f 3821 3820 3792
-f 3822 3821 3793
-f 3794 3823 3793
-f 3823 3822 3793
-f 3823 3794 3824
-f 3824 3794 3795
-f 3824 3795 3825
-f 3825 3795 3811
-f 3825 3811 3826
-f 3811 3803 3826
-f 3826 3803 3827
-f 3829 3828 3804
-f 3828 3803 3804
-f 3827 3803 3828
-f 3831 3814 3830
-f 3814 3815 3830
-f 3830 3815 3832
-f 3815 3816 3832
-f 3832 3816 3833
-f 3816 3817 3833
-f 3834 3833 3818
-f 3817 3818 3833
-f 3835 3834 3818
-f 3819 3835 3818
-f 3824 3836 3823
-f 3836 3837 3823
-f 3838 3836 3824
-f 3825 3839 3824
-f 3839 3838 3824
-f 3839 3825 3840
-f 3840 3825 3826
-f 3827 3841 3826
-f 3840 3826 3841
-f 3828 3842 3827
-f 3841 3827 3842
-f 3843 3844 3812
-f 3813 3812 3844
-f 3844 3845 3813
-f 3829 3813 3845
-f 3829 3845 3846
-f 3847 3828 3846
-f 3828 3829 3846
-f 3842 3828 3847
-f 3848 3835 3820
-f 3820 3835 3819
-f 3821 3849 3820
-f 3849 3848 3820
-f 3849 3821 3850
-f 3822 3850 3821
-f 3850 3822 3851
-f 3823 3851 3822
-f 3837 3851 3823
-f 3853 3832 3852
-f 3832 3833 3852
-f 3852 3854 3853
-f 3855 3856 3852
-f 3852 3856 3854
-f 3857 3855 3833
-f 3855 3852 3833
-f 3833 3834 3857
-f 3834 3858 3857
-f 3834 3835 3858
-f 3835 3859 3858
-f 3835 3848 3859
-f 3848 3860 3859
-f 3861 3860 3849
-f 3849 3860 3848
-f 3862 3861 3849
-f 3862 3849 3863
-f 3850 3863 3849
-f 3863 3850 3864
-f 3864 3850 3851
-f 3837 3865 3851
-f 3865 3864 3851
-f 3865 3837 3866
-f 3866 3837 3836
-f 3866 3836 3867
-f 3867 3836 3838
-f 3867 3838 3868
-f 3868 3838 3839
-f 3868 3839 3869
-f 3839 3840 3869
-f 3840 3841 3869
-f 3869 3841 3870
-f 3855 3871 3856
-f 3871 3872 3856
-f 3871 3855 3873
-f 3857 3873 3855
-f 3857 3858 3873
-f 3858 3874 3873
-f 3858 3859 3874
-f 3859 3875 3874
-f 3875 3859 3876
-f 3860 3876 3859
-f 3860 3861 3876
-f 3861 3877 3876
-f 3862 3878 3861
-f 3878 3877 3861
-f 3882 3879 3881
-f 3879 3880 3881
-f 3883 3884 3885
-f 3886 3887 3884
-f 3887 3885 3884
-f 3889 3887 3888
-f 3888 3887 3886
-f 3890 3872 3882
-f 3872 3871 3882
-f 3873 3879 3871
-f 3879 3882 3871
-f 3883 3879 3874
-f 3873 3874 3879
-f 3875 3884 3874
-f 3884 3883 3874
-f 3876 3886 3875
-f 3886 3884 3875
-f 3888 3886 3877
-f 3877 3886 3876
-f 3888 3877 3891
-f 3878 3891 3877
-f 3895 3892 3894
-f 3892 3893 3894
-f 3894 3896 3898
-f 3896 3897 3898
-f 3899 3896 3893
-f 3893 3896 3894
-f 3895 3900 3881
-f 3881 3900 3901
-f 3881 3880 3895
-f 3880 3892 3895
-f 3892 3880 3902
-f 3885 3902 3880
-f 3893 3892 3903
-f 3902 3903 3892
-f 3904 3899 3903
-f 3903 3899 3893
-f 3899 3905 3896
-f 3896 3905 3897
-f 3905 3906 3897
-f 3904 3905 3899
-f 3905 3907 3906
-f 3907 3908 3906
-f 3908 3907 3910
-f 3907 3909 3910
-v 5.934596 1.054796 0.077039
-v 5.897758 1.009309 0.080583
-v 5.871947 1.021428 0.001102
-v 5.908782 1.066916 0.001121
-v 5.923808 1.025283 0.153084
-v 5.878630 0.986485 0.128292
-f 3913 3914 3912
-f 3911 3912 3914
-f 3911 3915 3912
-f 3915 3916 3912
-v 5.950684 1.082725 0.175648
-v 5.923808 1.025283 0.153084
-v 5.934596 1.054796 0.077039
-v 5.961686 1.110978 0.090324
-v 5.763952 1.062109 0.338641
-v 5.755282 1.004149 0.307505
-v 5.857750 0.997026 0.236768
-v 5.884856 1.062202 0.249545
-v 5.800778 1.078596 0.319450
-v 5.959462 1.157227 0.187097
-v 5.912147 1.117911 0.254197
-f 3920 3917 3919
-f 3917 3918 3919
-f 3923 3924 3922
-f 3921 3922 3925
-f 3922 3924 3925
-f 3917 3926 3924
-f 3924 3926 3927
-f 3918 3917 3923
-f 3923 3917 3924
-v 5.857750 0.997026 0.236768
-v 5.757506 0.957900 0.210732
-v 5.878630 0.986485 0.128292
-v 5.923808 1.025283 0.153084
-v 5.674999 0.950754 0.227960
-v 5.755282 1.004149 0.307505
-f 3929 3930 3928
-f 3928 3930 3931
-f 3928 3933 3929
-f 3932 3929 3933
-v 5.884856 1.062202 0.249545
-v 5.912147 1.117911 0.254197
-v 5.837875 1.141493 0.305184
-v 5.800778 1.078596 0.319450
-v 5.773410 1.225861 0.323025
-v 5.672187 1.164767 0.354080
-v 5.764774 1.279824 0.308562
-v 5.681726 1.282503 0.333871
-v 5.783731 1.341471 0.284590
-v 5.710154 1.360653 0.290072
-f 3937 3934 3936
-f 3934 3935 3936
-f 3939 3937 3938
-f 3937 3936 3938
-f 3941 3939 3940
-f 3939 3938 3940
-f 3941 3940 3943
-f 3940 3942 3943
-v 5.912147 1.117911 0.254197
-v 5.959462 1.157227 0.187097
-v 5.895899 1.182730 0.164705
-v 5.837875 1.141493 0.305184
-v 5.849792 1.193480 0.181047
-v 5.764774 1.279824 0.308562
-v 5.773410 1.225861 0.323025
-v 5.840665 1.221942 0.187128
-v 5.803425 1.260787 0.210002
-v 5.783731 1.341471 0.284590
-v 5.847989 1.311569 0.261476
-v 5.931474 1.233483 0.215613
-v 5.998088 1.231874 0.107334
-v 5.573803 0.952578 0.243886
-v 5.674999 0.950754 0.227960
-v 5.755282 1.004149 0.307505
-v 5.672385 1.007694 0.341778
-v 5.580727 0.999330 0.349867
-v 5.535184 0.980180 0.341257
-f 3944 3945 3946
-f 3947 3944 3948
-f 3944 3946 3948
-f 3951 3952 3950
-f 3949 3950 3952
-f 3953 3949 3952
-f 3954 3953 3952
-f 3955 3954 3951
-f 3951 3954 3952
-f 3948 3955 3951
-f 3956 3955 3946
-f 3948 3946 3955
-f 3957 3958 3960
-f 3958 3959 3960
-f 3957 3960 3961
-f 3962 3957 3961
-v 5.681086 1.054964 0.355860
-v 5.763952 1.062109 0.338641
-v 5.690122 1.092917 0.370850
-v 5.800778 1.078596 0.319450
-v 5.672187 1.164767 0.354080
-v 5.598282 1.094735 0.386994
-v 5.580797 1.174135 0.351054
-v 5.479630 1.111310 0.364188
-v 5.470775 1.009574 0.355371
-v 5.580223 1.047470 0.372696
-v 5.580727 0.999330 0.349867
-v 5.672385 1.007694 0.341778
-v 5.535184 0.980180 0.341257
-v 5.425352 1.035967 0.342720
-v 5.388455 1.119419 0.351883
-v 5.434594 0.970412 0.330823
-v 5.480649 0.941387 0.316248
-v 5.379461 1.045817 0.349748
-v 5.370709 0.980272 0.337432
-v 5.373646 0.885375 0.208840
-f 3963 3964 3965
-f 3966 3967 3964
-f 3965 3964 3967
-f 3969 3968 3967
-f 3968 3965 3967
-f 3970 3968 3969
-f 3971 3968 3970
-f 3963 3965 3972
-f 3972 3965 3968
-f 3972 3973 3963
-f 3973 3974 3963
-f 3968 3971 3972
-f 3971 3975 3972
-f 3975 3973 3972
-f 3977 3976 3970
-f 3976 3971 3970
-f 3978 3971 3976
-f 3978 3975 3971
-f 3978 3979 3975
-f 3980 3976 3977
-f 3981 3978 3980
-f 3978 3976 3980
-f 3982 3979 3978
-f 3982 3978 3981
-v 5.546347 0.916044 0.246782
-v 5.638369 0.904402 0.222548
-v 5.674999 0.950754 0.227960
-v 5.573803 0.952578 0.243886
-v 5.748613 0.920490 0.205099
-v 5.757506 0.957900 0.210732
-f 3985 3986 3984
-f 3983 3984 3986
-f 3984 3987 3985
-f 3987 3988 3985
-v 5.373646 0.885375 0.208840
-v 5.511556 0.863525 0.177613
-v 5.546347 0.916044 0.246782
-v 5.480649 0.941387 0.316248
-v 5.603370 0.852748 0.162335
-v 5.638369 0.904402 0.222548
-v 5.704630 0.849158 0.128130
-v 5.748613 0.920490 0.205099
-v 5.241466 1.040469 0.383965
-v 5.379461 1.045817 0.349748
-v 5.388455 1.119419 0.351883
-v 5.250485 1.123029 0.385234
-v 5.223571 0.974029 0.362117
-v 5.370709 0.980272 0.337432
-v 5.299005 0.908991 0.260177
-v 5.197562 0.922406 0.302473
-f 3989 3990 3992
-f 3990 3991 3992
-f 3990 3993 3991
-f 3993 3994 3991
-f 3995 3996 3993
-f 3993 3996 3994
-f 3997 3998 4000
-f 3998 3999 4000
-f 4001 4002 3997
-f 4002 3998 3997
-f 4003 3989 4002
-f 4002 4001 4003
-f 4004 4003 4001
-v 5.757506 0.957900 0.210732
-v 5.748613 0.920490 0.205099
-v 5.851404 0.929008 0.105362
-v 5.878630 0.986485 0.128292
-v 5.897758 1.009309 0.080583
-v 5.836005 0.945722 0.001092
-v 5.871947 1.021428 0.001102
-f 4008 4005 4007
-f 4005 4006 4007
-f 4009 4010 4011
-f 4009 4008 4010
-f 4008 4007 4010
-v 5.851404 0.929008 0.105362
-v 5.797411 0.880032 0.072306
-v 5.780790 0.891286 0.001059
-v 5.836005 0.945722 0.001092
-v 5.748613 0.920490 0.205099
-v 5.704630 0.849158 0.128130
-v 5.679621 0.839500 0.000985
-v 5.568745 0.834653 0.071390
-v 5.579253 0.837796 0.000896
-v 5.603370 0.852748 0.162335
-v 5.449164 0.847535 0.103909
-v 5.137075 0.824518 0.144842
-v 5.112563 0.840686 0.000480
-v 5.213434 0.856784 0.000565
-v 5.247762 0.848549 0.108546
-v 5.511556 0.863525 0.177613
-v 5.356900 0.851120 0.138324
-v 5.373646 0.885375 0.208840
-v 5.264430 0.855571 0.181694
-v 5.323232 0.866039 0.000660
-v 5.469641 0.838722 0.000798
-v 5.299005 0.908991 0.260177
-v 5.153735 0.831575 0.218348
-v 5.197562 0.922406 0.302473
-v 4.963526 0.797382 0.143440
-v 4.920855 0.812339 0.000318
-v 4.996710 0.810560 0.280771
-v 4.669690 0.738163 0.188296
-v 4.712067 0.770512 0.333393
-v 4.655453 0.758022 0.000098
-v 5.004627 0.908637 0.345273
-v 4.728809 0.878731 0.405801
-v 5.021254 0.951308 0.405567
-v 5.223571 0.974029 0.362117
-v 5.241466 1.040469 0.383965
-v 5.011084 1.066770 0.458562
-v 4.743250 1.059210 0.563421
-v 4.991713 1.163096 0.504149
-v 4.733657 1.227371 0.592883
-v 4.744871 0.950945 0.491082
-v 4.567896 1.149805 0.642484
-v 4.641547 1.285422 0.622034
-v 4.496191 1.024566 0.579491
-v 4.416475 0.921264 0.458839
-v 4.297891 0.911506 0.447987
-v 4.399629 0.850459 0.391855
-v 4.333503 0.951176 0.481517
-v 4.359048 0.700414 0.166651
-v 4.380854 0.704574 -0.000130
-v 4.319799 0.731007 0.291212
-v 4.216374 0.852328 0.405873
-v 4.366867 1.131136 0.630581
-v 4.449011 1.260929 0.647431
-v 4.141189 1.008775 0.499342
-v 4.277227 1.077746 0.550819
-v 4.175444 1.350332 0.613988
-v 4.085564 1.288885 0.544406
-v 4.247733 1.381058 0.649596
-v 4.329607 1.464801 0.661485
-v 4.522247 1.398278 0.644892
-v 4.430999 1.535753 0.638888
-v 4.404221 1.662433 0.616610
-v 4.312225 1.683392 0.639944
-v 4.386380 1.770868 0.596666
-v 4.303615 1.799914 0.610388
-v 4.377095 1.871713 0.595743
-v 4.304562 1.906537 0.572242
-v 4.221814 1.660769 0.594090
-v 4.240116 1.770049 0.583946
-v 4.121121 1.614451 0.587188
-v 4.067576 1.572668 0.534997
-v 4.148883 1.759918 0.573765
-v 4.076852 1.746601 0.527436
-v 4.832890 2.262727 0.283787
-v 4.971394 2.146686 0.224781
-v 4.912303 2.162645 -0.000090
-v 4.747988 2.300163 -0.000276
-v 5.156645 1.942902 0.119993
-v 5.177545 1.932323 0.000214
-v 5.049690 2.032731 0.000071
-v 5.687035 1.499636 0.110765
-v 5.741781 1.463956 0.124891
-v 5.743997 1.482739 0.000851
-v 5.680007 1.510009 0.000786
-v 5.842092 1.427708 0.130724
-v 5.915025 1.382159 0.136820
-v 5.908842 1.388968 0.001026
-v 5.835498 1.436280 0.000946
-v 4.452383 2.524558 0.130255
-v 4.454962 2.523303 -0.000603
-v 4.317602 2.588926 -0.000745
-v 4.342351 2.581176 0.140317
-v 4.440143 2.510529 0.269164
-v 4.332083 2.586481 0.194917
-v 4.429895 2.495758 0.306894
-v 4.339601 2.592642 0.258891
-v 4.189883 2.606916 -0.000863
-v 4.187258 2.590221 0.135844
-v 4.203325 2.589186 0.219164
-v 4.211652 2.602538 0.264011
-v 4.328606 2.563996 0.343892
-v 4.209941 2.600612 0.337597
-v 4.410844 2.500167 0.351972
-f 4012 4013 4015
-f 4013 4014 4015
-f 4016 4017 4012
-f 4017 4013 4012
-f 4018 4014 4013
-f 4019 4018 4017
-f 4017 4018 4013
-f 4019 4020 4018
-f 4022 4019 4021
-f 4021 4019 4017
-f 4023 4024 4026
-f 4024 4025 4026
-f 4021 4027 4022
-f 4027 4028 4022
-f 4027 4029 4028
-f 4029 4030 4028
-f 4026 4025 4031
-f 4022 4032 4019
-f 4032 4020 4019
-f 4026 4031 4022
-f 4031 4032 4022
-f 4026 4022 4028
-f 4030 4026 4028
-f 4030 4029 4033
-f 4035 4034 4033
-f 4034 4030 4033
-f 4034 4023 4030
-f 4023 4026 4030
-f 4037 4024 4036
-f 4036 4024 4023
-f 4038 4036 4034
-f 4036 4023 4034
-f 4036 4038 4039
-f 4039 4038 4040
-f 4039 4041 4036
-f 4041 4037 4036
-f 4042 4038 4035
-f 4038 4034 4035
-f 4038 4042 4040
-f 4040 4042 4043
-f 4046 4047 4045
-f 4044 4045 4047
-f 4044 4042 4045
-f 4042 4035 4045
-f 4050 4048 4049
-f 4048 4047 4049
-f 4051 4044 4048
-f 4044 4047 4048
-f 4051 4043 4044
-f 4043 4042 4044
-f 4048 4050 4052
-f 4052 4050 4053
-f 4051 4048 4054
-f 4054 4048 4052
-f 4055 4043 4054
-f 4043 4051 4054
-f 4057 4055 4056
-f 4056 4055 4058
-f 4039 4059 4041
-f 4059 4060 4041
-f 4061 4059 4040
-f 4059 4039 4040
-f 4061 4040 4057
-f 4061 4057 4062
-f 4056 4062 4057
-f 4040 4043 4057
-f 4043 4055 4057
-f 4054 4052 4063
-f 4063 4052 4064
-f 4062 4056 4065
-f 4066 4065 4058
-f 4056 4058 4065
-f 4065 4066 4068
-f 4066 4067 4068
-f 4055 4054 4058
-f 4058 4054 4066
-f 4054 4063 4066
-f 4066 4063 4067
-f 4063 4069 4067
-f 4063 4064 4069
-f 4064 4070 4069
-f 4064 4071 4070
-f 4071 4072 4070
-f 4070 4072 4074
-f 4072 4073 4074
-f 4076 4074 4075
-f 4074 4073 4075
-f 4078 4076 4077
-f 4076 4075 4077
-f 4079 4074 4080
-f 4074 4076 4080
-f 4069 4070 4079
-f 4070 4074 4079
-f 4079 4081 4069
-f 4067 4069 4081
-f 4068 4067 4082
-f 4067 4081 4082
-f 4081 4079 4083
-f 4079 4080 4083
-f 4082 4081 4084
-f 4081 4083 4084
-f 4088 4085 4087
-f 4085 4086 4087
-f 4089 4090 4091
-f 4093 4094 4092
-f 4092 4094 4095
-f 4097 4098 4096
-f 4096 4098 4099
-f 4102 4103 4101
-f 4100 4101 4103
-f 4104 4100 4105
-f 4100 4103 4105
-f 4105 4107 4104
-f 4106 4104 4107
-f 4103 4102 4109
-f 4102 4108 4109
-f 4103 4109 4105
-f 4105 4109 4110
-f 4107 4105 4111
-f 4105 4110 4111
-f 4112 4107 4113
-f 4107 4111 4113
-f 4107 4112 4106
-f 4114 4106 4112
-v 4.344028 2.585635 0.470949
-v 4.328606 2.563996 0.343892
-v 4.209941 2.600612 0.337597
-v 4.224730 2.624525 0.491916
-v 4.407729 2.531640 0.486692
-v 4.410844 2.500167 0.351972
-v 4.359483 2.615839 0.596817
-v 4.277169 2.652435 0.591369
-v 4.423033 2.561337 0.603562
-v 4.411541 2.663824 0.713132
-v 4.356680 2.682996 0.719050
-v 4.476090 2.606654 0.692301
-v 4.465268 2.695425 0.757267
-v 4.418954 2.707401 0.782531
-v 4.520603 2.639162 0.745542
-v 4.546655 2.709095 0.803780
-v 4.509555 2.719807 0.819972
-v 4.574545 2.669863 0.780363
-f 4117 4118 4116
-f 4115 4116 4118
-f 4116 4115 4120
-f 4119 4120 4115
-f 4118 4122 4115
-f 4121 4115 4122
-f 4115 4121 4119
-f 4123 4119 4121
-f 4122 4125 4121
-f 4124 4121 4125
-f 4121 4124 4123
-f 4126 4123 4124
-f 4128 4127 4125
-f 4127 4124 4125
-f 4126 4124 4129
-f 4127 4129 4124
-f 4127 4128 4130
-f 4130 4128 4131
-f 4130 4132 4127
-f 4132 4129 4127
-v 4.634996 2.369115 0.140117
-v 4.747988 2.300163 -0.000276
-v 4.528082 2.467537 -0.000521
-v 4.577573 2.389535 0.256196
-v 4.454962 2.523303 -0.000603
-v 4.452383 2.524558 0.130255
-v 4.440143 2.510529 0.269164
-v 4.429895 2.495758 0.306894
-v 4.410844 2.500167 0.351972
-v 4.474318 2.418432 0.361347
-f 4133 4134 4135
-f 4136 4133 4138
-f 4133 4135 4138
-f 4135 4137 4138
-f 4136 4138 4139
-f 4136 4139 4140
-f 4140 4141 4142
-v 4.443850 2.449921 0.495432
-v 4.474318 2.418432 0.361347
-v 4.410844 2.500167 0.351972
-v 4.407729 2.531640 0.486692
-v 4.440760 2.490353 0.629287
-v 4.423033 2.561337 0.603562
-v 4.484667 2.534451 0.708888
-v 4.476090 2.606654 0.692301
-v 4.520165 2.557971 0.762427
-v 4.520603 2.639162 0.745542
-v 4.592620 2.569879 0.790452
-v 4.574545 2.669863 0.780363
-v 4.674691 2.598833 0.808006
-v 4.656565 2.680542 0.799684
-v 4.546655 2.709095 0.803780
-v 4.646703 2.728688 0.822295
-v 4.509555 2.719807 0.819972
-v 4.636909 2.750501 0.856859
-v 4.729447 2.606204 0.807513
-v 4.748031 2.683805 0.800044
-v 4.728931 2.721892 0.832625
-v 4.719171 2.751091 0.865965
-v 4.821336 2.621498 0.789636
-v 4.821325 2.691794 0.791887
-v 4.811798 2.728680 0.815406
-v 4.801436 2.750224 0.858918
-v 5.096148 2.759720 0.774729
-f 4144 4145 4143
-f 4143 4145 4146
-f 4147 4143 4148
-f 4143 4146 4148
-f 4148 4150 4147
-f 4149 4147 4150
-f 4152 4151 4150
-f 4151 4149 4150
-f 4154 4153 4152
-f 4153 4151 4152
-f 4153 4154 4155
-f 4155 4154 4156
-f 4157 4158 4154
-f 4156 4154 4158
-f 4159 4160 4157
-f 4158 4157 4160
-f 4156 4162 4155
-f 4161 4155 4162
-f 4156 4158 4162
-f 4162 4158 4163
-f 4164 4163 4160
-f 4163 4158 4160
-f 4161 4162 4165
-f 4165 4162 4166
-f 4167 4166 4163
-f 4166 4162 4163
-f 4168 4167 4164
-f 4167 4163 4164
-f 4167 4168 4169
-f 4166 4167 4169
-f 4165 4166 4169
-v 4.577573 2.389535 0.256196
-v 4.429895 2.495758 0.306894
-v 4.474318 2.418432 0.361347
-v 4.472349 2.325133 0.443764
-f 4170 4171 4172
-f 4173 4170 4172
-v 4.472349 2.325133 0.443764
-v 4.474318 2.418432 0.361347
-v 4.443850 2.449921 0.495432
-v 4.442912 2.343263 0.533220
-v 4.440760 2.490353 0.629287
-v 4.440713 2.398472 0.629128
-v 4.474625 2.465214 0.751890
-v 4.484667 2.534451 0.708888
-v 4.320630 2.385528 0.682583
-v 4.314039 2.329460 0.577510
-v 4.296769 2.260422 0.528796
-v 4.382053 2.433474 0.798757
-v 4.538177 2.513353 0.776566
-v 4.520165 2.557971 0.762427
-v 4.444739 2.475795 0.860515
-v 4.601515 2.533324 0.794193
-v 4.592620 2.569879 0.790452
-v 4.554459 2.511417 0.850571
-v 4.683344 2.554221 0.821927
-v 4.674691 2.598833 0.808006
-v 4.681847 2.551036 0.886235
-v 4.755192 2.568818 0.876311
-v 4.737893 2.564648 0.830389
-v 4.856249 2.593812 0.867067
-v 4.829566 2.580797 0.821827
-v 4.729447 2.606204 0.807513
-v 4.821336 2.621498 0.789636
-v 4.497719 2.547480 0.937659
-v 4.662221 2.556346 0.940618
-v 4.763337 2.590834 0.929248
-v 4.883022 2.613658 0.893163
-v 4.352603 2.524888 0.890532
-v 4.262798 2.490674 0.818316
-v 4.192789 2.411967 0.668016
-v 4.193959 2.370476 0.616705
-v 4.113935 2.334131 0.526471
-v 5.096148 2.759720 0.774729
-v 4.854957 2.660227 0.924310
-v 4.735139 2.645464 0.950890
-v 4.615662 2.633870 0.977986
-v 4.460582 2.622875 0.957002
-v 4.343217 2.589542 0.893106
-v 4.244622 2.554467 0.811726
-v 4.138687 2.474013 0.642311
-v 4.121994 2.458034 0.570029
-v 4.078510 2.411810 0.472193
-v 4.342998 2.664049 0.904347
-v 4.235494 2.636171 0.803613
-v 4.460786 2.695616 0.949972
-v 4.624800 2.708372 0.989445
-v 4.138494 2.557838 0.652651
-v 4.104292 2.537976 0.543437
-v 4.088356 2.510913 0.453793
-f 4175 4176 4174
-f 4174 4176 4177
-f 4176 4178 4177
-f 4177 4178 4179
-f 4179 4178 4180
-f 4180 4178 4181
-f 4182 4183 4179
-f 4183 4177 4179
-f 4174 4177 4184
-f 4184 4177 4183
-f 4182 4179 4185
-f 4185 4179 4180
-f 4180 4181 4186
-f 4186 4181 4187
-f 4186 4188 4180
-f 4188 4185 4180
-f 4190 4189 4187
-f 4189 4186 4187
-f 4188 4186 4191
-f 4191 4186 4189
-f 4192 4189 4193
-f 4189 4190 4193
-f 4191 4189 4194
-f 4194 4189 4192
-f 4195 4194 4196
-f 4194 4192 4196
-f 4195 4196 4197
-f 4197 4196 4198
-f 4196 4192 4199
-f 4192 4193 4199
-f 4200 4198 4199
-f 4198 4196 4199
-f 4201 4191 4202
-f 4191 4194 4202
-f 4203 4202 4195
-f 4195 4202 4194
-f 4204 4203 4197
-f 4203 4195 4197
-f 4205 4188 4201
-f 4201 4188 4191
-f 4206 4185 4205
-f 4185 4188 4205
-f 4206 4207 4185
-f 4207 4182 4185
-f 4183 4182 4208
-f 4208 4182 4207
-f 4184 4183 4209
-f 4183 4208 4209
-f 4197 4210 4204
-f 4204 4211 4203
-f 4211 4212 4203
-f 4213 4202 4212
-f 4203 4212 4202
-f 4202 4213 4201
-f 4213 4214 4201
-f 4201 4214 4205
-f 4214 4215 4205
-f 4216 4206 4215
-f 4205 4215 4206
-f 4216 4217 4206
-f 4206 4217 4207
-f 4210 4211 4204
-f 4218 4208 4217
-f 4208 4207 4217
-f 4208 4218 4209
-f 4219 4209 4218
-f 4221 4216 4220
-f 4215 4220 4216
-f 4215 4214 4220
-f 4214 4222 4220
-f 4222 4214 4223
-f 4213 4223 4214
-f 4217 4216 4224
-f 4216 4221 4224
-f 4225 4218 4224
-f 4218 4217 4224
-f 4218 4225 4219
-f 4219 4225 4226
-v 4.043796 2.386524 0.400392
-v 4.078510 2.411810 0.472193
-v 4.088356 2.510913 0.453793
-v 4.063205 2.509679 0.342987
-v 4.035753 2.399538 0.343957
-v 4.055262 2.505284 0.297282
-f 4230 4227 4229
-f 4227 4228 4229
-f 4230 4232 4227
-f 4231 4227 4232
-v 4.615662 2.633870 0.977986
-v 4.735139 2.645464 0.950890
-v 4.753015 2.699695 0.973279
-v 4.624800 2.708372 0.989445
-v 4.854957 2.660227 0.924310
-v 4.863709 2.722151 0.936660
-f 4233 4234 4236
-f 4234 4235 4236
-f 4234 4237 4235
-f 4237 4238 4235
-v 4.189883 2.606916 -0.000863
-v 4.079812 2.571649 -0.000951
-v 4.084506 2.570978 0.218168
-v 4.187258 2.590221 0.135844
-v 4.101754 2.557092 0.265856
-v 4.203325 2.589186 0.219164
-v 4.100907 2.560626 0.302396
-v 4.211652 2.602538 0.264011
-v 4.117367 2.568514 0.384500
-v 4.209941 2.600612 0.337597
-f 4241 4242 4240
-f 4239 4240 4242
-f 4242 4241 4244
-f 4241 4243 4244
-f 4245 4246 4243
-f 4244 4243 4246
-f 4245 4247 4246
-f 4246 4247 4248
-v 4.209941 2.600612 0.337597
-v 4.117367 2.568514 0.384500
-v 4.151183 2.579059 0.494606
-v 4.224730 2.624525 0.491916
-v 4.509555 2.719807 0.819972
-v 4.462368 2.725999 0.882675
-v 4.616626 2.749486 0.939333
-v 4.636909 2.750501 0.856859
-v 4.418954 2.707401 0.782531
-v 4.354196 2.711836 0.826545
-v 4.356680 2.682996 0.719050
-v 4.273414 2.686575 0.753674
-v 4.176065 2.636883 0.618384
-v 4.277169 2.652435 0.591369
-f 4249 4250 4252
-f 4250 4251 4252
-f 4255 4256 4254
-f 4253 4254 4256
-f 4254 4253 4258
-f 4257 4258 4253
-f 4260 4258 4259
-f 4259 4258 4257
-f 4251 4261 4252
-f 4261 4262 4252
-v 4.055262 2.505284 0.297282
-v 4.029016 2.519175 0.249385
-v 4.000110 2.424158 0.313254
-v 4.035753 2.399538 0.343957
-v 3.988172 2.489642 -0.001008
-v 4.024214 2.527933 -0.000987
-v 4.084506 2.570978 0.218168
-v 4.079812 2.571649 -0.000951
-v 4.101754 2.557092 0.265856
-v 4.063205 2.509679 0.342987
-v 4.100907 2.560626 0.302396
-v 4.088356 2.510913 0.453793
-v 4.117367 2.568514 0.384500
-f 4264 4265 4263
-f 4263 4265 4266
-f 4265 4264 4267
-f 4267 4264 4268
-f 4268 4264 4270
-f 4264 4269 4270
-f 4269 4264 4271
-f 4263 4271 4264
-f 4272 4273 4263
-f 4273 4271 4263
-f 4274 4275 4272
-f 4275 4273 4272
-v 4.104292 2.537976 0.543437
-v 4.151183 2.579059 0.494606
-v 4.117367 2.568514 0.384500
-v 4.088356 2.510913 0.453793
-v 4.273414 2.686575 0.753674
-v 4.356680 2.682996 0.719050
-v 4.277169 2.652435 0.591369
-v 4.176065 2.636883 0.618384
-v 4.138494 2.557838 0.652651
-v 4.235494 2.636171 0.803613
-v 4.342998 2.664049 0.904347
-v 4.354196 2.711836 0.826545
-v 4.460786 2.695616 0.949972
-v 4.462368 2.725999 0.882675
-v 4.616626 2.749486 0.939333
-v 4.735445 2.749285 0.940329
-v 4.719171 2.751091 0.865965
-v 4.636909 2.750501 0.856859
-v 4.827733 2.754390 0.905049
-v 4.801436 2.750224 0.858918
-v 5.096148 2.759720 0.774729
-v 4.624800 2.708372 0.989445
-v 4.753015 2.699695 0.973279
-v 4.863709 2.722151 0.936660
-f 4278 4279 4277
-f 4276 4277 4279
-f 4283 4280 4282
-f 4280 4281 4282
-f 4277 4276 4283
-f 4284 4283 4276
-f 4284 4285 4283
-f 4285 4280 4283
-f 4285 4286 4280
-f 4286 4287 4280
-f 4286 4288 4287
-f 4288 4289 4287
-f 4291 4292 4290
-f 4290 4292 4293
-f 4291 4294 4292
-f 4292 4294 4295
-f 4296 4295 4294
-f 4288 4297 4289
-f 4297 4290 4289
-f 4298 4291 4297
-f 4297 4291 4290
-f 4298 4299 4291
-f 4294 4291 4299
-f 4296 4294 4299
-v 3.828001 2.352540 0.233341
-v 4.000110 2.424158 0.313254
-v 3.988172 2.489642 -0.001008
-v 3.787342 2.396113 -0.001159
-v 3.870548 2.292106 0.368964
-v 3.961908 2.347745 0.374747
-v 4.025364 2.359300 0.402597
-v 4.043796 2.386524 0.400392
-v 4.035753 2.399538 0.343957
-v 3.967085 2.280648 0.537643
-v 4.077563 2.305187 0.510338
-v 3.903911 2.241501 0.512468
-v 3.823349 2.141733 0.428356
-v 3.857922 2.141554 0.521067
-v 4.113935 2.334131 0.526471
-v 4.078510 2.411810 0.472193
-v 4.010847 2.270246 0.622149
-v 4.112302 2.285832 0.595500
-v 3.928869 2.223919 0.615683
-v 3.892378 2.149432 0.603589
-v 4.044730 2.254459 0.744209
-v 4.146067 2.278102 0.707372
-v 3.990744 2.205448 0.710795
-v 3.945464 2.130100 0.689536
-v 4.212974 2.303184 0.587113
-v 4.296769 2.260422 0.528796
-v 4.212058 2.279450 0.625927
-v 4.172143 2.303394 0.778972
-v 4.229332 2.274522 0.672749
-v 4.079122 2.264104 0.845010
-v 4.024700 2.187859 0.814219
-v 4.215419 2.350484 0.885764
-v 4.273005 2.310529 0.762172
-v 4.104864 2.298353 0.915735
-v 4.059714 2.194906 0.888152
-v 4.097362 2.366600 1.239986
-v 4.155551 2.388662 1.091960
-v 4.102304 2.299960 1.025862
-v 4.061989 2.231988 1.178382
-v 4.194233 2.408334 1.008471
-v 4.307092 2.367482 0.877202
-v 4.266263 2.421651 1.054799
-v 4.228523 2.435029 1.098575
-v 4.170470 2.458441 1.241846
-v 4.058311 2.293363 1.338054
-v 4.094116 2.426172 1.381032
-v 4.046673 2.341349 1.452530
-v 4.047406 2.207209 1.015108
-v 3.989434 2.118832 0.765086
-v 4.022592 2.123052 0.903284
-v 4.020299 2.141675 1.002365
-v 4.024858 2.106568 1.208099
-v 4.036947 1.992167 1.072561
-v 4.082988 2.175805 1.450930
-v 4.103303 2.038565 1.363737
-v 4.152166 1.868775 1.225002
-v 4.127903 1.828359 1.090512
-v 4.031515 1.968248 0.918460
-v 3.966639 1.969285 0.549291
-v 3.922437 1.972461 0.483563
-v 3.982910 1.987391 0.639809
-v 4.059885 1.860460 0.470087
-v 4.094112 1.889281 0.578435
-v 4.017509 1.996169 0.731654
-v 4.150297 1.820575 0.917046
-v 4.389484 2.190421 0.473320
-v 4.472349 2.325133 0.443764
-v 4.342700 2.112281 0.516692
-v 4.314791 2.142163 0.540650
-v 4.305411 2.059245 0.539407
-v 4.433020 2.024714 0.563794
-v 4.101726 2.312318 1.438163
-v 4.148927 2.388726 1.376879
-v 4.129926 2.308770 1.402259
-v 4.140097 2.295949 1.367196
-v 4.169404 2.306276 1.284031
-v 4.149438 2.340550 1.353693
-v 4.141759 2.279958 1.295340
-v 4.197644 2.394643 1.248646
-v 4.197516 2.349135 1.253043
-v 4.199317 2.304652 1.174540
-v 4.267320 2.121987 0.614940
-v 4.274886 2.220030 0.679075
-v 4.354411 2.102985 0.802580
-v 4.380990 2.207701 0.839016
-v 4.369751 2.298204 0.921894
-v 4.303193 2.347123 1.044413
-v 4.245861 2.375093 1.141312
-v 4.218457 2.356834 1.142444
-v 4.275405 2.319905 1.046400
-v 4.296538 2.243779 0.925459
-v 4.289048 2.172969 0.858693
-v 4.211815 2.282490 1.039137
-v 4.278045 1.976660 0.537351
-v 4.290375 2.112337 0.800190
-v 4.222795 2.228178 0.952752
-v 4.197609 2.164063 0.857433
-v 4.153175 2.084823 0.799668
-v 4.151090 2.102939 0.889759
-v 4.148865 2.148829 0.986567
-v 4.154566 2.190480 1.129552
-v 4.152557 2.235471 1.217046
-v 4.131949 2.050757 0.921856
-v 4.119993 2.063095 1.049178
-v 4.126160 2.120930 1.172520
-v 4.133175 2.175231 1.259323
-v 4.159229 1.949902 0.923197
-v 4.137657 1.944837 1.061024
-v 4.143794 2.013720 1.201386
-v 4.123290 2.086854 1.295135
-v 4.112680 2.195089 1.366908
-v 4.111934 2.234814 1.399949
-v 4.232341 1.903079 0.534362
-v 4.304562 1.906537 0.572242
-v 4.303615 1.799914 0.610388
-v 4.240116 1.770049 0.583946
-v 4.377095 1.871713 0.595743
-v 4.432610 1.878873 0.577888
-v 4.148883 1.759918 0.573765
-v 4.281287 2.055751 0.787000
-v 4.354941 2.064161 0.778851
-v 4.245225 2.008532 0.772641
-f 4301 4302 4300
-f 4300 4302 4303
-f 4301 4300 4305
-f 4300 4304 4305
-f 4301 4306 4308
-f 4306 4307 4308
-f 4305 4306 4301
-f 4309 4310 4305
-f 4310 4306 4305
-f 4309 4305 4311
-f 4311 4305 4304
-f 4304 4312 4311
-f 4312 4313 4311
-f 4314 4315 4307
-f 4307 4306 4314
-f 4306 4310 4314
-f 4309 4316 4310
-f 4316 4317 4310
-f 4318 4316 4311
-f 4311 4316 4309
-f 4311 4313 4318
-f 4313 4319 4318
-f 4320 4321 4316
-f 4316 4321 4317
-f 4316 4318 4320
-f 4322 4320 4318
-f 4318 4319 4322
-f 4319 4323 4322
-f 4324 4325 4314
-f 4317 4324 4310
-f 4324 4314 4310
-f 4321 4326 4317
-f 4317 4326 4324
-f 4327 4328 4321
-f 4321 4328 4326
-f 4329 4327 4320
-f 4320 4327 4321
-f 4330 4329 4322
-f 4322 4329 4320
-f 4331 4332 4327
-f 4327 4332 4328
-f 4327 4329 4331
-f 4329 4333 4331
-f 4333 4329 4334
-f 4330 4334 4329
-f 4338 4335 4337
-f 4335 4336 4337
-f 4331 4333 4339
-f 4337 4339 4333
-f 4336 4339 4337
-f 4340 4332 4331
-f 4340 4331 4341
-f 4339 4341 4331
-f 4336 4342 4339
-f 4342 4341 4339
-f 4335 4343 4336
-f 4343 4342 4336
-f 4343 4335 4345
-f 4344 4345 4335
-f 4346 4345 4344
-f 4334 4347 4333
-f 4347 4337 4333
-f 4338 4337 4347
-f 4330 4322 4348
-f 4348 4322 4323
-f 4348 4349 4330
-f 4349 4334 4330
-f 4347 4334 4350
-f 4350 4334 4349
-f 4338 4347 4350
-f 4344 4335 4338
-f 4338 4350 4351
-f 4351 4350 4352
-f 4344 4338 4351
-f 4353 4346 4344
-f 4344 4351 4353
-f 4353 4351 4354
-f 4355 4354 4352
-f 4352 4354 4351
-f 4357 4356 4352
-f 4356 4355 4352
-f 4357 4352 4349
-f 4352 4350 4349
-f 4358 4313 4359
-f 4313 4312 4359
-f 4313 4358 4319
-f 4360 4319 4358
-f 4361 4362 4359
-f 4362 4358 4359
-f 4362 4360 4358
-f 4363 4357 4348
-f 4357 4349 4348
-f 4348 4323 4363
-f 4360 4363 4319
-f 4363 4323 4319
-f 4362 4363 4360
-f 4362 4364 4363
-f 4363 4364 4357
-f 4364 4356 4357
-f 4365 4366 4325
-f 4367 4365 4368
-f 4369 4367 4368
-f 4365 4325 4368
-f 4370 4365 4367
-f 4370 4367 4369
-f 4346 4371 4345
-f 4371 4372 4345
-f 4375 4376 4374
-f 4373 4374 4376
-f 4374 4377 4375
-f 4345 4372 4343
-f 4372 4378 4343
-f 4372 4376 4378
-f 4376 4379 4378
-f 4376 4375 4379
-f 4375 4380 4379
-f 4325 4382 4368
-f 4381 4368 4382
-f 4383 4381 4384
-f 4381 4382 4384
-f 4326 4325 4324
-f 4328 4325 4326
-f 4382 4325 4328
-f 4382 4328 4332
-f 4340 4382 4332
-f 4369 4368 4381
-f 4382 4340 4384
-f 4385 4384 4340
-f 4340 4341 4385
-f 4385 4341 4386
-f 4387 4386 4342
-f 4386 4341 4342
-f 4343 4378 4342
-f 4342 4378 4387
-f 4378 4379 4387
-f 4388 4387 4379
-f 4389 4386 4388
-f 4386 4387 4388
-f 4390 4385 4389
-f 4389 4385 4386
-f 4385 4390 4384
-f 4390 4391 4384
-f 4388 4379 4380
-f 4380 4392 4388
-f 4392 4389 4388
-f 4393 4369 4383
-f 4369 4381 4383
-f 4384 4391 4383
-f 4394 4383 4391
-f 4390 4389 4395
-f 4395 4389 4392
-f 4395 4396 4390
-f 4396 4391 4390
-f 4394 4391 4397
-f 4397 4391 4396
-f 4397 4396 4398
-f 4399 4398 4395
-f 4398 4396 4395
-f 4400 4399 4392
-f 4399 4395 4392
-f 4392 4380 4400
-f 4400 4380 4401
-f 4380 4375 4401
-f 4401 4375 4377
-f 4397 4398 4402
-f 4399 4403 4398
-f 4402 4398 4403
-f 4399 4400 4403
-f 4403 4400 4404
-f 4400 4401 4404
-f 4404 4401 4405
-f 4401 4377 4405
-f 4403 4407 4402
-f 4406 4402 4407
-f 4407 4403 4408
-f 4403 4404 4408
-f 4408 4404 4409
-f 4404 4405 4409
-f 4409 4405 4410
-f 4405 4377 4410
-f 4377 4374 4410
-f 4410 4374 4411
-f 4374 4373 4411
-f 4412 4413 4393
-f 4415 4414 4412
-f 4414 4413 4412
-f 4369 4393 4416
-f 4416 4393 4413
-f 4369 4416 4370
-f 4417 4370 4416
-f 4362 4418 4412
-f 4415 4412 4418
-f 4419 4383 4394
-f 4419 4420 4383
-f 4421 4420 4419
-f 4419 4394 4397
-f 4419 4397 4406
-f 4406 4397 4402
-f 4393 4383 4420
-f 4420 4421 4393
-f 4421 4412 4393
-f 4421 4419 4406
-v 5.895899 1.182730 0.164705
-v 5.959462 1.157227 0.187097
-v 5.998088 1.231874 0.107334
-f 4422 4423 4424
-v 5.959462 1.157227 0.187097
-v 5.950684 1.082725 0.175648
-v 5.961686 1.110978 0.090324
-v 5.998088 1.231874 0.107334
-v 5.755282 1.004149 0.307505
-v 5.763952 1.062109 0.338641
-v 5.681086 1.054964 0.355860
-v 5.672385 1.007694 0.341778
-f 4428 4425 4427
-f 4425 4426 4427
-f 4430 4431 4429
-f 4429 4431 4432
-v 5.849792 1.193480 0.181047
-v 5.840665 1.221942 0.187128
-v 5.773410 1.225861 0.323025
-v 5.837875 1.141493 0.305184
-v 5.480649 0.941387 0.316248
-v 5.546347 0.916044 0.246782
-v 5.573803 0.952578 0.243886
-v 5.535184 0.980180 0.341257
-f 4433 4434 4436
-f 4434 4435 4436
-f 4437 4438 4440
-f 4438 4439 4440
-v 5.710154 1.360653 0.290072
-v 5.730427 1.435668 0.209848
-v 5.685194 1.452202 0.188749
-v 5.647186 1.394606 0.257833
-v 4.991713 1.163096 0.504149
-v 5.011084 1.066770 0.458562
-v 5.241466 1.040469 0.383965
-v 5.250485 1.123029 0.385234
-v 4.641547 1.285422 0.622034
-v 4.522247 1.398278 0.644892
-v 4.449011 1.260929 0.647431
-v 4.567896 1.149805 0.642484
-v 4.742358 1.882232 0.621650
-v 4.728963 2.036146 0.614307
-v 4.688114 2.046378 0.604518
-v 4.697024 1.862575 0.604048
-v 4.760921 1.881357 0.613120
-v 4.824747 1.946835 0.626358
-v 4.861611 2.001639 0.621913
-v 4.842883 2.021333 0.638025
-f 4441 4442 4444
-f 4442 4443 4444
-f 4448 4445 4447
-f 4445 4446 4447
-f 4450 4451 4449
-f 4449 4451 4452
-f 4455 4456 4454
-f 4453 4454 4456
-f 4457 4458 4460
-f 4458 4459 4460
-v 4.925394 1.955229 0.618837
-v 4.935561 2.016016 0.585700
-v 4.861611 2.001639 0.621913
-v 4.897808 1.946794 0.628057
-f 4462 4463 4461
-f 4461 4463 4464
-v 4.852582 1.816115 0.603105
-v 4.861618 1.854067 0.618095
-v 4.760921 1.881357 0.613120
-v 4.973133 1.992779 0.533466
-v 4.991746 2.009819 0.523206
-v 4.935880 2.051665 0.572853
-v 4.935561 2.016016 0.585700
-v 4.788476 2.028047 0.608619
-v 4.751519 2.039658 0.634134
-v 4.991709 1.844295 0.520761
-v 5.011430 1.875569 0.463205
-v 5.001903 1.914398 0.486724
-v 4.982364 1.873300 0.536190
-v 4.918466 2.084725 0.532713
-v 4.881574 2.094571 0.539949
-v 4.744050 2.179337 0.556057
-v 4.837331 2.235678 0.479332
-v 4.739441 2.299169 0.369987
-v 4.636582 2.263383 0.471997
-v 5.075994 1.900999 0.443793
-v 5.095375 1.961238 0.401516
-v 5.067202 2.027704 0.422291
-v 5.057495 2.002751 0.451974
-v 4.101726 2.312318 1.438163
-v 4.046673 2.341349 1.452530
-v 4.082988 2.175805 1.450930
-v 4.111934 2.234814 1.399949
-v 4.129926 2.308770 1.402259
-v 4.150297 1.820575 0.917046
-v 4.094112 1.889281 0.578435
-v 4.245225 2.008532 0.772641
-v 4.159229 1.949902 0.923197
-v 4.127903 1.828359 1.090512
-v 4.137657 1.944837 1.061024
-v 4.152166 1.868775 1.225002
-v 4.143794 2.013720 1.201386
-v 4.103303 2.038565 1.363737
-v 4.123290 2.086854 1.295135
-v 4.112680 2.195089 1.366908
-f 4465 4466 4467
-f 4470 4471 4469
-f 4468 4469 4471
-f 4467 4472 4473
-f 4475 4476 4474
-f 4474 4476 4477
-f 4476 4475 4469
-f 4470 4478 4479
-f 4482 4483 4481
-f 4480 4481 4483
-f 4484 4485 4487
-f 4485 4486 4487
-f 4488 4489 4490
-f 4488 4490 4492
-f 4491 4492 4490
-f 4493 4494 4496
-f 4494 4495 4496
-f 4497 4493 4498
-f 4493 4496 4498
-f 4500 4499 4498
-f 4499 4497 4498
-f 4499 4500 4501
-f 4501 4500 4502
-f 4490 4501 4503
-f 4501 4502 4503
-f 4490 4503 4491
-v 5.096148 2.759720 0.774729
-v 4.863709 2.722151 0.936660
-v 4.854957 2.660227 0.924310
-f 4504 4505 4506
-v 4.076852 1.746601 0.527436
-v 4.148883 1.759918 0.573765
-v 4.094112 1.889281 0.578435
-v 4.059885 1.860460 0.470087
-v 4.380854 0.704574 -0.000130
-v 4.359048 0.700414 0.166651
-v 4.120842 0.627141 0.185461
-v 4.126565 0.642027 0.000000
-v 3.881998 1.764428 0.476337
-v 4.067576 1.572668 0.534997
-v 3.886058 1.550141 0.504830
-v 4.085564 1.288885 0.544406
-v 3.988510 1.297806 0.539537
-v 4.141189 1.008775 0.499342
-v 4.041657 1.039756 0.496922
-v 4.216374 0.852328 0.405873
-v 4.068249 0.798926 0.400813
-v 4.319799 0.731007 0.291212
-v 4.105198 0.672581 0.300001
-v 3.758215 2.206683 0.323051
-v 3.870548 2.292106 0.368964
-v 3.828001 2.352540 0.233341
-v 3.745669 2.266001 0.241930
-v 3.787342 2.396113 -0.001159
-v 3.716360 2.343387 0.000000
-v 3.727093 2.308406 0.150049
-v 3.922437 1.972461 0.483563
-v 3.814876 1.968416 0.443000
-v 3.823349 2.141733 0.428356
-f 4510 4507 4509
-f 4507 4508 4509
-f 4511 4512 4514
-f 4512 4513 4514
-f 4507 4510 4515
-f 4517 4516 4515
-f 4516 4507 4515
-f 4516 4517 4518
-f 4518 4517 4519
-f 4520 4518 4521
-f 4518 4519 4521
-f 4521 4523 4520
-f 4522 4520 4523
-f 4524 4522 4525
-f 4522 4523 4525
-f 4512 4524 4513
-f 4524 4525 4513
-f 4528 4529 4527
-f 4526 4527 4529
-f 4528 4530 4532
-f 4530 4531 4532
-f 4528 4532 4529
-f 4515 4510 4533
-f 4534 4515 4533
-f 4534 4533 4535
-f 4526 4534 4535
-f 4526 4535 4527
-v 5.096148 2.759720 0.774729
-v 4.829566 2.580797 0.821827
-v 4.821336 2.621498 0.789636
-v 4.856249 2.593812 0.867067
-f 4536 4537 4538
-f 4536 4539 4537
-v 4.094112 1.889281 0.578435
-v 4.232341 1.903079 0.534362
-v 4.245225 2.008532 0.772641
-v 1.700797 -2.794792 0.824250
-v 1.718315 -2.775468 0.921796
-v 1.678986 -2.513137 0.891745
-v 1.655948 -2.520927 0.844269
-v 1.705953 -3.006628 0.832630
-v 1.734568 -2.965876 0.986396
-v -0.972514 -1.822778 0.372649
-v -0.977375 -1.793126 0.498747
-v -1.108758 -1.770749 0.473033
-v -1.305099 -1.708460 0.484230
-v -1.266738 -1.691944 0.557922
-v -1.397474 -1.693815 0.570541
-v -1.406693 -1.697325 0.450399
-f 4540 4541 4542
-f 4543 4544 4546
-f 4544 4545 4546
-f 4548 4544 4547
-f 4543 4547 4544
-f 4552 4549 4551
-f 4549 4550 4551
-f 4555 4552 4554
-f 4552 4553 4554
-v -3.120907 -1.707924 0.431829
-v -2.941731 -1.787431 0.442574
-v -3.008323 -1.759271 0.655672
-v -3.139394 -1.687482 0.638546
-v -2.709403 -1.879947 0.508775
-v -2.699966 -1.850397 0.570070
-v -2.811581 -1.798210 0.712737
-v -3.697889 -0.951955 0.098793
-v -3.676450 -0.551317 0.077574
-v -3.699784 -0.759901 0.088664
-f 4557 4558 4556
-f 4556 4558 4559
-f 4557 4560 4558
-f 4560 4561 4558
-f 4561 4562 4558
-f 4563 4564 4565
-v -3.358510 1.810253 0.380095
-v -3.413372 1.871604 0.142309
-v -3.392806 1.769365 0.000000
-v -3.380836 1.819691 0.123273
-v -3.348274 1.767738 -0.000085
-v 4.148927 2.388726 1.376879
-v 4.101726 2.312318 1.438163
-v 4.129926 2.308770 1.402259
-v 4.149438 2.340550 1.353693
-v -2.964215 -1.978727 0.776572
-v -3.066022 -1.953125 0.719516
-v -3.008323 -1.759271 0.655672
-v -2.811581 -1.798210 0.712737
-v -3.211005 -1.850398 0.700723
-v -3.139394 -1.687482 0.638546
-v -3.357009 1.781675 0.071216
-v -3.357009 1.781675 -0.071216
-v -3.380836 1.819691 -0.123273
-f 4566 4567 4568
-f 4567 4569 4568
-f 4568 4569 4570
-f 4572 4573 4571
-f 4571 4573 4574
-f 4578 4575 4577
-f 4575 4576 4577
-f 4579 4580 4576
-f 4576 4580 4577
-f 4569 4581 4570
-f 4582 4583 4570
diff --git a/software/Print3r/models/cube.FCStd b/software/Print3r/models/cube.FCStd
deleted file mode 100644
index 51cea26c..00000000
Binary files a/software/Print3r/models/cube.FCStd and /dev/null differ
diff --git a/software/Print3r/models/cube.brep b/software/Print3r/models/cube.brep
deleted file mode 100644
index d0ed9767..00000000
--- a/software/Print3r/models/cube.brep
+++ /dev/null
@@ -1,286 +0,0 @@
-DBRep_DrawableShape
-
-CASCADE Topology V1, (c) Matra-Datavision
-Locations 1
-1
- 1 0 0 0
- 0 1 0 0
- 0 0 1 0
-Curve2ds 24
-1 0 0 1 0
-1 0 0 1 0
-1 20 0 0 -1
-1 0 0 0 1
-1 0 -20 1 0
-1 0 0 1 0
-1 0 0 0 -1
-1 0 0 0 1
-1 0 0 1 0
-1 0 20 1 0
-1 20 0 0 -1
-1 20 0 0 1
-1 0 -20 1 0
-1 0 20 1 0
-1 0 0 0 -1
-1 20 0 0 1
-1 0 0 0 1
-1 0 0 1 0
-1 20 0 0 1
-1 0 0 1 0
-1 0 0 0 1
-1 0 20 1 0
-1 20 0 0 1
-1 0 20 1 0
-Curves 12
-1 0 0 0 0 0 1
-1 0 0 20 -0 1 0
-1 0 20 0 0 0 1
-1 0 0 0 -0 1 0
-1 20 0 0 0 0 1
-1 20 0 20 -0 1 0
-1 20 20 0 0 0 1
-1 20 0 0 -0 1 0
-1 0 0 0 1 0 -0
-1 0 0 20 1 0 -0
-1 0 20 0 1 0 -0
-1 0 20 20 1 0 -0
-Polygon3D 0
-PolygonOnTriangulations 0
-Surfaces 6
-1 0 0 0 1 0 -0 0 0 1 0 -1 0
-1 0 0 0 -0 1 0 0 0 1 1 0 -0
-1 0 0 20 0 0 1 1 0 -0 -0 1 0
-1 0 20 0 -0 1 0 0 0 1 1 0 -0
-1 0 0 0 0 0 1 1 0 -0 -0 1 0
-1 20 0 0 1 0 -0 0 0 1 0 -1 0
-Triangulations 0
-
-TShapes 34
-Ve
-1e-07
-0 0 20
-0 0
-
-0101101
-*
-Ve
-1e-07
-0 0 0
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 1 0 0 20
-2 1 1 0 0 20
-2 2 2 0 0 20
-0
-
-0101000
--34 0 +33 0 *
-Ve
-1e-07
-0 20 20
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 2 0 0 20
-2 3 1 0 0 20
-2 4 3 0 0 20
-0
-
-0101000
--31 0 +34 0 *
-Ve
-1e-07
-0 20 0
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 3 0 0 20
-2 5 1 0 0 20
-2 6 4 0 0 20
-0
-
-0101000
--31 0 +29 0 *
-Ed
- 1e-07 1 1 0
-1 4 0 0 20
-2 7 1 0 0 20
-2 8 5 0 0 20
-0
-
-0101000
--29 0 +33 0 *
-Wi
-
-0101100
--32 0 -30 0 +28 0 +27 0 *
-Fa
-0 1e-07 1 0
-
-0111000
-+26 0 *
-Ve
-1e-07
-20 0 20
-0 0
-
-0101101
-*
-Ve
-1e-07
-20 0 0
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 5 0 0 20
-2 9 6 0 0 20
-2 10 2 0 0 20
-0
-
-0101000
--24 0 +23 0 *
-Ve
-1e-07
-20 20 20
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 6 0 0 20
-2 11 6 0 0 20
-2 12 3 0 0 20
-0
-
-0101000
--21 0 +24 0 *
-Ve
-1e-07
-20 20 0
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 7 0 0 20
-2 13 6 0 0 20
-2 14 4 0 0 20
-0
-
-0101000
--21 0 +19 0 *
-Ed
- 1e-07 1 1 0
-1 8 0 0 20
-2 15 6 0 0 20
-2 16 5 0 0 20
-0
-
-0101000
--19 0 +23 0 *
-Wi
-
-0101100
--22 0 -20 0 +18 0 +17 0 *
-Fa
-0 1e-07 6 0
-
-0111000
-+16 0 *
-Ed
- 1e-07 1 1 0
-1 9 0 0 20
-2 17 2 0 0 20
-2 18 5 0 0 20
-0
-
-0101000
--23 0 +33 0 *
-Ed
- 1e-07 1 1 0
-1 10 0 0 20
-2 19 2 0 0 20
-2 20 3 0 0 20
-0
-
-0101000
--24 0 +34 0 *
-Wi
-
-0101100
--14 0 -22 0 +13 0 +32 0 *
-Fa
-0 1e-07 2 0
-
-0111000
-+12 0 *
-Ed
- 1e-07 1 1 0
-1 11 0 0 20
-2 21 4 0 0 20
-2 22 5 0 0 20
-0
-
-0101000
--19 0 +29 0 *
-Ed
- 1e-07 1 1 0
-1 12 0 0 20
-2 23 4 0 0 20
-2 24 3 0 0 20
-0
-
-0101000
--21 0 +31 0 *
-Wi
-
-0101100
--10 0 -18 0 +9 0 +28 0 *
-Fa
-0 1e-07 4 0
-
-0111000
-+8 0 *
-Wi
-
-0101100
--27 0 -10 0 +17 0 +14 0 *
-Fa
-0 1e-07 5 0
-
-0111000
-+6 0 *
-Wi
-
-0101100
--30 0 -9 0 +20 0 +13 0 *
-Fa
-0 1e-07 3 0
-
-0111000
-+4 0 *
-Sh
-
-0101100
--25 0 +15 0 -11 0 +7 0 -5 0 +3 0 *
-So
-
-1100000
-+2 0 *
-
-+1 1
\ No newline at end of file
diff --git a/software/Print3r/models/cube.iges b/software/Print3r/models/cube.iges
deleted file mode 100644
index 83b1951b..00000000
--- a/software/Print3r/models/cube.iges
+++ /dev/null
@@ -1,153 +0,0 @@
- S0000001
-,,31HOpen CASCADE IGES processor 7.5,13HFilename.iges, G0000001
-16HOpen CASCADE 7.5,31HOpen CASCADE IGES processor 7.5,32,308,15,308,15,G0000002
-,1.,2,2HMM,1,0.01,15H20210816.062528,1E-07,20.,,,11,0, G0000003
-15H20210816.062528,; G0000004
- 402 1 0 0 0 0 0 000000000D0000001
- 402 0 0 1 1 0D0000002
- 144 2 0 0 0 0 0 000020000D0000003
- 144 0 0 1 0 0D0000004
- 108 3 0 0 0 0 0 000010000D0000005
- 108 0 0 1 0 0D0000006
- 142 4 0 0 0 0 0 000010500D0000007
- 142 0 0 1 0 0D0000008
- 102 5 0 0 0 0 0 000010000D0000009
- 102 0 0 1 0 0D0000010
- 110 6 0 0 0 0 0 000010000D0000011
- 110 0 0 1 0 0D0000012
- 110 7 0 0 0 0 0 000010000D0000013
- 110 0 0 1 0 0D0000014
- 110 8 0 0 0 0 0 000010000D0000015
- 110 0 0 1 0 0D0000016
- 110 9 0 0 0 0 0 000010000D0000017
- 110 0 0 1 0 0D0000018
- 144 10 0 0 0 0 0 000020000D0000019
- 144 0 0 1 0 0D0000020
- 108 11 0 0 0 0 0 000010000D0000021
- 108 0 0 1 0 0D0000022
- 142 12 0 0 0 0 0 000010500D0000023
- 142 0 0 1 0 0D0000024
- 102 13 0 0 0 0 0 000010000D0000025
- 102 0 0 1 0 0D0000026
- 110 14 0 0 0 0 0 000010000D0000027
- 110 0 0 1 0 0D0000028
- 110 15 0 0 0 0 0 000010000D0000029
- 110 0 0 1 0 0D0000030
- 110 16 0 0 0 0 0 000010000D0000031
- 110 0 0 1 0 0D0000032
- 110 17 0 0 0 0 0 000010000D0000033
- 110 0 0 1 0 0D0000034
- 144 18 0 0 0 0 0 000020000D0000035
- 144 0 0 1 0 0D0000036
- 108 19 0 0 0 0 0 000010000D0000037
- 108 0 0 1 0 0D0000038
- 142 20 0 0 0 0 0 000010500D0000039
- 142 0 0 1 0 0D0000040
- 102 21 0 0 0 0 0 000010000D0000041
- 102 0 0 1 0 0D0000042
- 110 22 0 0 0 0 0 000010000D0000043
- 110 0 0 1 0 0D0000044
- 110 23 0 0 0 0 0 000010000D0000045
- 110 0 0 1 0 0D0000046
- 110 24 0 0 0 0 0 000010000D0000047
- 110 0 0 1 0 0D0000048
- 110 25 0 0 0 0 0 000010000D0000049
- 110 0 0 1 0 0D0000050
- 144 26 0 0 0 0 0 000020000D0000051
- 144 0 0 1 0 0D0000052
- 108 27 0 0 0 0 0 000010000D0000053
- 108 0 0 1 0 0D0000054
- 142 28 0 0 0 0 0 000010500D0000055
- 142 0 0 1 0 0D0000056
- 102 29 0 0 0 0 0 000010000D0000057
- 102 0 0 1 0 0D0000058
- 110 30 0 0 0 0 0 000010000D0000059
- 110 0 0 1 0 0D0000060
- 110 31 0 0 0 0 0 000010000D0000061
- 110 0 0 1 0 0D0000062
- 110 32 0 0 0 0 0 000010000D0000063
- 110 0 0 1 0 0D0000064
- 110 33 0 0 0 0 0 000010000D0000065
- 110 0 0 1 0 0D0000066
- 144 34 0 0 0 0 0 000020000D0000067
- 144 0 0 1 0 0D0000068
- 108 35 0 0 0 0 0 000010000D0000069
- 108 0 0 1 0 0D0000070
- 142 36 0 0 0 0 0 000010500D0000071
- 142 0 0 1 0 0D0000072
- 102 37 0 0 0 0 0 000010000D0000073
- 102 0 0 1 0 0D0000074
- 110 38 0 0 0 0 0 000010000D0000075
- 110 0 0 1 0 0D0000076
- 110 39 0 0 0 0 0 000010000D0000077
- 110 0 0 1 0 0D0000078
- 110 40 0 0 0 0 0 000010000D0000079
- 110 0 0 1 0 0D0000080
- 110 41 0 0 0 0 0 000010000D0000081
- 110 0 0 1 0 0D0000082
- 144 42 0 0 0 0 0 000020000D0000083
- 144 0 0 1 0 0D0000084
- 108 43 0 0 0 0 0 000010000D0000085
- 108 0 0 1 0 0D0000086
- 142 44 0 0 0 0 0 000010500D0000087
- 142 0 0 1 0 0D0000088
- 102 45 0 0 0 0 0 000010000D0000089
- 102 0 0 1 0 0D0000090
- 110 46 0 0 0 0 0 000010000D0000091
- 110 0 0 1 0 0D0000092
- 110 47 0 0 0 0 0 000010000D0000093
- 110 0 0 1 0 0D0000094
- 110 48 0 0 0 0 0 000010000D0000095
- 110 0 0 1 0 0D0000096
- 110 49 0 0 0 0 0 000010000D0000097
- 110 0 0 1 0 0D0000098
-402,6,3,19,35,51,67,83; 0000001P0000001
-144,5,1,0,7; 0000003P0000002
-108,-1.,-0.,-0.,-0.,0,0.,0.,0.,0.; 0000005P0000003
-142,0,5,0,9,2; 0000007P0000004
-102,4,11,13,15,17; 0000009P0000005
-110,0.,20.,0.,0.,0.,0.; 0000011P0000006
-110,0.,0.,0.,0.,0.,20.; 0000013P0000007
-110,0.,0.,20.,0.,20.,20.; 0000015P0000008
-110,0.,20.,20.,0.,20.,0.; 0000017P0000009
-144,21,1,0,23; 0000019P0000010
-108,1.,0.,0.,20.,0,20.,0.,0.,0.; 0000021P0000011
-142,0,21,0,25,2; 0000023P0000012
-102,4,27,29,31,33; 0000025P0000013
-110,20.,0.,20.,20.,0.,0.; 0000027P0000014
-110,20.,0.,0.,20.,20.,0.; 0000029P0000015
-110,20.,20.,0.,20.,20.,20.; 0000031P0000016
-110,20.,20.,20.,20.,0.,20.; 0000033P0000017
-144,37,1,0,39; 0000035P0000018
-108,-0.,-1.,-0.,-0.,0,0.,0.,0.,0.; 0000037P0000019
-142,0,37,0,41,2; 0000039P0000020
-102,4,43,45,47,49; 0000041P0000021
-110,0.,0.,20.,0.,0.,0.; 0000043P0000022
-110,0.,0.,0.,20.,0.,0.; 0000045P0000023
-110,20.,0.,0.,20.,0.,20.; 0000047P0000024
-110,20.,0.,20.,0.,0.,20.; 0000049P0000025
-144,53,1,0,55; 0000051P0000026
-108,0.,1.,0.,20.,0,0.,20.,0.,0.; 0000053P0000027
-142,0,53,0,57,2; 0000055P0000028
-102,4,59,61,63,65; 0000057P0000029
-110,20.,20.,0.,0.,20.,0.; 0000059P0000030
-110,0.,20.,0.,0.,20.,20.; 0000061P0000031
-110,0.,20.,20.,20.,20.,20.; 0000063P0000032
-110,20.,20.,20.,20.,20.,0.; 0000065P0000033
-144,69,1,0,71; 0000067P0000034
-108,-0.,-0.,-1.,-0.,0,0.,0.,0.,0.; 0000069P0000035
-142,0,69,0,73,2; 0000071P0000036
-102,4,75,77,79,81; 0000073P0000037
-110,20.,0.,0.,0.,0.,0.; 0000075P0000038
-110,0.,0.,0.,0.,20.,0.; 0000077P0000039
-110,0.,20.,0.,20.,20.,0.; 0000079P0000040
-110,20.,20.,0.,20.,0.,0.; 0000081P0000041
-144,85,1,0,87; 0000083P0000042
-108,0.,0.,1.,20.,0,0.,0.,20.,0.; 0000085P0000043
-142,0,85,0,89,2; 0000087P0000044
-102,4,91,93,95,97; 0000089P0000045
-110,0.,20.,20.,0.,0.,20.; 0000091P0000046
-110,0.,0.,20.,20.,0.,20.; 0000093P0000047
-110,20.,0.,20.,20.,20.,20.; 0000095P0000048
-110,20.,20.,20.,0.,20.,20.; 0000097P0000049
-S 1G 4D 98P 49 T0000001
diff --git a/software/Print3r/models/cube.scad b/software/Print3r/models/cube.scad
deleted file mode 100644
index 438994b8..00000000
--- a/software/Print3r/models/cube.scad
+++ /dev/null
@@ -1 +0,0 @@
-cube(20);
diff --git a/software/Print3r/models/cube.step b/software/Print3r/models/cube.step
deleted file mode 100644
index 42fcca36..00000000
--- a/software/Print3r/models/cube.step
+++ /dev/null
@@ -1,415 +0,0 @@
-ISO-10303-21;
-HEADER;
-FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
-FILE_NAME('Open CASCADE Shape Model','2021-08-16T06:26:10',('FreeCAD'),(
- 'FreeCAD'),'Open CASCADE STEP processor 7.5','FreeCAD','Unknown');
-FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
-ENDSEC;
-DATA;
-#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
- 'automotive_design',2000,#2);
-#2 = APPLICATION_CONTEXT(
- 'core data for automotive mechanical design processes');
-#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
-#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
-#5 = PRODUCT_DEFINITION('design','',#6,#9);
-#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
-#7 = PRODUCT('Open CASCADE STEP translator 7.5 1',
- 'Open CASCADE STEP translator 7.5 1','',(#8));
-#8 = PRODUCT_CONTEXT('',#2,'mechanical');
-#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
-#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#345);
-#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
-#12 = CARTESIAN_POINT('',(0.,0.,0.));
-#13 = DIRECTION('',(0.,0.,1.));
-#14 = DIRECTION('',(1.,0.,-0.));
-#15 = MANIFOLD_SOLID_BREP('',#16);
-#16 = CLOSED_SHELL('',(#17,#137,#237,#284,#331,#338));
-#17 = ADVANCED_FACE('',(#18),#32,.F.);
-#18 = FACE_BOUND('',#19,.F.);
-#19 = EDGE_LOOP('',(#20,#55,#83,#111));
-#20 = ORIENTED_EDGE('',*,*,#21,.F.);
-#21 = EDGE_CURVE('',#22,#24,#26,.T.);
-#22 = VERTEX_POINT('',#23);
-#23 = CARTESIAN_POINT('',(0.,0.,0.));
-#24 = VERTEX_POINT('',#25);
-#25 = CARTESIAN_POINT('',(0.,0.,20.));
-#26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);
-#27 = LINE('',#28,#29);
-#28 = CARTESIAN_POINT('',(0.,0.,0.));
-#29 = VECTOR('',#30,1.);
-#30 = DIRECTION('',(0.,0.,1.));
-#31 = PCURVE('',#32,#37);
-#32 = PLANE('',#33);
-#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
-#34 = CARTESIAN_POINT('',(0.,0.,0.));
-#35 = DIRECTION('',(1.,0.,0.));
-#36 = DIRECTION('',(0.,0.,1.));
-#37 = DEFINITIONAL_REPRESENTATION('',(#38),#42);
-#38 = LINE('',#39,#40);
-#39 = CARTESIAN_POINT('',(0.,0.));
-#40 = VECTOR('',#41,1.);
-#41 = DIRECTION('',(1.,0.));
-#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#43 = PCURVE('',#44,#49);
-#44 = PLANE('',#45);
-#45 = AXIS2_PLACEMENT_3D('',#46,#47,#48);
-#46 = CARTESIAN_POINT('',(0.,0.,0.));
-#47 = DIRECTION('',(0.,1.,0.));
-#48 = DIRECTION('',(0.,0.,1.));
-#49 = DEFINITIONAL_REPRESENTATION('',(#50),#54);
-#50 = LINE('',#51,#52);
-#51 = CARTESIAN_POINT('',(0.,0.));
-#52 = VECTOR('',#53,1.);
-#53 = DIRECTION('',(1.,0.));
-#54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#55 = ORIENTED_EDGE('',*,*,#56,.T.);
-#56 = EDGE_CURVE('',#22,#57,#59,.T.);
-#57 = VERTEX_POINT('',#58);
-#58 = CARTESIAN_POINT('',(0.,20.,0.));
-#59 = SURFACE_CURVE('',#60,(#64,#71),.PCURVE_S1.);
-#60 = LINE('',#61,#62);
-#61 = CARTESIAN_POINT('',(0.,0.,0.));
-#62 = VECTOR('',#63,1.);
-#63 = DIRECTION('',(0.,1.,0.));
-#64 = PCURVE('',#32,#65);
-#65 = DEFINITIONAL_REPRESENTATION('',(#66),#70);
-#66 = LINE('',#67,#68);
-#67 = CARTESIAN_POINT('',(0.,0.));
-#68 = VECTOR('',#69,1.);
-#69 = DIRECTION('',(0.,-1.));
-#70 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#71 = PCURVE('',#72,#77);
-#72 = PLANE('',#73);
-#73 = AXIS2_PLACEMENT_3D('',#74,#75,#76);
-#74 = CARTESIAN_POINT('',(0.,0.,0.));
-#75 = DIRECTION('',(0.,0.,1.));
-#76 = DIRECTION('',(1.,0.,0.));
-#77 = DEFINITIONAL_REPRESENTATION('',(#78),#82);
-#78 = LINE('',#79,#80);
-#79 = CARTESIAN_POINT('',(0.,0.));
-#80 = VECTOR('',#81,1.);
-#81 = DIRECTION('',(0.,1.));
-#82 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#83 = ORIENTED_EDGE('',*,*,#84,.T.);
-#84 = EDGE_CURVE('',#57,#85,#87,.T.);
-#85 = VERTEX_POINT('',#86);
-#86 = CARTESIAN_POINT('',(0.,20.,20.));
-#87 = SURFACE_CURVE('',#88,(#92,#99),.PCURVE_S1.);
-#88 = LINE('',#89,#90);
-#89 = CARTESIAN_POINT('',(0.,20.,0.));
-#90 = VECTOR('',#91,1.);
-#91 = DIRECTION('',(0.,0.,1.));
-#92 = PCURVE('',#32,#93);
-#93 = DEFINITIONAL_REPRESENTATION('',(#94),#98);
-#94 = LINE('',#95,#96);
-#95 = CARTESIAN_POINT('',(0.,-20.));
-#96 = VECTOR('',#97,1.);
-#97 = DIRECTION('',(1.,0.));
-#98 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#99 = PCURVE('',#100,#105);
-#100 = PLANE('',#101);
-#101 = AXIS2_PLACEMENT_3D('',#102,#103,#104);
-#102 = CARTESIAN_POINT('',(0.,20.,0.));
-#103 = DIRECTION('',(0.,1.,0.));
-#104 = DIRECTION('',(0.,0.,1.));
-#105 = DEFINITIONAL_REPRESENTATION('',(#106),#110);
-#106 = LINE('',#107,#108);
-#107 = CARTESIAN_POINT('',(0.,0.));
-#108 = VECTOR('',#109,1.);
-#109 = DIRECTION('',(1.,0.));
-#110 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#111 = ORIENTED_EDGE('',*,*,#112,.F.);
-#112 = EDGE_CURVE('',#24,#85,#113,.T.);
-#113 = SURFACE_CURVE('',#114,(#118,#125),.PCURVE_S1.);
-#114 = LINE('',#115,#116);
-#115 = CARTESIAN_POINT('',(0.,0.,20.));
-#116 = VECTOR('',#117,1.);
-#117 = DIRECTION('',(0.,1.,0.));
-#118 = PCURVE('',#32,#119);
-#119 = DEFINITIONAL_REPRESENTATION('',(#120),#124);
-#120 = LINE('',#121,#122);
-#121 = CARTESIAN_POINT('',(20.,0.));
-#122 = VECTOR('',#123,1.);
-#123 = DIRECTION('',(0.,-1.));
-#124 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#125 = PCURVE('',#126,#131);
-#126 = PLANE('',#127);
-#127 = AXIS2_PLACEMENT_3D('',#128,#129,#130);
-#128 = CARTESIAN_POINT('',(0.,0.,20.));
-#129 = DIRECTION('',(0.,0.,1.));
-#130 = DIRECTION('',(1.,0.,0.));
-#131 = DEFINITIONAL_REPRESENTATION('',(#132),#136);
-#132 = LINE('',#133,#134);
-#133 = CARTESIAN_POINT('',(0.,0.));
-#134 = VECTOR('',#135,1.);
-#135 = DIRECTION('',(0.,1.));
-#136 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#137 = ADVANCED_FACE('',(#138),#152,.T.);
-#138 = FACE_BOUND('',#139,.T.);
-#139 = EDGE_LOOP('',(#140,#170,#193,#216));
-#140 = ORIENTED_EDGE('',*,*,#141,.F.);
-#141 = EDGE_CURVE('',#142,#144,#146,.T.);
-#142 = VERTEX_POINT('',#143);
-#143 = CARTESIAN_POINT('',(20.,0.,0.));
-#144 = VERTEX_POINT('',#145);
-#145 = CARTESIAN_POINT('',(20.,0.,20.));
-#146 = SURFACE_CURVE('',#147,(#151,#163),.PCURVE_S1.);
-#147 = LINE('',#148,#149);
-#148 = CARTESIAN_POINT('',(20.,0.,0.));
-#149 = VECTOR('',#150,1.);
-#150 = DIRECTION('',(0.,0.,1.));
-#151 = PCURVE('',#152,#157);
-#152 = PLANE('',#153);
-#153 = AXIS2_PLACEMENT_3D('',#154,#155,#156);
-#154 = CARTESIAN_POINT('',(20.,0.,0.));
-#155 = DIRECTION('',(1.,0.,0.));
-#156 = DIRECTION('',(0.,0.,1.));
-#157 = DEFINITIONAL_REPRESENTATION('',(#158),#162);
-#158 = LINE('',#159,#160);
-#159 = CARTESIAN_POINT('',(0.,0.));
-#160 = VECTOR('',#161,1.);
-#161 = DIRECTION('',(1.,0.));
-#162 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#163 = PCURVE('',#44,#164);
-#164 = DEFINITIONAL_REPRESENTATION('',(#165),#169);
-#165 = LINE('',#166,#167);
-#166 = CARTESIAN_POINT('',(0.,20.));
-#167 = VECTOR('',#168,1.);
-#168 = DIRECTION('',(1.,0.));
-#169 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#170 = ORIENTED_EDGE('',*,*,#171,.T.);
-#171 = EDGE_CURVE('',#142,#172,#174,.T.);
-#172 = VERTEX_POINT('',#173);
-#173 = CARTESIAN_POINT('',(20.,20.,0.));
-#174 = SURFACE_CURVE('',#175,(#179,#186),.PCURVE_S1.);
-#175 = LINE('',#176,#177);
-#176 = CARTESIAN_POINT('',(20.,0.,0.));
-#177 = VECTOR('',#178,1.);
-#178 = DIRECTION('',(0.,1.,0.));
-#179 = PCURVE('',#152,#180);
-#180 = DEFINITIONAL_REPRESENTATION('',(#181),#185);
-#181 = LINE('',#182,#183);
-#182 = CARTESIAN_POINT('',(0.,0.));
-#183 = VECTOR('',#184,1.);
-#184 = DIRECTION('',(0.,-1.));
-#185 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#186 = PCURVE('',#72,#187);
-#187 = DEFINITIONAL_REPRESENTATION('',(#188),#192);
-#188 = LINE('',#189,#190);
-#189 = CARTESIAN_POINT('',(20.,0.));
-#190 = VECTOR('',#191,1.);
-#191 = DIRECTION('',(0.,1.));
-#192 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#193 = ORIENTED_EDGE('',*,*,#194,.T.);
-#194 = EDGE_CURVE('',#172,#195,#197,.T.);
-#195 = VERTEX_POINT('',#196);
-#196 = CARTESIAN_POINT('',(20.,20.,20.));
-#197 = SURFACE_CURVE('',#198,(#202,#209),.PCURVE_S1.);
-#198 = LINE('',#199,#200);
-#199 = CARTESIAN_POINT('',(20.,20.,0.));
-#200 = VECTOR('',#201,1.);
-#201 = DIRECTION('',(0.,0.,1.));
-#202 = PCURVE('',#152,#203);
-#203 = DEFINITIONAL_REPRESENTATION('',(#204),#208);
-#204 = LINE('',#205,#206);
-#205 = CARTESIAN_POINT('',(0.,-20.));
-#206 = VECTOR('',#207,1.);
-#207 = DIRECTION('',(1.,0.));
-#208 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#209 = PCURVE('',#100,#210);
-#210 = DEFINITIONAL_REPRESENTATION('',(#211),#215);
-#211 = LINE('',#212,#213);
-#212 = CARTESIAN_POINT('',(0.,20.));
-#213 = VECTOR('',#214,1.);
-#214 = DIRECTION('',(1.,0.));
-#215 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#216 = ORIENTED_EDGE('',*,*,#217,.F.);
-#217 = EDGE_CURVE('',#144,#195,#218,.T.);
-#218 = SURFACE_CURVE('',#219,(#223,#230),.PCURVE_S1.);
-#219 = LINE('',#220,#221);
-#220 = CARTESIAN_POINT('',(20.,0.,20.));
-#221 = VECTOR('',#222,1.);
-#222 = DIRECTION('',(0.,1.,0.));
-#223 = PCURVE('',#152,#224);
-#224 = DEFINITIONAL_REPRESENTATION('',(#225),#229);
-#225 = LINE('',#226,#227);
-#226 = CARTESIAN_POINT('',(20.,0.));
-#227 = VECTOR('',#228,1.);
-#228 = DIRECTION('',(0.,-1.));
-#229 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#230 = PCURVE('',#126,#231);
-#231 = DEFINITIONAL_REPRESENTATION('',(#232),#236);
-#232 = LINE('',#233,#234);
-#233 = CARTESIAN_POINT('',(20.,0.));
-#234 = VECTOR('',#235,1.);
-#235 = DIRECTION('',(0.,1.));
-#236 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#237 = ADVANCED_FACE('',(#238),#44,.F.);
-#238 = FACE_BOUND('',#239,.F.);
-#239 = EDGE_LOOP('',(#240,#261,#262,#283));
-#240 = ORIENTED_EDGE('',*,*,#241,.F.);
-#241 = EDGE_CURVE('',#22,#142,#242,.T.);
-#242 = SURFACE_CURVE('',#243,(#247,#254),.PCURVE_S1.);
-#243 = LINE('',#244,#245);
-#244 = CARTESIAN_POINT('',(0.,0.,0.));
-#245 = VECTOR('',#246,1.);
-#246 = DIRECTION('',(1.,0.,0.));
-#247 = PCURVE('',#44,#248);
-#248 = DEFINITIONAL_REPRESENTATION('',(#249),#253);
-#249 = LINE('',#250,#251);
-#250 = CARTESIAN_POINT('',(0.,0.));
-#251 = VECTOR('',#252,1.);
-#252 = DIRECTION('',(0.,1.));
-#253 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#254 = PCURVE('',#72,#255);
-#255 = DEFINITIONAL_REPRESENTATION('',(#256),#260);
-#256 = LINE('',#257,#258);
-#257 = CARTESIAN_POINT('',(0.,0.));
-#258 = VECTOR('',#259,1.);
-#259 = DIRECTION('',(1.,0.));
-#260 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#261 = ORIENTED_EDGE('',*,*,#21,.T.);
-#262 = ORIENTED_EDGE('',*,*,#263,.T.);
-#263 = EDGE_CURVE('',#24,#144,#264,.T.);
-#264 = SURFACE_CURVE('',#265,(#269,#276),.PCURVE_S1.);
-#265 = LINE('',#266,#267);
-#266 = CARTESIAN_POINT('',(0.,0.,20.));
-#267 = VECTOR('',#268,1.);
-#268 = DIRECTION('',(1.,0.,0.));
-#269 = PCURVE('',#44,#270);
-#270 = DEFINITIONAL_REPRESENTATION('',(#271),#275);
-#271 = LINE('',#272,#273);
-#272 = CARTESIAN_POINT('',(20.,0.));
-#273 = VECTOR('',#274,1.);
-#274 = DIRECTION('',(0.,1.));
-#275 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#276 = PCURVE('',#126,#277);
-#277 = DEFINITIONAL_REPRESENTATION('',(#278),#282);
-#278 = LINE('',#279,#280);
-#279 = CARTESIAN_POINT('',(0.,0.));
-#280 = VECTOR('',#281,1.);
-#281 = DIRECTION('',(1.,0.));
-#282 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#283 = ORIENTED_EDGE('',*,*,#141,.F.);
-#284 = ADVANCED_FACE('',(#285),#100,.T.);
-#285 = FACE_BOUND('',#286,.T.);
-#286 = EDGE_LOOP('',(#287,#308,#309,#330));
-#287 = ORIENTED_EDGE('',*,*,#288,.F.);
-#288 = EDGE_CURVE('',#57,#172,#289,.T.);
-#289 = SURFACE_CURVE('',#290,(#294,#301),.PCURVE_S1.);
-#290 = LINE('',#291,#292);
-#291 = CARTESIAN_POINT('',(0.,20.,0.));
-#292 = VECTOR('',#293,1.);
-#293 = DIRECTION('',(1.,0.,0.));
-#294 = PCURVE('',#100,#295);
-#295 = DEFINITIONAL_REPRESENTATION('',(#296),#300);
-#296 = LINE('',#297,#298);
-#297 = CARTESIAN_POINT('',(0.,0.));
-#298 = VECTOR('',#299,1.);
-#299 = DIRECTION('',(0.,1.));
-#300 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#301 = PCURVE('',#72,#302);
-#302 = DEFINITIONAL_REPRESENTATION('',(#303),#307);
-#303 = LINE('',#304,#305);
-#304 = CARTESIAN_POINT('',(0.,20.));
-#305 = VECTOR('',#306,1.);
-#306 = DIRECTION('',(1.,0.));
-#307 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#308 = ORIENTED_EDGE('',*,*,#84,.T.);
-#309 = ORIENTED_EDGE('',*,*,#310,.T.);
-#310 = EDGE_CURVE('',#85,#195,#311,.T.);
-#311 = SURFACE_CURVE('',#312,(#316,#323),.PCURVE_S1.);
-#312 = LINE('',#313,#314);
-#313 = CARTESIAN_POINT('',(0.,20.,20.));
-#314 = VECTOR('',#315,1.);
-#315 = DIRECTION('',(1.,0.,0.));
-#316 = PCURVE('',#100,#317);
-#317 = DEFINITIONAL_REPRESENTATION('',(#318),#322);
-#318 = LINE('',#319,#320);
-#319 = CARTESIAN_POINT('',(20.,0.));
-#320 = VECTOR('',#321,1.);
-#321 = DIRECTION('',(0.,1.));
-#322 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#323 = PCURVE('',#126,#324);
-#324 = DEFINITIONAL_REPRESENTATION('',(#325),#329);
-#325 = LINE('',#326,#327);
-#326 = CARTESIAN_POINT('',(0.,20.));
-#327 = VECTOR('',#328,1.);
-#328 = DIRECTION('',(1.,0.));
-#329 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
-PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
- ) );
-#330 = ORIENTED_EDGE('',*,*,#194,.F.);
-#331 = ADVANCED_FACE('',(#332),#72,.F.);
-#332 = FACE_BOUND('',#333,.F.);
-#333 = EDGE_LOOP('',(#334,#335,#336,#337));
-#334 = ORIENTED_EDGE('',*,*,#56,.F.);
-#335 = ORIENTED_EDGE('',*,*,#241,.T.);
-#336 = ORIENTED_EDGE('',*,*,#171,.T.);
-#337 = ORIENTED_EDGE('',*,*,#288,.F.);
-#338 = ADVANCED_FACE('',(#339),#126,.T.);
-#339 = FACE_BOUND('',#340,.T.);
-#340 = EDGE_LOOP('',(#341,#342,#343,#344));
-#341 = ORIENTED_EDGE('',*,*,#112,.F.);
-#342 = ORIENTED_EDGE('',*,*,#263,.T.);
-#343 = ORIENTED_EDGE('',*,*,#217,.T.);
-#344 = ORIENTED_EDGE('',*,*,#310,.F.);
-#345 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
-GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#349)) GLOBAL_UNIT_ASSIGNED_CONTEXT
-((#346,#347,#348)) REPRESENTATION_CONTEXT('Context #1',
- '3D Context with UNIT and UNCERTAINTY') );
-#346 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
-#347 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
-#348 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
-#349 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#346,
- 'distance_accuracy_value','confusion accuracy');
-#350 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
-ENDSEC;
-END-ISO-10303-21;
diff --git a/software/Print3r/models/cube.stl b/software/Print3r/models/cube.stl
deleted file mode 100644
index 19ba57a9..00000000
--- a/software/Print3r/models/cube.stl
+++ /dev/null
@@ -1,86 +0,0 @@
-solid OpenSCAD_Model
- facet normal -0 0 1
- outer loop
- vertex 0 20 20
- vertex 20 0 20
- vertex 20 20 20
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 20 0 20
- vertex 0 20 20
- vertex 0 0 20
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 0 0
- vertex 20 20 0
- vertex 20 0 0
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 20 20 0
- vertex 0 0 0
- vertex 0 20 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 0 0 0
- vertex 20 0 20
- vertex 0 0 20
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 20 0 20
- vertex 0 0 0
- vertex 20 0 0
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 20 0 20
- vertex 20 20 0
- vertex 20 20 20
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 20 0
- vertex 20 0 20
- vertex 20 0 0
- endloop
- endfacet
- facet normal 0 1 -0
- outer loop
- vertex 20 20 0
- vertex 0 20 20
- vertex 20 20 20
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 0 20 20
- vertex 20 20 0
- vertex 0 20 0
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex 0 0 0
- vertex 0 20 20
- vertex 0 20 0
- endloop
- endfacet
- facet normal -1 -0 0
- outer loop
- vertex 0 20 20
- vertex 0 0 0
- vertex 0 0 20
- endloop
- endfacet
-endsolid OpenSCAD_Model
diff --git a/software/Print3r/models/cylinder.scad b/software/Print3r/models/cylinder.scad
deleted file mode 100644
index 3c07f301..00000000
--- a/software/Print3r/models/cylinder.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(d=10,h=10,$fn=1000);
diff --git a/software/Print3r/models/eggs minecraft-plain.3mf b/software/Print3r/models/eggs minecraft-plain.3mf
deleted file mode 100644
index fc737755..00000000
Binary files a/software/Print3r/models/eggs minecraft-plain.3mf and /dev/null differ
diff --git a/software/Print3r/models/example_01.amf b/software/Print3r/models/example_01.amf
deleted file mode 100644
index 9bec0565..00000000
--- a/software/Print3r/models/example_01.amf
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
- 0 0 0
- 1 0 0
- 0 1 0
- 1 1 0
- 0.5 0.5 1
-
-
- 2 1 0
- 0 1 4
- 4 1 2
- 0 4 2
-
-
- 2 3 1
- 1 3 4
- 4 3 2
- 4 2 1
-
-
-
-
diff --git a/software/Print3r/models/example_02.amf b/software/Print3r/models/example_02.amf
deleted file mode 100644
index 0127d825..00000000
--- a/software/Print3r/models/example_02.amf
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- Split Pyramid
- John Smith
-
-
-
- 0 0 0
- 1 0 0
- 0 1 0
- 1 1 0
- 0.5 0.5 1
-
-
- Hard side
- 2 1 0
- 0 1 4
- 4 1 2
- 0 4 2
-
-
- Soft side
- 2 3 1
- 1 3 4
- 4 3 2
- 4 2 1
-
-
-
-
- Hard material
- 0.1 0.1 0.1
-
-
- Soft material
- 0 0.9 0.9 0.5
-
-
diff --git a/software/Print3r/models/scad/washer.scad b/software/Print3r/models/scad/washer.scad
deleted file mode 100644
index 36daf7ee..00000000
--- a/software/Print3r/models/scad/washer.scad
+++ /dev/null
@@ -1,10 +0,0 @@
-module washer(d,d2,t) {
- d = d ? d : 5;
- d2 = d2 ? d2 : d*1.8;
- t = t ? t : 1;
- $fn = 200;
- difference() {
- cylinder(d=d2,h=t);
- cylinder(d=d+0.5,h=t);
- }
-}
diff --git a/software/Print3r/models/teapot.obj b/software/Print3r/models/teapot.obj
deleted file mode 100644
index c839837b..00000000
--- a/software/Print3r/models/teapot.obj
+++ /dev/null
@@ -1,9965 +0,0 @@
-v -3.000000 1.800000 0.000000
-v -2.991600 1.800000 -0.081000
-v -2.991600 1.800000 0.081000
-v -2.989450 1.666162 0.000000
-v -2.985000 1.921950 0.000000
-v -2.985000 1.921950 0.000000
-v -2.981175 1.667844 -0.081000
-v -2.981175 1.667844 0.081000
-v -2.976687 1.920243 -0.081000
-v -2.976687 1.920243 0.081000
-v -2.968800 1.800000 -0.144000
-v -2.968800 1.800000 0.144000
-v -2.958713 1.672406 -0.144000
-v -2.958713 1.672406 0.144000
-v -2.957600 1.534800 0.000000
-v -2.957600 1.534800 0.000000
-v -2.954122 1.915609 -0.144000
-v -2.954122 1.915609 0.144000
-v -2.949693 1.537790 -0.081000
-v -2.949693 1.537790 0.081000
-v -2.940000 2.019600 0.000000
-v -2.935200 1.800000 -0.189000
-v -2.935200 1.800000 0.189000
-v -2.931958 2.016526 0.081000
-v -2.931958 2.016526 -0.081000
-v -2.928230 1.545907 -0.144000
-v -2.928230 1.545907 0.144000
-v -2.925611 1.679131 -0.189000
-v -2.925611 1.679131 0.189000
-v -2.920870 1.908779 -0.189000
-v -2.920870 1.908779 0.189000
-v -2.910131 2.008181 -0.144000
-v -2.910131 2.008181 0.144000
-v -2.904150 1.406137 0.000000
-v -2.904150 1.406137 0.000000
-v -2.896846 1.410135 0.081000
-v -2.896846 1.410135 -0.081000
-v -2.896602 1.557869 -0.189000
-v -2.896602 1.557869 0.189000
-v -2.894400 1.800000 -0.216000
-v -2.894400 1.800000 0.216000
-v -2.885416 1.687296 -0.216000
-v -2.885416 1.687296 0.216000
-v -2.880491 1.900487 -0.216000
-v -2.880491 1.900487 0.216000
-v -2.877965 1.995883 -0.189000
-v -2.877965 1.995883 0.189000
-v -2.877022 1.420985 -0.144000
-v -2.877022 1.420985 0.144000
-v -2.865000 2.095650 0.000000
-v -2.858195 1.572394 0.216000
-v -2.858195 1.572394 -0.216000
-v -2.857432 2.091511 -0.081000
-v -2.857432 2.091511 0.081000
-v -2.850000 1.800000 -0.225000
-v -2.850000 1.800000 0.225000
-v -2.847806 1.436974 0.189000
-v -2.847806 1.436974 -0.189000
-v -2.841675 1.696181 0.225000
-v -2.841675 1.696181 -0.225000
-v -2.838906 1.980950 -0.216000
-v -2.838906 1.980950 0.216000
-v -2.836889 2.080276 -0.144000
-v -2.836889 2.080276 0.144000
-v -2.836550 1.891463 -0.225000
-v -2.836550 1.891463 0.225000
-v -2.828800 1.280400 0.000000
-v -2.822326 1.285171 -0.081000
-v -2.822326 1.285171 0.081000
-v -2.816400 1.588200 -0.225000
-v -2.816400 1.588200 0.225000
-v -2.812331 1.456390 0.216000
-v -2.812331 1.456390 -0.216000
-v -2.806615 2.063720 -0.189000
-v -2.806615 2.063720 0.189000
-v -2.805600 1.800000 -0.216000
-v -2.805600 1.800000 0.216000
-v -2.804755 1.298122 -0.144000
-v -2.804755 1.298122 0.144000
-v -2.797934 1.705067 -0.216000
-v -2.797934 1.705067 0.216000
-v -2.796400 1.964700 0.225000
-v -2.796400 1.964700 -0.225000
-v -2.792609 1.882438 -0.216000
-v -2.792609 1.882438 0.216000
-v -2.778861 1.317206 -0.189000
-v -2.778861 1.317206 0.189000
-v -2.774605 1.604006 0.216000
-v -2.774605 1.604006 -0.216000
-v -2.773725 1.477519 0.225000
-v -2.773725 1.477519 -0.225000
-v -2.769854 2.043616 -0.216000
-v -2.769854 2.043616 0.216000
-v -2.764800 1.800000 -0.189000
-v -2.764800 1.800000 0.189000
-v -2.760000 2.152800 0.000000
-v -2.760000 2.152800 0.000000
-v -2.757739 1.713232 -0.189000
-v -2.757739 1.713232 0.189000
-v -2.753894 1.948450 -0.216000
-v -2.753894 1.948450 0.216000
-v -2.753123 2.147861 -0.081000
-v -2.753123 2.147861 0.081000
-v -2.752230 1.874146 -0.189000
-v -2.752230 1.874146 0.189000
-v -2.747418 1.340381 -0.216000
-v -2.747418 1.340381 0.216000
-v -2.736198 1.618531 -0.189000
-v -2.736198 1.618531 0.189000
-v -2.735119 1.498648 0.216000
-v -2.735119 1.498648 -0.216000
-v -2.734458 2.134454 -0.144000
-v -2.734458 2.134454 0.144000
-v -2.731250 1.157813 0.000000
-v -2.731250 1.157813 0.000000
-v -2.731200 1.800000 -0.144000
-v -2.731200 1.800000 0.144000
-v -2.729850 2.021737 -0.225000
-v -2.729850 2.021737 0.225000
-v -2.725825 1.163194 0.081000
-v -2.725825 1.163194 -0.081000
-v -2.724637 1.719956 -0.144000
-v -2.724637 1.719956 0.144000
-v -2.718978 1.867316 -0.144000
-v -2.718978 1.867316 0.144000
-v -2.714835 1.933517 -0.189000
-v -2.714835 1.933517 0.189000
-v -2.713200 1.365600 -0.225000
-v -2.713200 1.365600 0.225000
-v -2.711100 1.177800 -0.144000
-v -2.711100 1.177800 0.144000
-v -2.708400 1.800000 -0.081000
-v -2.708400 1.800000 0.081000
-v -2.706950 2.114698 -0.189000
-v -2.706950 2.114698 0.189000
-v -2.704570 1.630493 -0.144000
-v -2.704570 1.630493 0.144000
-v -2.702175 1.724519 -0.081000
-v -2.702175 1.724519 0.081000
-v -2.700000 1.800000 0.000000
-v -2.699644 1.518063 0.189000
-v -2.699644 1.518063 -0.189000
-v -2.696413 1.862682 -0.081000
-v -2.696413 1.862682 0.081000
-v -2.693900 1.726200 0.000000
-v -2.689846 1.999859 -0.216000
-v -2.689846 1.999859 0.216000
-v -2.689400 1.199325 -0.189000
-v -2.689400 1.199325 0.189000
-v -2.688100 1.860975 0.000000
-v -2.688100 1.860975 0.000000
-v -2.683107 1.638610 -0.081000
-v -2.683107 1.638610 0.081000
-v -2.682669 1.921219 -0.144000
-v -2.682669 1.921219 0.144000
-v -2.678982 1.390819 -0.216000
-v -2.678982 1.390819 0.216000
-v -2.675200 1.641600 0.000000
-v -2.675200 1.641600 0.000000
-v -2.673549 2.090707 -0.216000
-v -2.673549 2.090707 0.216000
-v -2.670428 1.534053 -0.144000
-v -2.670428 1.534053 0.144000
-v -2.663050 1.225463 -0.216000
-v -2.663050 1.225463 0.216000
-v -2.660842 1.912874 0.081000
-v -2.660842 1.912874 -0.081000
-v -2.653085 1.979755 -0.189000
-v -2.653085 1.979755 0.189000
-v -2.652800 1.909800 0.000000
-v -2.652800 1.909800 0.000000
-v -2.650604 1.544903 0.081000
-v -2.650604 1.544903 -0.081000
-v -2.647539 1.413994 -0.189000
-v -2.647539 1.413994 0.189000
-v -2.643300 1.548900 0.000000
-v -2.637200 2.064600 -0.225000
-v -2.637200 2.064600 0.225000
-v -2.634375 1.253906 0.225000
-v -2.634375 1.253906 -0.225000
-v -2.625000 2.193750 0.000000
-v -2.622811 1.963199 -0.144000
-v -2.622811 1.963199 0.144000
-v -2.621645 1.433078 -0.144000
-v -2.621645 1.433078 0.144000
-v -2.619050 2.188238 -0.081000
-v -2.619050 2.188238 0.081000
-v -2.611200 1.038600 0.000000
-v -2.611200 1.038600 0.000000
-v -2.607034 1.044497 0.081000
-v -2.607034 1.044497 -0.081000
-v -2.605700 1.282350 -0.216000
-v -2.605700 1.282350 0.216000
-v -2.604074 1.446029 -0.081000
-v -2.604074 1.446029 0.081000
-v -2.602900 2.173275 -0.144000
-v -2.602900 2.173275 0.144000
-v -2.602268 1.951964 -0.081000
-v -2.602268 1.951964 0.081000
-v -2.600851 2.038493 -0.216000
-v -2.600851 2.038493 0.216000
-v -2.597600 1.450800 0.000000
-v -2.595725 1.060502 -0.144000
-v -2.595725 1.060502 0.144000
-v -2.594700 1.947825 0.000000
-v -2.579350 1.308488 -0.189000
-v -2.579350 1.308488 0.189000
-v -2.579100 2.151225 -0.189000
-v -2.579100 2.151225 0.189000
-v -2.579059 1.084090 -0.189000
-v -2.579059 1.084090 0.189000
-v -2.567450 2.014502 -0.189000
-v -2.567450 2.014502 0.189000
-v -2.558822 1.112731 0.216000
-v -2.558822 1.112731 -0.216000
-v -2.557650 1.330013 -0.144000
-v -2.557650 1.330013 0.144000
-v -2.550200 2.124450 -0.216000
-v -2.550200 2.124450 0.216000
-v -2.542925 1.344619 0.081000
-v -2.542925 1.344619 -0.081000
-v -2.539942 1.994746 -0.144000
-v -2.539942 1.994746 0.144000
-v -2.537500 1.350000 0.000000
-v -2.537500 1.350000 0.000000
-v -2.536800 1.143900 0.225000
-v -2.536800 1.143900 -0.225000
-v -2.521277 1.981339 -0.081000
-v -2.521277 1.981339 0.081000
-v -2.518750 2.095312 -0.225000
-v -2.518750 2.095312 0.225000
-v -2.514778 1.175069 0.216000
-v -2.514778 1.175069 -0.216000
-v -2.514400 1.976400 0.000000
-v -2.514400 1.976400 0.000000
-v -2.494541 1.203710 -0.189000
-v -2.494541 1.203710 0.189000
-v -2.487300 2.066175 -0.216000
-v -2.487300 2.066175 0.216000
-v -2.477875 1.227298 -0.144000
-v -2.477875 1.227298 0.144000
-v -2.468350 0.922987 0.000000
-v -2.466566 1.243303 0.081000
-v -2.466566 1.243303 -0.081000
-v -2.465644 0.929375 -0.081000
-v -2.465644 0.929375 0.081000
-v -2.462400 1.249200 0.000000
-v -2.462400 1.249200 0.000000
-v -2.460000 2.221200 0.000000
-v -2.460000 2.221200 0.000000
-v -2.458400 2.039400 -0.189000
-v -2.458400 2.039400 0.189000
-v -2.458298 0.946711 -0.144000
-v -2.458298 0.946711 0.144000
-v -2.455229 2.215303 -0.081000
-v -2.455229 2.215303 0.081000
-v -2.447474 0.972260 0.189000
-v -2.447474 0.972260 -0.189000
-v -2.442278 2.199298 -0.144000
-v -2.442278 2.199298 0.144000
-v -2.434600 2.017350 -0.144000
-v -2.434600 2.017350 0.144000
-v -2.434329 1.003283 -0.216000
-v -2.434329 1.003283 0.216000
-v -2.423194 2.175710 -0.189000
-v -2.423194 2.175710 0.189000
-v -2.420025 1.037044 -0.225000
-v -2.420025 1.037044 0.225000
-v -2.418450 2.002387 -0.081000
-v -2.418450 2.002388 0.081000
-v -2.412500 1.996875 0.000000
-v -2.412500 1.996875 0.000000
-v -2.405721 1.070804 -0.216000
-v -2.405721 1.070804 0.216000
-v -2.400019 2.147069 -0.216000
-v -2.400019 2.147069 0.216000
-v -2.392576 1.101828 -0.189000
-v -2.392576 1.101828 0.189000
-v -2.381752 1.127376 -0.144000
-v -2.381752 1.127376 0.144000
-v -2.374800 2.115900 -0.225000
-v -2.374800 2.115900 0.225000
-v -2.374406 1.144713 0.081000
-v -2.374406 1.144713 -0.081000
-v -2.371700 1.151100 0.000000
-v -2.349581 2.084731 -0.216000
-v -2.349581 2.084731 0.216000
-v -2.326406 2.056090 -0.189000
-v -2.326406 2.056090 0.189000
-v -2.307322 2.032502 -0.144000
-v -2.307322 2.032502 0.144000
-v -2.302400 0.811200 0.000000
-v -2.302400 0.811200 0.000000
-v -2.301347 0.818122 0.081000
-v -2.301347 0.818122 -0.081000
-v -2.298490 0.836909 0.144000
-v -2.298490 0.836909 -0.144000
-v -2.294371 2.016497 -0.081000
-v -2.294371 2.016497 0.081000
-v -2.294278 0.864595 0.189000
-v -2.294278 0.864595 -0.189000
-v -2.289600 2.010600 0.000000
-v -2.289600 2.010600 0.000000
-v -2.289165 0.898214 0.216000
-v -2.289165 0.898214 -0.216000
-v -2.283600 0.934800 0.225000
-v -2.283600 0.934800 -0.225000
-v -2.278035 0.971386 0.216000
-v -2.278035 0.971386 -0.216000
-v -2.272922 1.005005 0.189000
-v -2.272922 1.005005 -0.189000
-v -2.268710 1.032691 -0.144000
-v -2.268710 1.032691 0.144000
-v -2.265853 1.051478 0.081000
-v -2.265853 1.051478 -0.081000
-v -2.265000 2.237850 0.000000
-v -2.264800 1.058400 0.000000
-v -2.264800 1.058400 0.000000
-v -2.261676 2.231720 -0.081000
-v -2.261676 2.231720 0.081000
-v -2.252655 2.215082 -0.144000
-v -2.252655 2.215082 0.144000
-v -2.239361 2.190562 -0.189000
-v -2.239361 2.190562 0.189000
-v -2.223218 2.160788 -0.216000
-v -2.223218 2.160788 0.216000
-v -2.205650 2.128387 0.225000
-v -2.205650 2.128388 -0.225000
-v -2.188082 2.095987 -0.216000
-v -2.188082 2.095987 0.216000
-v -2.171939 2.066213 -0.189000
-v -2.171939 2.066213 0.189000
-v -2.158645 2.041693 -0.144000
-v -2.158645 2.041693 0.144000
-v -2.149624 2.025055 -0.081000
-v -2.149624 2.025055 0.081000
-v -2.146300 2.018925 0.000000
-v -2.141100 0.973800 0.000000
-v -2.141100 0.973800 0.000000
-v -2.140315 0.966231 0.081000
-v -2.140315 0.966231 -0.081000
-v -2.138183 0.945685 0.144000
-v -2.138183 0.945685 -0.144000
-v -2.135041 0.915407 0.189000
-v -2.135041 0.915407 -0.189000
-v -2.131226 0.878641 0.216000
-v -2.131226 0.878641 -0.216000
-v -2.127075 0.838631 0.225000
-v -2.127075 0.838631 -0.225000
-v -2.122924 0.798621 0.216000
-v -2.122924 0.798621 -0.216000
-v -2.119109 0.761855 0.189000
-v -2.119109 0.761855 -0.189000
-v -2.115967 0.731578 0.144000
-v -2.115967 0.731578 -0.144000
-v -2.113835 0.711032 0.081000
-v -2.113835 0.711032 -0.081000
-v -2.113050 0.703463 0.000000
-v -2.113050 0.703463 0.000000
-v -2.040000 2.246400 0.000000
-v -2.040000 2.246400 0.000000
-v -2.038410 2.240150 -0.081000
-v -2.038410 2.240150 0.081000
-v -2.034093 2.223187 -0.144000
-v -2.034093 2.223187 0.144000
-v -2.027731 2.198189 -0.189000
-v -2.027731 2.198189 0.189000
-v -2.020006 2.167834 0.216000
-v -2.020006 2.167834 -0.216000
-v -2.011600 2.134800 0.225000
-v -2.011600 2.134800 -0.225000
-v -2.003194 2.101766 0.216000
-v -2.003194 2.101766 -0.216000
-v -2.000000 0.900000 0.000000
-v -2.000000 0.900000 0.000000
-v -2.000000 0.900000 0.000000
-v -1.997200 0.891600 0.081000
-v -1.997200 0.891600 -0.081000
-v -1.995469 2.071411 -0.189000
-v -1.995469 2.071411 0.189000
-v -1.992750 1.037175 -0.000000
-v -1.992750 1.037175 0.000000
-v -1.989600 0.868800 0.144000
-v -1.989600 0.868800 -0.144000
-v -1.989107 2.046413 0.144000
-v -1.989107 2.046413 -0.144000
-v -1.986000 0.771675 0.000000
-v -1.986000 0.771675 0.000000
-v -1.984790 2.029450 -0.081000
-v -1.984790 2.029450 0.081000
-v -1.983200 2.023200 0.000000
-v -1.983200 2.023200 0.000000
-v -1.978400 0.835200 0.189000
-v -1.978400 0.835200 -0.189000
-v -1.974240 0.900000 -0.328160
-v -1.974240 0.900000 -0.328160
-v -1.974240 0.900000 0.328160
-v -1.972000 1.178400 -0.000000
-v -1.972000 1.178400 0.000000
-v -1.967083 1.037175 -0.326970
-v -1.967083 1.037175 0.326970
-v -1.964800 0.794400 0.216000
-v -1.964800 0.794400 -0.216000
-v -1.960420 0.771675 -0.325863
-v -1.960420 0.771675 0.325863
-v -1.950000 0.750000 -0.225000
-v -1.950000 0.750000 0.225000
-v -1.948000 0.656400 0.000000
-v -1.948000 0.656400 0.000000
-v -1.946601 1.178400 -0.323566
-v -1.946601 1.178400 0.323566
-v -1.939250 1.323225 0.000000
-v -1.939250 1.323225 0.000000
-v -1.935200 0.705600 0.216000
-v -1.935200 0.705600 -0.216000
-v -1.922910 0.656400 -0.319628
-v -1.922910 0.656400 0.319628
-v -1.921600 0.664800 0.189000
-v -1.921600 0.664800 -0.189000
-v -1.914272 1.323225 -0.318192
-v -1.914272 1.323225 0.318192
-v -1.910400 0.631200 0.144000
-v -1.910400 0.631200 -0.144000
-v -1.902800 0.608400 0.081000
-v -1.902800 0.608400 -0.081000
-v -1.900000 0.600000 0.000000
-v -1.900000 0.600000 0.000000
-v -1.899520 0.900000 -0.638080
-v -1.899520 0.900000 -0.638080
-v -1.899520 0.900000 0.638080
-v -1.899520 0.900000 0.638080
-v -1.896000 1.471200 0.000000
-v -1.896000 1.471200 0.000000
-v -1.892634 1.037175 -0.635767
-v -1.892634 1.037175 0.635767
-v -1.892000 0.553725 0.000000
-v -1.892000 0.553725 0.000000
-v -1.886223 0.771675 -0.633613
-v -1.886223 0.771675 0.633613
-v -1.872927 1.178400 -0.629147
-v -1.872927 1.178400 0.629147
-v -1.871580 1.471200 -0.311096
-v -1.871580 1.471200 0.311096
-v -1.867631 0.553725 -0.310439
-v -1.867631 0.553725 0.310439
-v -1.850132 0.656400 -0.621490
-v -1.850132 0.656400 0.621490
-v -1.843750 1.621875 0.000000
-v -1.843750 1.621875 0.000000
-v -1.841822 1.323225 -0.618698
-v -1.841822 1.323225 0.618698
-v -1.824000 0.463200 -0.000000
-v -1.824000 0.463200 0.000000
-v -1.820003 1.621875 -0.302522
-v -1.820003 1.621875 0.302523
-v -1.800900 2.024775 0.000000
-v -1.800745 1.471200 -0.604900
-v -1.800745 1.471200 0.604900
-v -1.800507 0.463200 -0.299282
-v -1.800507 0.463200 0.299282
-v -1.800455 2.031069 -0.081000
-v -1.800455 2.031069 0.081000
-v -1.799246 2.048152 -0.144000
-v -1.799246 2.048152 0.144000
-v -1.797466 2.073326 -0.189000
-v -1.797466 2.073326 0.189000
-v -1.796946 0.553725 -0.603624
-v -1.796946 0.553725 0.603624
-v -1.795303 2.103896 -0.216000
-v -1.795303 2.103896 0.216000
-v -1.792950 2.137163 -0.225000
-v -1.792950 2.137163 0.225000
-v -1.790597 2.170429 -0.216000
-v -1.790597 2.170429 0.216000
-v -1.788434 2.200999 -0.189000
-v -1.788434 2.200999 0.189000
-v -1.786654 2.226173 -0.144000
-v -1.786654 2.226173 0.144000
-v -1.785445 2.243256 -0.081000
-v -1.785445 2.243256 0.081000
-v -1.785000 2.249550 0.000000
-v -1.784000 1.774800 -0.000000
-v -1.784000 1.774800 0.000000
-v -1.779680 0.900000 -0.925920
-v -1.779680 0.900000 -0.925920
-v -1.779680 0.900000 0.925920
-v -1.779680 0.900000 0.925920
-v -1.773229 1.037175 -0.922564
-v -1.773229 1.037175 0.922564
-v -1.767222 0.771675 -0.919439
-v -1.767222 0.771675 0.919439
-v -1.761022 1.774800 -0.292719
-v -1.761022 1.774800 0.292719
-v -1.754764 1.178400 -0.912957
-v -1.754764 1.178400 0.912957
-v -1.751120 1.621875 -0.588230
-v -1.751120 1.621875 0.588230
-v -1.750000 0.384375 -0.000000
-v -1.750000 0.384375 0.000000
-v -1.733408 0.656400 -0.901846
-v -1.733408 0.656400 0.901846
-v -1.732362 0.463200 -0.581929
-v -1.732362 0.463200 0.581929
-v -1.727460 0.384375 -0.287140
-v -1.727460 0.384375 0.287140
-v -1.725622 1.323225 -0.897795
-v -1.725622 1.323225 0.897795
-v -1.718250 1.929525 -0.000000
-v -1.718250 1.929525 0.000000
-v -1.696119 1.929525 -0.281930
-v -1.696119 1.929525 0.281930
-v -1.694372 1.774800 -0.569167
-v -1.694372 1.774800 0.569167
-v -1.687137 1.471200 -0.877772
-v -1.687137 1.471200 0.877772
-v -1.683577 0.553725 -0.875920
-v -1.683577 0.553725 0.875920
-v -1.676000 0.316800 0.000000
-v -1.676000 0.316800 0.000000
-v -1.662080 0.384375 -0.558320
-v -1.662080 0.384375 0.558320
-v -1.654413 0.316800 -0.274998
-v -1.654413 0.316800 0.274998
-v -1.648000 2.085600 0.000000
-v -1.648000 2.085600 0.000000
-v -1.640643 1.621875 -0.853583
-v -1.640643 1.621875 0.853583
-v -1.631925 1.929525 -0.548190
-v -1.631925 1.929525 0.548190
-v -1.626774 2.085600 -0.270404
-v -1.626774 2.085600 0.270404
-v -1.623068 0.463200 -0.844439
-v -1.623068 0.463200 0.844439
-v -1.618560 0.900000 -1.187840
-v -1.618560 0.900000 -1.187840
-v -1.618560 0.900000 1.187840
-v -1.618560 0.900000 1.187840
-v -1.612693 1.037175 -1.183534
-v -1.612693 1.037175 1.183534
-v -1.608000 0.260025 -0.000000
-v -1.608000 0.260025 0.000000
-v -1.607230 0.771675 -1.179525
-v -1.607230 0.771675 1.179525
-v -1.600000 2.025000 0.000000
-v -1.597200 2.031300 -0.081000
-v -1.597200 2.031300 0.081000
-v -1.595900 1.178400 -1.171210
-v -1.595900 1.178400 1.171210
-v -1.591798 0.316800 -0.534711
-v -1.591798 0.316800 0.534711
-v -1.589600 2.048400 -0.144000
-v -1.589600 2.048400 0.144000
-v -1.587475 1.774800 -0.825921
-v -1.587475 1.774800 0.825921
-v -1.587289 0.260025 0.263841
-v -1.587289 0.260025 -0.263841
-v -1.578400 2.073600 -0.189000
-v -1.578400 2.073600 0.189000
-v -1.576477 0.656400 -1.156956
-v -1.576477 0.656400 1.156956
-v -1.574750 2.242575 0.000000
-v -1.574750 2.242575 0.000000
-v -1.569396 1.323225 -1.151759
-v -1.569396 1.323225 1.151759
-v -1.565204 2.085600 -0.525778
-v -1.565204 2.085600 0.525778
-v -1.564800 2.104200 -0.216000
-v -1.564800 2.104200 0.216000
-v -1.557220 0.384375 -0.810180
-v -1.557220 0.384375 0.810180
-v -1.554467 2.242575 -0.258385
-v -1.554467 2.242575 0.258385
-v -1.552000 0.213600 0.000000
-v -1.552000 0.213600 0.000000
-v -1.550000 2.137500 -0.225000
-v -1.550000 2.137500 0.225000
-v -1.535200 2.170800 -0.216000
-v -1.535200 2.170800 0.216000
-v -1.534395 1.471200 -1.126072
-v -1.534395 1.471200 1.126072
-v -1.532010 0.213600 0.254652
-v -1.532010 0.213600 -0.254652
-v -1.531158 0.553725 -1.123697
-v -1.531158 0.553725 1.123697
-v -1.528968 1.929525 -0.795481
-v -1.528968 1.929525 0.795481
-v -1.527214 0.260025 -0.513016
-v -1.527214 0.260025 0.513016
-v -1.521600 2.201400 -0.189000
-v -1.521600 2.201400 0.189000
-v -1.514000 0.177075 0.000000
-v -1.514000 0.177075 0.000000
-v -1.510400 2.226600 -0.144000
-v -1.510400 2.226600 0.144000
-v -1.502800 2.243700 -0.081000
-v -1.502800 2.243700 0.081000
-v -1.500000 2.400000 0.000000
-v -1.500000 0.150000 0.000000
-v -1.500000 2.250000 0.000000
-v -1.500000 2.400000 0.000000
-v -1.500000 0.150000 0.000000
-v -1.496475 0.127575 -0.000000
-v -1.496475 0.127575 0.000000
-v -1.495635 2.242575 -0.502408
-v -1.495635 2.242575 0.502408
-v -1.494500 0.177075 0.248417
-v -1.494500 0.177075 -0.248417
-v -1.492110 1.621875 -1.095040
-v -1.492110 1.621875 1.095040
-v -1.491372 0.316800 -0.775921
-v -1.491372 0.316800 0.775921
-v -1.480800 0.105600 0.000000
-v -1.480800 0.105600 -0.000000
-v -1.480680 2.400000 -0.246120
-v -1.480680 0.150000 0.246120
-v -1.480680 2.400000 0.246120
-v -1.480680 0.150000 -0.246120
-v -1.480680 0.150000 -0.246120
-v -1.480680 0.150000 0.246120
-v -1.480325 2.435437 0.000000
-v -1.480325 2.435437 0.000000
-v -1.477200 0.127575 0.245542
-v -1.477200 0.127575 -0.245542
-v -1.476127 0.463200 -1.083310
-v -1.476127 0.463200 1.083310
-v -1.474028 0.213600 0.495150
-v -1.474028 0.213600 -0.495150
-v -1.466456 2.085600 -0.762958
-v -1.466456 2.085600 0.762958
-v -1.461727 0.105600 -0.242970
-v -1.461727 0.105600 0.242970
-v -1.461258 2.435437 -0.242892
-v -1.461258 2.435437 0.242892
-v -1.459600 2.463000 0.000000
-v -1.459600 2.463000 0.000000
-v -1.445325 0.084525 0.000000
-v -1.445325 0.084525 0.000000
-v -1.443756 1.774800 -1.059553
-v -1.443756 1.774800 1.059553
-v -1.440800 2.463000 -0.239491
-v -1.440800 2.463000 0.239491
-v -1.439025 2.482687 0.000000
-v -1.437937 0.177075 0.483027
-v -1.437937 0.177075 -0.483027
-v -1.430863 0.260025 0.744440
-v -1.430863 0.260025 -0.744440
-v -1.426709 0.084525 -0.237149
-v -1.426709 0.084525 0.237149
-v -1.424640 2.400000 -0.478560
-v -1.424640 0.150000 -0.478560
-v -1.424640 0.150000 -0.478560
-v -1.424640 0.150000 0.478560
-v -1.424640 0.150000 0.478560
-v -1.424640 2.400000 0.478560
-v -1.421292 0.127575 0.477435
-v -1.421292 0.127575 -0.477435
-v -1.420490 2.482687 -0.236115
-v -1.420490 2.482687 0.236115
-v -1.420000 0.900000 -1.420000
-v -1.420000 0.900000 -1.420000
-v -1.420000 0.900000 1.420000
-v -1.420000 0.900000 1.420000
-v -1.419800 2.494500 0.000000
-v -1.419800 2.494500 0.000000
-v -1.416240 0.384375 -1.039360
-v -1.416240 0.384375 1.039360
-v -1.414853 1.037175 -1.414853
-v -1.414853 1.037175 1.414853
-v -1.410060 0.771675 -1.410060
-v -1.410060 0.771675 1.410060
-v -1.406405 0.105600 -0.472434
-v -1.406405 0.105600 0.472434
-v -1.405953 2.435437 -0.472283
-v -1.405953 2.435437 0.472283
-v -1.403125 2.498438 0.000000
-v -1.403125 2.498438 0.000000
-v -1.401513 2.494500 -0.232961
-v -1.401513 2.494500 0.232961
-v -1.401276 2.242575 -0.729046
-v -1.401276 2.242575 0.729046
-v -1.400120 1.178400 -1.400120
-v -1.400120 1.178400 1.400120
-v -1.400000 2.400000 0.000000
-v -1.400000 2.400000 0.000000
-v -1.390545 1.929525 -1.020503
-v -1.390545 1.929525 1.020503
-v -1.390200 2.494500 0.000000
-v -1.390200 2.494500 0.000000
-v -1.386270 2.463000 -0.465671
-v -1.386270 2.463000 0.465671
-v -1.385925 2.435437 0.000000
-v -1.385925 2.435437 0.000000
-v -1.385053 2.498438 -0.230225
-v -1.385053 2.498438 0.230225
-v -1.383080 0.656400 -1.383080
-v -1.383080 0.656400 1.383080
-v -1.382400 0.064800 -0.000000
-v -1.382400 0.064800 0.000000
-v -1.382225 2.482687 -0.000000
-v -1.382225 2.482687 0.000000
-v -1.381968 2.400000 -0.229712
-v -1.381968 2.400000 0.229712
-v -1.381032 0.213600 0.718514
-v -1.381032 0.213600 -0.718514
-v -1.380400 2.463000 0.000000
-v -1.380400 2.463000 0.000000
-v -1.376868 1.323225 -1.376867
-v -1.376867 1.323225 1.376868
-v -1.372712 0.084525 -0.461116
-v -1.372712 0.084525 0.461116
-v -1.372294 2.494500 -0.228104
-v -1.372294 2.494500 0.228104
-v -1.368074 2.435437 -0.227403
-v -1.368074 2.435437 0.227403
-v -1.366728 2.482687 -0.459107
-v -1.366728 2.482687 0.459107
-v -1.364595 0.064800 -0.226824
-v -1.364595 0.064800 0.226824
-v -1.364422 2.482687 -0.226795
-v -1.364422 2.482687 0.226795
-v -1.362620 2.463000 -0.226496
-v -1.362620 2.463000 0.226496
-v -1.356353 0.316800 -0.995410
-v -1.356353 0.316800 0.995410
-v -1.348469 2.494500 -0.452973
-v -1.348469 2.494500 0.452973
-v -1.347218 0.177075 0.700921
-v -1.347218 0.177075 -0.700921
-v -1.346160 1.471200 -1.346160
-v -1.346160 1.471200 1.346160
-v -1.343320 0.553725 -1.343320
-v -1.343320 0.553725 1.343320
-v -1.334760 2.400000 -0.694440
-v -1.334760 0.150000 -0.694440
-v -1.334760 0.150000 0.694440
-v -1.334760 0.150000 0.694440
-v -1.334760 2.400000 0.694440
-v -1.334760 0.150000 -0.694440
-v -1.333693 2.085600 -0.978780
-v -1.333693 2.085600 0.978780
-v -1.332632 2.498438 -0.447653
-v -1.332632 2.498438 0.447653
-v -1.331623 0.127575 0.692808
-v -1.331623 0.127575 -0.692808
-v -1.329664 2.400000 -0.446656
-v -1.329664 2.400000 0.446656
-v -1.320356 2.494500 -0.443529
-v -1.320356 2.494500 0.443529
-v -1.317675 0.105600 -0.685551
-v -1.317675 0.105600 0.685551
-v -1.317252 2.435437 -0.685331
-v -1.317252 2.435437 0.685331
-v -1.316296 2.435437 -0.442166
-v -1.316296 2.435437 0.442166
-v -1.312948 0.064800 0.441041
-v -1.312948 0.064800 -0.441041
-v -1.312782 2.482687 -0.440985
-v -1.312782 2.482687 0.440985
-v -1.311049 2.463000 -0.440403
-v -1.311049 2.463000 0.440403
-v -1.309063 1.621875 -1.309063
-v -1.309063 1.621875 1.309063
-v -1.301322 0.260025 0.955023
-v -1.301322 0.260025 -0.955023
-v -1.300000 2.400000 0.000000
-v -1.300000 2.400000 0.000000
-v -1.298810 2.463000 -0.675736
-v -1.298810 2.463000 0.675736
-v -1.295040 0.463200 -1.295040
-v -1.295040 0.463200 1.295040
-v -1.286108 0.084525 -0.669128
-v -1.286108 0.084525 0.669128
-v -1.284375 0.046875 0.000000
-v -1.284375 0.046875 0.000000
-v -1.283256 2.400000 -0.213304
-v -1.283256 2.400000 0.213304
-v -1.280502 2.482687 -0.666211
-v -1.280502 2.482687 0.666211
-v -1.274600 2.440800 0.000000
-v -1.274600 2.440800 0.000000
-v -1.274414 2.242575 -0.935276
-v -1.274414 2.242575 0.935276
-v -1.267832 0.046875 -0.210740
-v -1.267832 0.046875 0.210740
-v -1.266640 1.774800 -1.266640
-v -1.266640 1.774800 1.266640
-v -1.263395 2.494500 -0.657311
-v -1.263395 2.494500 0.657311
-v -1.258183 2.440800 0.209136
-v -1.258183 2.440800 -0.209136
-v -1.256003 0.213600 0.921764
-v -1.256003 0.213600 -0.921764
-v -1.248557 2.498438 -0.649591
-v -1.248557 2.498438 0.649591
-v -1.245776 2.400000 -0.648144
-v -1.245776 2.400000 0.648144
-v -1.242500 0.384375 -1.242500
-v -1.242500 0.384375 1.242500
-v -1.237056 2.494500 -0.643607
-v -1.237056 2.494500 0.643607
-v -1.234688 2.400000 -0.414752
-v -1.234688 2.400000 0.414752
-v -1.233252 2.435437 -0.641628
-v -1.233252 2.435437 0.641628
-v -1.230115 0.064800 -0.639996
-v -1.230115 0.064800 0.639996
-v -1.229959 2.482687 -0.639915
-v -1.229959 2.482687 0.639915
-v -1.228335 2.463000 -0.639070
-v -1.228335 2.463000 0.639070
-v -1.225250 0.177075 0.899195
-v -1.225250 0.177075 -0.899195
-v -1.219958 1.929525 1.219958
-v -1.219958 1.929525 -1.219958
-v -1.219848 0.046875 -0.409767
-v -1.219848 0.046875 0.409767
-v -1.213920 2.400000 -0.890880
-v -1.213920 0.150000 -0.890880
-v -1.213920 0.150000 -0.890880
-v -1.213920 0.150000 0.890880
-v -1.213920 0.150000 0.890880
-v -1.213920 2.400000 0.890880
-v -1.211067 0.127575 0.888786
-v -1.211067 0.127575 -0.888786
-v -1.210564 2.440800 0.406648
-v -1.210564 2.440800 -0.406648
-v -1.204800 2.474400 0.000000
-v -1.204800 2.474400 0.000000
-v -1.198382 0.105600 -0.879477
-v -1.198382 0.105600 0.879477
-v -1.197997 2.435437 -0.879195
-v -1.197997 2.435437 0.879195
-v -1.189960 0.316800 -1.189960
-v -1.189960 0.316800 1.189960
-v -1.189282 2.474400 -0.197684
-v -1.189282 2.474400 0.197684
-v -1.187840 0.900000 -1.618560
-v -1.187840 0.900000 -1.618560
-v -1.187840 0.900000 1.618560
-v -1.187840 0.900000 1.618560
-v -1.183534 1.037175 -1.612693
-v -1.183534 1.037175 1.612693
-v -1.181225 2.463000 -0.866886
-v -1.181225 2.463000 0.866886
-v -1.179525 0.771675 -1.607230
-v -1.179525 0.771675 1.607230
-v -1.171210 1.178400 -1.595900
-v -1.171210 1.178400 1.595900
-v -1.170080 2.085600 -1.170080
-v -1.170080 2.085600 1.170080
-v -1.169673 0.084525 -0.858407
-v -1.169673 0.084525 0.858407
-v -1.164574 2.482687 -0.854666
-v -1.164574 2.482687 0.854666
-v -1.156956 0.656400 -1.576477
-v -1.156956 0.656400 1.576477
-v -1.156792 2.400000 -0.601848
-v -1.156792 2.400000 0.601848
-v -1.151759 1.323225 -1.569396
-v -1.151759 1.323225 1.569396
-v -1.149016 2.494500 -0.843248
-v -1.149016 2.494500 0.843248
-v -1.144271 2.474400 -0.384379
-v -1.144271 2.474400 0.384379
-v -1.143600 0.031200 0.000000
-v -1.143600 0.031200 0.000000
-v -1.142888 0.046875 -0.594614
-v -1.142888 0.046875 0.594614
-v -1.141680 0.260025 1.141680
-v -1.141680 0.260025 -1.141680
-v -1.135521 2.498438 -0.833344
-v -1.135521 2.498438 0.833344
-v -1.134190 2.440800 0.590089
-v -1.134190 2.440800 -0.590089
-v -1.132992 2.400000 -0.831488
-v -1.132992 2.400000 0.831488
-v -1.128870 0.031200 -0.187642
-v -1.128870 0.031200 0.187642
-v -1.126072 1.471200 -1.534395
-v -1.126072 1.471200 1.534395
-v -1.125061 2.494500 -0.825668
-v -1.125061 2.494500 0.825668
-v -1.123697 0.553725 -1.531158
-v -1.123697 0.553725 1.531158
-v -1.121601 2.435437 -0.823129
-v -1.121601 2.435437 0.823129
-v -1.118749 0.064800 -0.821035
-v -1.118749 0.064800 0.821035
-v -1.118607 2.482687 -0.820931
-v -1.118607 2.482687 0.820931
-v -1.118073 2.242575 -1.118073
-v -1.118073 2.242575 1.118073
-v -1.117130 2.463000 -0.819847
-v -1.117130 2.463000 0.819847
-v -1.101920 0.213600 1.101920
-v -1.101920 0.213600 -1.101920
-v -1.100200 2.502600 0.000000
-v -1.100200 2.502600 0.000000
-v -1.095040 1.621875 -1.492110
-v -1.095040 1.621875 1.492110
-v -1.086146 0.031200 0.364854
-v -1.086146 0.031200 -0.364854
-v -1.086029 2.502600 0.180521
-v -1.086029 2.502600 -0.180521
-v -1.083310 0.463200 -1.476127
-v -1.083310 0.463200 1.476127
-v -1.074940 0.177075 -1.074940
-v -1.074940 0.177075 1.074940
-v -1.072079 2.474400 -0.557774
-v -1.072079 2.474400 0.557774
-v -1.065000 2.400000 -1.065000
-v -1.065000 0.150000 -1.065000
-v -1.065000 0.150000 1.065000
-v -1.065000 2.400000 1.065000
-v -1.062497 0.127575 1.062497
-v -1.062497 0.127575 -1.062497
-v -1.059553 1.774800 -1.443756
-v -1.059553 1.774800 1.443756
-v -1.052064 2.400000 -0.772096
-v -1.052064 2.400000 0.772096
-v -1.051368 0.105600 -1.051368
-v -1.051368 0.105600 1.051368
-v -1.051031 2.435437 -1.051031
-v -1.051031 2.435437 1.051031
-v -1.044926 2.502600 -0.351008
-v -1.044926 2.502600 0.351008
-v -1.039419 0.046875 -0.762816
-v -1.039419 0.046875 0.762816
-v -1.039360 0.384375 -1.416240
-v -1.039360 0.384375 1.416240
-v -1.036316 2.463000 -1.036316
-v -1.036316 2.463000 1.036316
-v -1.031508 2.440800 0.757010
-v -1.031508 2.440800 -0.757010
-v -1.026181 0.084525 -1.026181
-v -1.026181 0.084525 1.026181
-v -1.021708 2.482687 -1.021708
-v -1.021708 2.482687 1.021708
-v -1.020503 1.929525 -1.390545
-v -1.020503 1.929525 1.390545
-v -1.017621 0.031200 0.529441
-v -1.017621 0.031200 -0.529441
-v -1.008058 2.494500 -1.008058
-v -1.008058 2.494500 1.008058
-v -0.996219 2.498438 -0.996219
-v -0.996219 2.498438 0.996219
-v -0.995410 0.316800 -1.356353
-v -0.995410 0.316800 1.356353
-v -0.994000 2.400000 -0.994000
-v -0.994000 2.400000 0.994000
-v -0.987042 2.494500 -0.987042
-v -0.987042 2.494500 0.987042
-v -0.984007 2.435437 -0.984007
-v -0.984007 2.435437 0.984007
-v -0.981504 0.064800 0.981504
-v -0.981504 0.064800 -0.981504
-v -0.981380 2.482687 -0.981380
-v -0.981380 2.482687 0.981380
-v -0.980084 2.463000 -0.980084
-v -0.980084 2.463000 0.980084
-v -0.979002 2.502600 0.509349
-v -0.979002 2.502600 -0.509349
-v -0.978780 2.085600 -1.333693
-v -0.978780 2.085600 1.333693
-v -0.975021 2.474400 -0.715555
-v -0.975021 2.474400 0.715555
-v -0.970400 2.527200 0.000000
-v -0.970400 2.527200 0.000000
-v -0.957901 2.527200 -0.159223
-v -0.957901 2.527200 0.159223
-v -0.955023 0.260025 1.301322
-v -0.955023 0.260025 -1.301322
-v -0.952425 0.018225 -0.000000
-v -0.952425 0.018225 0.000000
-v -0.940158 0.018225 0.156274
-v -0.940158 0.018225 -0.156274
-v -0.935276 2.242575 -1.274414
-v -0.935276 2.242575 1.274414
-v -0.925920 0.900000 -1.779680
-v -0.925920 0.900000 1.779680
-v -0.925920 0.900000 1.779680
-v -0.925920 0.900000 -1.779680
-v -0.925493 0.031200 0.679207
-v -0.925493 0.031200 -0.679207
-v -0.923000 2.400000 -0.923000
-v -0.923000 2.400000 0.923000
-v -0.922564 1.037175 1.773229
-v -0.922564 1.037175 -1.773229
-v -0.921764 0.213600 1.256003
-v -0.921764 0.213600 -1.256003
-v -0.921647 2.527200 -0.309596
-v -0.921647 2.527200 0.309596
-v -0.919439 0.771675 -1.767222
-v -0.919439 0.771675 1.767222
-v -0.912957 1.178400 -1.754764
-v -0.912957 1.178400 1.754764
-v -0.911906 0.046875 -0.911906
-v -0.911906 0.046875 0.911906
-v -0.904966 2.440800 0.904966
-v -0.904966 2.440800 -0.904966
-v -0.904575 0.018225 0.303862
-v -0.904575 0.018225 -0.303862
-v -0.901846 0.656400 -1.733408
-v -0.901846 0.656400 1.733408
-v -0.899195 0.177075 1.225250
-v -0.899195 0.177075 -1.225250
-v -0.897795 1.323225 -1.725622
-v -0.897795 1.323225 1.725622
-v -0.890880 0.150000 -1.213920
-v -0.890880 0.150000 1.213920
-v -0.890880 2.400000 -1.213920
-v -0.890880 0.150000 -1.213920
-v -0.890880 0.150000 1.213920
-v -0.890880 2.400000 1.213920
-v -0.890370 2.502600 -0.653431
-v -0.890370 2.502600 0.653431
-v -0.888786 0.127575 1.211067
-v -0.888786 0.127575 -1.211067
-v -0.879477 0.105600 -1.198382
-v -0.879477 0.105600 1.198382
-v -0.879195 2.435437 -1.197997
-v -0.879195 2.435437 1.197997
-v -0.877772 1.471200 -1.687137
-v -0.877772 1.471200 1.687137
-v -0.875920 0.553725 -1.683577
-v -0.875920 0.553725 1.683577
-v -0.866886 2.463000 -1.181225
-v -0.866886 2.463000 1.181225
-v -0.863501 2.527200 -0.449256
-v -0.863501 2.527200 0.449256
-v -0.858407 0.084525 -1.169673
-v -0.858407 0.084525 1.169673
-v -0.855408 2.474400 -0.855408
-v -0.855408 2.474400 0.855408
-v -0.854666 2.482687 -1.164574
-v -0.854666 2.482687 1.164574
-v -0.853583 1.621875 -1.640643
-v -0.853583 1.621875 1.640643
-v -0.847506 0.018225 -0.440935
-v -0.847506 0.018225 0.440935
-v -0.844439 0.463200 1.623068
-v -0.844439 0.463200 -1.623068
-v -0.843248 2.494500 -1.149016
-v -0.843248 2.494500 1.149016
-v -0.833344 2.498438 -1.135521
-v -0.833344 2.498438 1.135521
-v -0.831488 2.400000 -1.132992
-v -0.831488 2.400000 1.132992
-v -0.825921 1.774800 1.587475
-v -0.825921 1.774800 -1.587475
-v -0.825668 2.494500 -1.125061
-v -0.825668 2.494500 1.125061
-v -0.825000 2.550000 0.000000
-v -0.825000 2.550000 0.000000
-v -0.823129 2.435437 -1.121601
-v -0.823129 2.435437 1.121601
-v -0.821035 0.064800 1.118749
-v -0.821035 0.064800 -1.118749
-v -0.820931 2.482687 1.118607
-v -0.820931 2.482687 -1.118607
-v -0.819847 2.463000 -1.117130
-v -0.819847 2.463000 1.117130
-v -0.814374 2.550000 -0.135366
-v -0.814374 2.550000 0.135366
-v -0.811956 0.031200 0.811956
-v -0.811956 0.031200 -0.811956
-v -0.810180 0.384375 1.557220
-v -0.810180 0.384375 -1.557220
-v -0.795481 1.929525 1.528968
-v -0.795481 1.929525 -1.528968
-v -0.785325 2.527200 -0.576340
-v -0.785325 2.527200 0.576340
-v -0.783552 2.550000 -0.263208
-v -0.783552 2.550000 0.263208
-v -0.781142 2.502600 -0.781142
-v -0.781142 2.502600 0.781142
-v -0.775921 0.316800 -1.491372
-v -0.775921 0.316800 1.491372
-v -0.772096 2.400000 -1.052064
-v -0.772096 2.400000 1.052064
-v -0.770779 0.018225 0.565664
-v -0.770779 0.018225 -0.565664
-v -0.762958 2.085600 -1.466456
-v -0.762958 2.085600 1.466456
-v -0.762816 0.046875 -1.039419
-v -0.762816 0.046875 1.039419
-v -0.757010 2.440800 1.031508
-v -0.757010 2.440800 -1.031508
-v -0.744440 0.260025 1.430863
-v -0.744440 0.260025 -1.430863
-v -0.734118 2.550000 -0.381942
-v -0.734118 2.550000 0.381942
-v -0.729046 2.242575 -1.401276
-v -0.729046 2.242575 1.401276
-v -0.718514 0.213600 1.381032
-v -0.718514 0.213600 -1.381032
-v -0.715555 2.474400 -0.975021
-v -0.715555 2.474400 0.975021
-v -0.703200 0.008400 0.000000
-v -0.700921 0.177075 1.347218
-v -0.700921 0.177075 -1.347218
-v -0.694440 0.150000 -1.334760
-v -0.694440 0.150000 1.334760
-v -0.694440 2.400000 1.334760
-v -0.694440 0.150000 1.334760
-v -0.694440 2.400000 -1.334760
-v -0.694440 0.150000 -1.334760
-v -0.694143 0.008400 -0.115381
-v -0.694143 0.008400 0.115381
-v -0.692808 0.127575 1.331623
-v -0.692808 0.127575 -1.331623
-v -0.688984 2.527200 -0.688984
-v -0.688984 2.527200 0.688984
-v -0.685551 0.105600 -1.317675
-v -0.685551 0.105600 1.317675
-v -0.685331 2.435437 -1.317252
-v -0.685331 2.435437 1.317252
-v -0.679207 0.031200 -0.925493
-v -0.679207 0.031200 0.925493
-v -0.676222 0.018225 0.676222
-v -0.676222 0.018225 -0.676222
-v -0.675736 2.463000 -1.298810
-v -0.675736 2.463000 1.298810
-v -0.673600 2.572800 0.000000
-v -0.673600 2.572800 0.000000
-v -0.669128 0.084525 -1.286108
-v -0.669128 0.084525 1.286108
-v -0.667871 0.008400 -0.224349
-v -0.667871 0.008400 0.224349
-v -0.667656 2.550000 -0.489984
-v -0.667656 2.550000 0.489984
-v -0.666211 2.482687 1.280502
-v -0.666211 2.482687 -1.280502
-v -0.664924 2.572800 -0.110524
-v -0.664924 2.572800 0.110524
-v -0.657311 2.494500 -1.263395
-v -0.657311 2.494500 1.263395
-v -0.653431 2.502600 -0.890370
-v -0.653431 2.502600 0.890370
-v -0.649591 2.498438 -1.248557
-v -0.649591 2.498438 1.248557
-v -0.648144 2.400000 -1.245776
-v -0.648144 2.400000 1.245776
-v -0.643607 2.494500 -1.237056
-v -0.643607 2.494500 1.237056
-v -0.641628 2.435437 -1.233252
-v -0.641628 2.435437 1.233252
-v -0.639996 0.064800 -1.230115
-v -0.639996 0.064800 1.230115
-v -0.639915 2.482687 1.229959
-v -0.639915 2.482687 -1.229959
-v -0.639758 2.572800 -0.214905
-v -0.639758 2.572800 0.214905
-v -0.639070 2.463000 -1.228335
-v -0.639070 2.463000 1.228335
-v -0.638080 0.900000 -1.899520
-v -0.638080 0.900000 -1.899520
-v -0.638080 0.900000 1.899520
-v -0.638080 0.900000 1.899520
-v -0.635767 1.037175 -1.892634
-v -0.635767 1.037175 1.892634
-v -0.633613 0.771675 -1.886223
-v -0.633613 0.771675 1.886223
-v -0.629147 1.178400 -1.872927
-v -0.629147 1.178400 1.872927
-v -0.625735 0.008400 0.325553
-v -0.625735 0.008400 -0.325553
-v -0.621490 0.656400 -1.850132
-v -0.621490 0.656400 1.850132
-v -0.618698 1.323225 -1.841822
-v -0.618698 1.323225 1.841822
-v -0.604900 1.471200 -1.800745
-v -0.604900 1.471200 1.800745
-v -0.603624 0.553725 -1.796946
-v -0.603624 0.553725 1.796946
-v -0.601848 2.400000 -1.156792
-v -0.601848 2.400000 1.156792
-v -0.599396 2.572800 -0.311850
-v -0.599396 2.572800 0.311850
-v -0.594614 0.046875 -1.142888
-v -0.594614 0.046875 1.142888
-v -0.590089 2.440800 1.134190
-v -0.590089 2.440800 -1.134190
-v -0.588230 1.621875 -1.751120
-v -0.588230 1.621875 1.751120
-v -0.585750 2.550000 -0.585750
-v -0.585750 2.550000 0.585750
-v -0.581929 0.463200 -1.732362
-v -0.581929 0.463200 1.732362
-v -0.576340 2.527200 -0.785325
-v -0.576340 2.527200 0.785325
-v -0.569167 1.774800 -1.694372
-v -0.569167 1.774800 1.694372
-v -0.569086 0.008400 -0.417645
-v -0.569086 0.008400 0.417645
-v -0.565664 0.018225 0.770779
-v -0.565664 0.018225 -0.770779
-v -0.558320 0.384375 -1.662080
-v -0.558320 0.384375 1.662080
-v -0.557774 2.474400 -1.072079
-v -0.557774 2.474400 1.072079
-v -0.548190 1.929525 -1.631925
-v -0.548190 1.929525 1.631925
-v -0.545131 2.572800 -0.400065
-v -0.545131 2.572800 0.400065
-v -0.534711 0.316800 -1.591798
-v -0.534711 0.316800 1.591798
-v -0.529441 0.031200 -1.017621
-v -0.529441 0.031200 1.017621
-v -0.525800 2.597400 0.000000
-v -0.525800 2.597400 0.000000
-v -0.525778 2.085600 -1.565204
-v -0.525778 2.085600 1.565204
-v -0.519028 2.597400 0.086273
-v -0.519028 2.597400 -0.086273
-v -0.513016 0.260025 -1.527214
-v -0.513016 0.260025 1.527214
-v -0.509349 2.502600 0.979002
-v -0.509349 2.502600 -0.979002
-v -0.502408 2.242575 -1.495635
-v -0.502408 2.242575 1.495635
-v -0.499384 2.597400 -0.167751
-v -0.499384 2.597400 0.167751
-v -0.499272 0.008400 -0.499272
-v -0.499272 0.008400 0.499272
-v -0.495150 0.213600 -1.474028
-v -0.495150 0.213600 1.474028
-v -0.489984 2.550000 -0.667656
-v -0.489984 2.550000 0.667656
-v -0.483027 0.177075 -1.437937
-v -0.483027 0.177075 1.437937
-v -0.478560 0.150000 1.424640
-v -0.478560 2.400000 -1.424640
-v -0.478560 0.150000 -1.424640
-v -0.478560 0.150000 -1.424640
-v -0.478560 0.150000 1.424640
-v -0.478560 2.400000 1.424640
-v -0.478256 2.572800 -0.478256
-v -0.478256 2.572800 0.478256
-v -0.477435 0.127575 1.421292
-v -0.477435 0.127575 -1.421292
-v -0.472434 0.105600 1.406405
-v -0.472434 0.105600 -1.406405
-v -0.472283 2.435437 -1.405953
-v -0.472283 2.435437 1.405953
-v -0.467878 2.597400 -0.243424
-v -0.467878 2.597400 0.243424
-v -0.465671 2.463000 -1.386270
-v -0.465671 2.463000 1.386270
-v -0.461116 0.084525 1.372712
-v -0.461116 0.084525 -1.372712
-v -0.459107 2.482687 -1.366728
-v -0.459107 2.482687 1.366728
-v -0.452973 2.494500 -1.348469
-v -0.452973 2.494500 1.348469
-v -0.449256 2.527200 -0.863501
-v -0.449256 2.527200 0.863501
-v -0.447653 2.498438 -1.332632
-v -0.447653 2.498438 1.332632
-v -0.446656 2.400000 -1.329664
-v -0.446656 2.400000 1.329664
-v -0.443529 2.494500 -1.320356
-v -0.443529 2.494500 1.320356
-v -0.442166 2.435437 -1.316296
-v -0.442166 2.435437 1.316296
-v -0.441041 0.064800 1.312948
-v -0.441041 0.064800 -1.312948
-v -0.440985 2.482687 -1.312782
-v -0.440985 2.482687 1.312782
-v -0.440935 0.018225 0.847506
-v -0.440935 0.018225 -0.847506
-v -0.440403 2.463000 -1.311049
-v -0.440403 2.463000 1.311049
-v -0.425519 2.597400 0.312283
-v -0.425519 2.597400 -0.312283
-v -0.417645 0.008400 -0.569086
-v -0.417645 0.008400 0.569086
-v -0.414752 2.400000 -1.234688
-v -0.414752 2.400000 1.234688
-v -0.409767 0.046875 1.219848
-v -0.409767 0.046875 -1.219848
-v -0.406648 2.440800 -1.210564
-v -0.406648 2.440800 1.210564
-v -0.400065 2.572800 -0.545131
-v -0.400065 2.572800 0.545131
-v -0.391200 2.625600 0.000000
-v -0.391200 2.625600 0.000000
-v -0.388275 0.002175 -0.000000
-v -0.388275 0.002175 0.000000
-v -0.386161 2.625600 -0.064188
-v -0.386161 2.625600 0.064188
-v -0.384379 2.474400 -1.144271
-v -0.384379 2.474400 1.144271
-v -0.383274 0.002175 -0.063708
-v -0.383274 0.002175 0.063708
-v -0.381942 2.550000 -0.734118
-v -0.381942 2.550000 0.734118
-v -0.373318 2.597400 -0.373318
-v -0.373318 2.597400 0.373318
-v -0.371546 2.625600 -0.124808
-v -0.371546 2.625600 0.124808
-v -0.368768 0.002175 -0.123875
-v -0.368768 0.002175 0.123875
-v -0.364854 0.031200 1.086146
-v -0.364854 0.031200 -1.086146
-v -0.358400 3.034800 0.000000
-v -0.358400 3.034800 0.000000
-v -0.358200 3.081150 0.000000
-v -0.358200 3.081150 0.000000
-v -0.353807 3.034800 -0.059016
-v -0.353807 3.034800 0.059016
-v -0.353610 3.081150 -0.058988
-v -0.353610 3.081150 0.058988
-v -0.351008 2.502600 -1.044926
-v -0.351008 2.502600 1.044926
-v -0.348105 2.625600 -0.181110
-v -0.348105 2.625600 0.181110
-v -0.345503 0.002175 -0.179756
-v -0.345503 0.002175 0.179756
-v -0.340477 3.034800 -0.114676
-v -0.340477 3.034800 0.114676
-v -0.340289 3.081150 -0.114619
-v -0.340289 3.081150 0.114619
-v -0.328160 0.900000 -1.974240
-v -0.328160 0.900000 1.974240
-v -0.328160 0.900000 1.974240
-v -0.326970 1.037175 -1.967083
-v -0.326970 1.037175 1.967083
-v -0.325863 0.771675 -1.960420
-v -0.325863 0.771675 1.960420
-v -0.325553 0.008400 -0.625735
-v -0.325553 0.008400 0.625735
-v -0.325000 2.981250 0.000000
-v -0.325000 2.981250 0.000000
-v -0.323566 1.178400 -1.946601
-v -0.323566 1.178400 1.946601
-v -0.320834 2.981250 -0.053508
-v -0.320834 2.981250 0.053508
-v -0.319628 0.656400 -1.922910
-v -0.319628 0.656400 1.922910
-v -0.319082 3.034800 -0.166306
-v -0.319082 3.034800 0.166306
-v -0.318907 3.081150 -0.166221
-v -0.318907 3.081150 0.166221
-v -0.318192 1.323225 -1.914272
-v -0.318192 1.323225 1.914272
-v -0.316590 2.625600 -0.232342
-v -0.316590 2.625600 0.232342
-v -0.314223 0.002175 -0.230604
-v -0.314223 0.002175 0.230604
-v -0.312283 2.597400 -0.425519
-v -0.312283 2.597400 0.425519
-v -0.311850 2.572800 -0.599396
-v -0.311850 2.572800 0.599396
-v -0.311096 1.471200 -1.871580
-v -0.311096 1.471200 1.871580
-v -0.310439 0.553725 -1.867631
-v -0.310439 0.553725 1.867631
-v -0.309596 2.527200 -0.921647
-v -0.309596 2.527200 0.921647
-v -0.308800 3.117600 0.000000
-v -0.308800 3.117600 0.000000
-v -0.308744 2.981250 -0.103976
-v -0.308744 2.981250 0.103976
-v -0.304843 3.117600 -0.050855
-v -0.304843 3.117600 0.050855
-v -0.303862 0.018225 0.904575
-v -0.303862 0.018225 -0.904575
-v -0.302523 1.621875 -1.820003
-v -0.302522 1.621875 1.820003
-v -0.299282 0.463200 -1.800507
-v -0.299282 0.463200 1.800507
-v -0.293360 3.117600 -0.098814
-v -0.293360 3.117600 0.098814
-v -0.292719 1.774800 -1.761022
-v -0.292719 1.774800 1.761022
-v -0.290295 3.034800 -0.213234
-v -0.290295 3.034800 0.213234
-v -0.290138 3.081150 -0.213123
-v -0.290138 3.081150 0.213123
-v -0.289340 2.981250 -0.150793
-v -0.289340 2.981250 0.150793
-v -0.287140 0.384375 -1.727460
-v -0.287140 0.384375 1.727460
-v -0.281930 1.929525 1.696119
-v -0.281930 1.929525 -1.696119
-v -0.279400 2.659200 0.000000
-v -0.277752 2.625600 -0.277752
-v -0.277752 2.625600 0.277752
-v -0.275801 2.659200 -0.045844
-v -0.275801 2.659200 0.045844
-v -0.275675 0.002175 -0.275675
-v -0.275675 0.002175 0.275675
-v -0.274998 0.316800 -1.654413
-v -0.274998 0.316800 1.654413
-v -0.274928 3.117600 -0.143301
-v -0.274928 3.117600 0.143301
-v -0.273600 2.923200 0.000000
-v -0.273600 2.923200 0.000000
-v -0.270404 2.085600 -1.626774
-v -0.270404 2.085600 1.626774
-v -0.270092 2.923200 -0.045032
-v -0.270092 2.923200 0.045032
-v -0.265363 2.659200 -0.089140
-v -0.265363 2.659200 0.089140
-v -0.263841 0.260025 1.587289
-v -0.263841 0.260025 -1.587289
-v -0.263232 2.981250 -0.193348
-v -0.263232 2.981250 0.193348
-v -0.263208 2.550000 -0.783552
-v -0.263208 2.550000 0.783552
-v -0.259910 2.923200 -0.087511
-v -0.259910 2.923200 0.087511
-v -0.258385 2.242575 -1.554467
-v -0.258385 2.242575 1.554467
-v -0.254788 3.034800 -0.254788
-v -0.254788 3.034800 0.254788
-v -0.254653 3.081150 -0.254653
-v -0.254653 3.081150 0.254653
-v -0.254652 0.213600 -1.532010
-v -0.254652 0.213600 1.532010
-v -0.250127 3.117600 -0.183734
-v -0.250127 3.117600 0.183734
-v -0.248621 2.659200 0.129351
-v -0.248621 2.659200 -0.129351
-v -0.248417 0.177075 -1.494500
-v -0.248417 0.177075 1.494500
-v -0.246120 0.150000 1.480680
-v -0.246120 2.400000 -1.480680
-v -0.246120 0.150000 -1.480680
-v -0.246120 0.150000 -1.480680
-v -0.246120 0.150000 1.480680
-v -0.246120 2.400000 1.480680
-v -0.245542 0.127575 1.477200
-v -0.245542 0.127575 -1.477200
-v -0.243569 2.923200 -0.126920
-v -0.243569 2.923200 0.126920
-v -0.243424 2.597400 0.467878
-v -0.243424 2.597400 -0.467878
-v -0.242970 0.105600 1.461727
-v -0.242970 0.105600 -1.461727
-v -0.242892 2.435437 -1.461258
-v -0.242892 2.435437 1.461258
-v -0.239491 2.463000 -1.440800
-v -0.239491 2.463000 1.440800
-v -0.237149 0.084525 1.426709
-v -0.237149 0.084525 -1.426709
-v -0.236115 2.482687 -1.420490
-v -0.236115 2.482687 1.420490
-v -0.232961 2.494500 -1.401513
-v -0.232961 2.494500 1.401513
-v -0.232342 2.625600 -0.316590
-v -0.232342 2.625600 0.316590
-v -0.231031 2.981250 -0.231031
-v -0.231031 2.981250 0.231031
-v -0.230604 0.002175 -0.314223
-v -0.230604 0.002175 0.314223
-v -0.230225 2.498438 -1.385053
-v -0.230225 2.498438 1.385053
-v -0.229712 2.400000 -1.381968
-v -0.229712 2.400000 1.381968
-v -0.228104 2.494500 -1.372294
-v -0.228104 2.494500 1.372294
-v -0.227403 2.435437 -1.368074
-v -0.227403 2.435437 1.368074
-v -0.226824 0.064800 1.364595
-v -0.226824 0.064800 -1.364595
-v -0.226795 2.482687 1.364422
-v -0.226795 2.482687 -1.364422
-v -0.226496 2.463000 -1.362620
-v -0.226496 2.463000 1.362620
-v -0.226113 2.659200 -0.165941
-v -0.226113 2.659200 0.165941
-v -0.224349 0.008400 0.667871
-v -0.224349 0.008400 -0.667871
-v -0.221585 2.923200 -0.162745
-v -0.221585 2.923200 0.162745
-v -0.219800 2.863350 0.000000
-v -0.219800 2.863350 0.000000
-v -0.219536 3.117600 -0.219536
-v -0.219536 3.117600 0.219536
-v -0.216979 2.863350 0.036157
-v -0.216979 2.863350 -0.036157
-v -0.214905 2.572800 -0.639758
-v -0.214905 2.572800 0.639758
-v -0.213304 2.400000 -1.283256
-v -0.213304 2.400000 1.283256
-v -0.213234 3.034800 -0.290295
-v -0.213234 3.034800 0.290295
-v -0.213123 3.081150 -0.290138
-v -0.213123 3.081150 0.290138
-v -0.210740 0.046875 -1.267832
-v -0.210740 0.046875 1.267832
-v -0.209136 2.440800 -1.258183
-v -0.209136 2.440800 1.258183
-v -0.208794 2.863350 0.070270
-v -0.208794 2.863350 -0.070270
-v -0.200000 2.700000 0.000000
-v -0.200000 2.700000 0.000000
-v -0.200000 2.700000 0.000000
-v -0.200000 2.700000 0.000000
-v -0.198374 2.659200 -0.198374
-v -0.198374 2.659200 0.198374
-v -0.197684 2.474400 -1.189282
-v -0.197684 2.474400 1.189282
-v -0.197424 2.700000 -0.032816
-v -0.197424 2.700000 0.032816
-v -0.197424 2.700000 0.032816
-v -0.197424 2.700000 -0.032816
-v -0.195658 2.863350 -0.101925
-v -0.195658 2.863350 0.101925
-v -0.194600 3.141450 0.000000
-v -0.194600 3.141450 0.000000
-v -0.194472 2.923200 -0.194472
-v -0.194472 2.923200 0.194472
-v -0.193348 2.981250 -0.263232
-v -0.193348 2.981250 0.263232
-v -0.192107 3.141450 -0.032048
-v -0.192107 3.141450 0.032048
-v -0.189952 2.700000 -0.063808
-v -0.189952 2.700000 0.063808
-v -0.189952 2.700000 0.063808
-v -0.189952 2.700000 -0.063808
-v -0.187642 0.031200 1.128870
-v -0.187642 0.031200 -1.128870
-v -0.184870 3.141450 -0.062272
-v -0.184870 3.141450 0.062272
-v -0.183734 3.117600 -0.250127
-v -0.183734 3.117600 0.250127
-v -0.181110 2.625600 0.348105
-v -0.181110 2.625600 -0.348105
-v -0.180521 2.502600 -1.086029
-v -0.180521 2.502600 1.086029
-v -0.179756 0.002175 -0.345503
-v -0.179756 0.002175 0.345503
-v -0.179200 2.804400 0.000000
-v -0.179200 2.804400 0.000000
-v -0.177989 2.863350 -0.130707
-v -0.177989 2.863350 0.130707
-v -0.177968 2.700000 -0.092592
-v -0.177968 2.700000 0.092592
-v -0.177968 2.700000 0.092592
-v -0.177968 2.700000 -0.092592
-v -0.176897 2.804400 0.029450
-v -0.176897 2.804400 -0.029450
-v -0.173255 3.141450 -0.090306
-v -0.173255 3.141450 0.090306
-v -0.170215 2.804400 0.057246
-v -0.170215 2.804400 -0.057246
-v -0.167751 2.597400 -0.499384
-v -0.167751 2.597400 0.499384
-v -0.167400 2.749050 0.000000
-v -0.167400 2.749050 0.000000
-v -0.166306 3.034800 -0.319082
-v -0.166306 3.034800 0.319082
-v -0.166221 3.081150 0.318907
-v -0.166221 3.081150 -0.318907
-v -0.165941 2.659200 -0.226113
-v -0.165941 2.659200 0.226113
-v -0.165245 2.749050 0.027480
-v -0.165245 2.749050 -0.027480
-v -0.162745 2.923200 -0.221585
-v -0.162745 2.923200 0.221585
-v -0.161856 2.700000 -0.118784
-v -0.161856 2.700000 0.118784
-v -0.161856 2.700000 0.118784
-v -0.161856 2.700000 -0.118784
-v -0.159496 2.804400 0.083047
-v -0.159496 2.804400 -0.083047
-v -0.159223 2.527200 -0.957901
-v -0.159223 2.527200 0.957901
-v -0.158995 2.749050 0.053428
-v -0.158995 2.749050 -0.053428
-v -0.157626 3.141450 -0.115787
-v -0.157626 3.141450 0.115787
-v -0.156274 0.018225 0.940158
-v -0.156274 0.018225 -0.940158
-v -0.156200 2.863350 -0.156200
-v -0.156200 2.863350 0.156200
-v -0.150793 2.981250 -0.289340
-v -0.150793 2.981250 0.289340
-v -0.148969 2.749050 0.077523
-v -0.148969 2.749050 -0.077523
-v -0.145078 2.804400 0.106513
-v -0.145078 2.804400 -0.106513
-v -0.143301 3.117600 -0.274928
-v -0.143301 3.117600 0.274928
-v -0.142000 2.700000 -0.142000
-v -0.142000 2.700000 0.142000
-v -0.142000 2.700000 0.142000
-v -0.142000 2.700000 -0.142000
-v -0.138348 3.141450 -0.138348
-v -0.138348 3.141450 0.138348
-v -0.135489 2.749050 0.099446
-v -0.135489 2.749050 -0.099446
-v -0.135366 2.550000 -0.814374
-v -0.135366 2.550000 0.814374
-v -0.130707 2.863350 -0.177989
-v -0.130707 2.863350 0.177989
-v -0.129351 2.659200 0.248621
-v -0.129351 2.659200 -0.248621
-v -0.127304 2.804400 0.127304
-v -0.127304 2.804400 -0.127304
-v -0.126920 2.923200 -0.243569
-v -0.126920 2.923200 0.243569
-v -0.124808 2.625600 -0.371546
-v -0.124808 2.625600 0.371546
-v -0.123875 0.002175 0.368768
-v -0.123875 0.002175 -0.368768
-v -0.118874 2.749050 0.118874
-v -0.118874 2.749050 -0.118874
-v -0.118784 2.700000 -0.161856
-v -0.118784 2.700000 0.161856
-v -0.118784 2.700000 0.161856
-v -0.118784 2.700000 -0.161856
-v -0.115787 3.141450 -0.157626
-v -0.115787 3.141450 0.157626
-v -0.115381 0.008400 0.694143
-v -0.115381 0.008400 -0.694143
-v -0.114676 3.034800 -0.340477
-v -0.114676 3.034800 0.340477
-v -0.114619 3.081150 -0.340289
-v -0.114619 3.081150 0.340289
-v -0.110524 2.572800 -0.664924
-v -0.110524 2.572800 0.664924
-v -0.106513 2.804400 -0.145078
-v -0.106513 2.804400 0.145078
-v -0.103976 2.981250 -0.308744
-v -0.103976 2.981250 0.308744
-v -0.101925 2.863350 -0.195658
-v -0.101925 2.863350 0.195658
-v -0.099446 2.749050 0.135489
-v -0.099446 2.749050 -0.135489
-v -0.098814 3.117600 -0.293360
-v -0.098814 3.117600 0.293360
-v -0.092592 2.700000 -0.177968
-v -0.092592 2.700000 0.177968
-v -0.092592 2.700000 -0.177968
-v -0.092592 2.700000 0.177968
-v -0.090306 3.141450 -0.173255
-v -0.090306 3.141450 0.173255
-v -0.089140 2.659200 -0.265363
-v -0.089140 2.659200 0.265363
-v -0.087511 2.923200 -0.259910
-v -0.087511 2.923200 0.259910
-v -0.086273 2.597400 -0.519028
-v -0.086273 2.597400 0.519028
-v -0.083047 2.804400 -0.159496
-v -0.083047 2.804400 0.159496
-v -0.077523 2.749050 -0.148969
-v -0.077523 2.749050 0.148969
-v -0.070270 2.863350 -0.208794
-v -0.070270 2.863350 0.208794
-v -0.064188 2.625600 -0.386161
-v -0.064188 2.625600 0.386161
-v -0.063808 2.700000 -0.189952
-v -0.063808 2.700000 0.189952
-v -0.063808 2.700000 -0.189952
-v -0.063808 2.700000 0.189952
-v -0.063708 0.002175 0.383274
-v -0.063708 0.002175 -0.383274
-v -0.062272 3.141450 -0.184870
-v -0.062272 3.141450 0.184870
-v -0.059016 3.034800 -0.353807
-v -0.059016 3.034800 0.353807
-v -0.058988 3.081150 -0.353610
-v -0.058988 3.081150 0.353610
-v -0.057246 2.804400 -0.170215
-v -0.057246 2.804400 0.170215
-v -0.053508 2.981250 -0.320834
-v -0.053508 2.981250 0.320834
-v -0.053428 2.749050 -0.158995
-v -0.053428 2.749050 0.158995
-v -0.050855 3.117600 -0.304843
-v -0.050855 3.117600 0.304843
-v -0.045844 2.659200 -0.275801
-v -0.045844 2.659200 0.275801
-v -0.045032 2.923200 -0.270092
-v -0.045032 2.923200 0.270092
-v -0.036157 2.863350 -0.216979
-v -0.036157 2.863350 0.216979
-v -0.032816 2.700000 -0.197424
-v -0.032816 2.700000 0.197424
-v -0.032816 2.700000 -0.197424
-v -0.032816 2.700000 0.197424
-v -0.032048 3.141450 -0.192107
-v -0.032048 3.141450 0.192107
-v -0.029450 2.804400 -0.176897
-v -0.029450 2.804400 0.176897
-v -0.027480 2.749050 -0.165245
-v -0.027480 2.749050 0.165245
-v -0.000000 0.260025 1.608000
-v -0.000000 1.929525 1.718250
-v -0.000000 2.085600 -1.648000
-v -0.000000 0.656400 -1.948000
-v -0.000000 0.771675 -1.986000
-v -0.000000 2.482687 1.382225
-v -0.000000 2.700000 -0.200000
-v -0.000000 0.127575 1.496475
-v -0.000000 2.474400 -1.204800
-v -0.000000 2.749050 -0.167400
-v -0.000000 0.018225 0.952425
-v -0.000000 0.046875 -1.284375
-v -0.000000 0.064800 1.382400
-v -0.000000 0.384375 1.750000
-v -0.000000 0.463200 1.824000
-v -0.000000 0.553725 -1.892000
-v -0.000000 1.037175 1.992750
-v -0.000000 1.178400 1.972000
-v -0.000000 1.323225 -1.939250
-v -0.000000 1.621875 -1.843750
-v -0.000000 1.774800 1.784000
-v -0.000000 2.400000 -1.300000
-v -0.000000 2.435437 -1.480325
-v -0.000000 2.435437 -1.385925
-v -0.000000 2.463000 -1.459600
-v -0.000000 2.463000 -1.380400
-v -0.000000 2.494500 -1.390200
-v -0.000000 2.502600 -1.100200
-v -0.000000 2.804400 -0.179200
-v -0.000000 2.863350 -0.219800
-v -0.000000 2.572800 -0.673600
-v -0.000000 0.105600 1.480800
-v -0.000000 0.177075 -1.514000
-v -0.000000 2.494500 -1.419800
-v -0.000000 2.527200 -0.970400
-v -0.000000 2.923200 -0.273600
-v -0.000000 3.117600 -0.308800
-v -0.000000 2.597400 -0.525800
-v -0.000000 2.700000 -0.200000
-v -0.000000 2.981250 -0.325000
-v -0.000000 3.141450 -0.194600
-v -0.000000 0.002175 0.388275
-v -0.000000 3.081150 -0.358200
-v 0.000000 0.000000 0.000000
-v 0.000000 0.002175 -0.388275
-v 0.000000 0.002175 0.388275
-v 0.000000 0.008400 -0.703200
-v 0.000000 0.008400 0.703200
-v 0.000000 0.018225 -0.952425
-v 0.000000 0.018225 0.952425
-v 0.000000 0.031200 -1.143600
-v 0.000000 0.031200 -1.143600
-v 0.000000 0.031200 1.143600
-v 0.000000 0.031200 1.143600
-v 0.000000 0.046875 -1.284375
-v 0.000000 0.046875 1.284375
-v 0.000000 0.064800 -1.382400
-v 0.000000 0.064800 1.382400
-v 0.000000 0.084525 -1.445325
-v 0.000000 0.084525 -1.445325
-v 0.000000 0.084525 1.445325
-v 0.000000 0.084525 1.445325
-v 0.000000 0.105600 -1.480800
-v 0.000000 0.105600 1.480800
-v 0.000000 0.127575 -1.496475
-v 0.000000 0.127575 1.496475
-v 0.000000 0.150000 -1.500000
-v 0.000000 0.150000 -1.500000
-v 0.000000 0.150000 1.500000
-v 0.000000 0.150000 1.500000
-v 0.000000 0.177075 -1.514000
-v 0.000000 0.177075 1.514000
-v 0.000000 0.213600 -1.552000
-v 0.000000 0.213600 -1.552000
-v 0.000000 0.213600 1.552000
-v 0.000000 0.213600 1.552000
-v 0.000000 0.260025 -1.608000
-v 0.000000 0.260025 1.608000
-v 0.000000 0.316800 -1.676000
-v 0.000000 0.316800 -1.676000
-v 0.000000 0.316800 1.676000
-v 0.000000 0.316800 1.676000
-v 0.000000 0.384375 -1.750000
-v 0.000000 0.384375 1.750000
-v 0.000000 0.463200 -1.824000
-v 0.000000 0.463200 1.824000
-v 0.000000 0.553725 -1.892000
-v 0.000000 0.553725 1.892000
-v 0.000000 0.656400 -1.948000
-v 0.000000 0.656400 1.948000
-v 0.000000 0.771675 -1.986000
-v 0.000000 0.771675 1.986000
-v 0.000000 0.900000 -2.000000
-v 0.000000 0.900000 -2.000000
-v 0.000000 0.900000 2.000000
-v 0.000000 0.900000 2.000000
-v 0.000000 1.037175 -1.992750
-v 0.000000 1.037175 1.992750
-v 0.000000 1.178400 -1.972000
-v 0.000000 1.178400 1.972000
-v 0.000000 1.323225 -1.939250
-v 0.000000 1.323225 1.939250
-v 0.000000 1.471200 -1.896000
-v 0.000000 1.471200 -1.896000
-v 0.000000 1.471200 1.896000
-v 0.000000 1.471200 1.896000
-v 0.000000 1.621875 -1.843750
-v 0.000000 1.621875 1.843750
-v 0.000000 1.774800 -1.784000
-v 0.000000 1.774800 1.784000
-v 0.000000 1.929525 -1.718250
-v 0.000000 1.929525 1.718250
-v 0.000000 2.085600 -1.648000
-v 0.000000 2.085600 1.648000
-v 0.000000 2.242575 -1.574750
-v 0.000000 2.242575 -1.574750
-v 0.000000 2.242575 1.574750
-v 0.000000 2.242575 1.574750
-v 0.000000 2.400000 -1.500000
-v 0.000000 2.400000 -1.500000
-v 0.000000 2.400000 -1.400000
-v 0.000000 2.400000 -1.400000
-v 0.000000 2.400000 -1.300000
-v 0.000000 2.400000 1.300000
-v 0.000000 2.400000 1.400000
-v 0.000000 2.400000 1.400000
-v 0.000000 2.400000 1.500000
-v 0.000000 2.400000 1.500000
-v 0.000000 2.435437 -1.480325
-v 0.000000 2.435437 -1.385925
-v 0.000000 2.435437 1.385925
-v 0.000000 2.435437 1.480325
-v 0.000000 2.440800 -1.274600
-v 0.000000 2.440800 -1.274600
-v 0.000000 2.440800 1.274600
-v 0.000000 2.440800 1.274600
-v 0.000000 2.463000 -1.459600
-v 0.000000 2.463000 -1.380400
-v 0.000000 2.463000 1.380400
-v 0.000000 2.463000 1.459600
-v 0.000000 2.474400 -1.204800
-v 0.000000 2.474400 1.204800
-v 0.000000 2.482687 -1.439025
-v 0.000000 2.482687 -1.382225
-v 0.000000 2.482687 1.382225
-v 0.000000 2.482687 1.439025
-v 0.000000 2.494500 -1.419800
-v 0.000000 2.494500 -1.390200
-v 0.000000 2.494500 1.390200
-v 0.000000 2.494500 1.419800
-v 0.000000 2.498438 -1.403125
-v 0.000000 2.498438 -1.403125
-v 0.000000 2.498438 1.403125
-v 0.000000 2.498438 1.403125
-v 0.000000 2.502600 -1.100200
-v 0.000000 2.502600 1.100200
-v 0.000000 2.527200 -0.970400
-v 0.000000 2.527200 0.970400
-v 0.000000 2.550000 -0.825000
-v 0.000000 2.550000 -0.825000
-v 0.000000 2.550000 0.825000
-v 0.000000 2.550000 0.825000
-v 0.000000 2.572800 -0.673600
-v 0.000000 2.572800 0.673600
-v 0.000000 2.597400 -0.525800
-v 0.000000 2.597400 0.525800
-v 0.000000 2.625600 -0.391200
-v 0.000000 2.625600 -0.391200
-v 0.000000 2.625600 0.391200
-v 0.000000 2.625600 0.391200
-v 0.000000 2.659200 -0.279400
-v 0.000000 2.659200 0.279400
-v 0.000000 2.700000 -0.200000
-v 0.000000 2.700000 -0.200000
-v 0.000000 2.700000 0.200000
-v 0.000000 2.700000 0.200000
-v 0.000000 2.749050 -0.167400
-v 0.000000 2.749050 0.167400
-v 0.000000 2.804400 -0.179200
-v 0.000000 2.804400 0.179200
-v 0.000000 2.863350 -0.219800
-v 0.000000 2.863350 0.219800
-v 0.000000 2.923200 -0.273600
-v 0.000000 2.923200 0.273600
-v 0.000000 2.981250 -0.325000
-v 0.000000 2.981250 0.325000
-v 0.000000 3.034800 -0.358400
-v 0.000000 3.034800 -0.358400
-v 0.000000 3.034800 0.358400
-v 0.000000 3.034800 0.358400
-v 0.000000 3.081150 -0.358200
-v 0.000000 3.081150 0.358200
-v 0.000000 3.117600 -0.308800
-v 0.000000 3.117600 0.308800
-v 0.000000 3.141450 -0.194600
-v 0.000000 3.141450 0.194600
-v 0.000000 3.150000 0.000000
-v 0.000000 0.002175 -0.388275
-v 0.000000 3.081150 0.358200
-v 0.000000 2.597400 0.525800
-v 0.000000 2.700000 0.200000
-v 0.000000 2.981250 0.325000
-v 0.000000 3.141450 0.194600
-v 0.000000 3.117600 0.308800
-v 0.000000 0.105600 -1.480800
-v 0.000000 0.177075 1.514000
-v 0.000000 2.494500 1.419800
-v 0.000000 2.527200 0.970400
-v 0.000000 2.923200 0.273600
-v 0.000000 2.572800 0.673600
-v 0.000000 2.863350 0.219800
-v 0.000000 0.018225 -0.952425
-v 0.000000 0.046875 1.284375
-v 0.000000 0.064800 -1.382400
-v 0.000000 0.384375 -1.750000
-v 0.000000 0.463200 -1.824000
-v 0.000000 0.553725 1.892000
-v 0.000000 1.037175 -1.992750
-v 0.000000 1.178400 -1.972000
-v 0.000000 1.323225 1.939250
-v 0.000000 1.621875 1.843750
-v 0.000000 1.774800 -1.784000
-v 0.000000 2.400000 1.300000
-v 0.000000 2.435437 1.385925
-v 0.000000 2.435437 1.480325
-v 0.000000 2.463000 1.380400
-v 0.000000 2.463000 1.459600
-v 0.000000 2.494500 1.390200
-v 0.000000 2.502600 1.100200
-v 0.000000 2.804400 0.179200
-v 0.000000 2.749050 0.167400
-v 0.000000 0.127575 -1.496475
-v 0.000000 2.474400 1.204800
-v 0.000000 0.656400 1.948000
-v 0.000000 0.771675 1.986000
-v 0.000000 2.482687 -1.382225
-v 0.000000 2.700000 0.200000
-v 0.000000 0.260025 -1.608000
-v 0.000000 1.929525 -1.718250
-v 0.000000 2.085600 1.648000
-v 0.027480 2.749050 -0.165245
-v 0.027480 2.749050 0.165245
-v 0.029450 2.804400 -0.176897
-v 0.029450 2.804400 0.176897
-v 0.032048 3.141450 -0.192107
-v 0.032048 3.141450 0.192107
-v 0.032816 2.700000 -0.197424
-v 0.032816 2.700000 0.197424
-v 0.032816 2.700000 -0.197424
-v 0.032816 2.700000 0.197424
-v 0.036157 2.863350 -0.216979
-v 0.036157 2.863350 0.216979
-v 0.045032 2.923200 -0.270092
-v 0.045032 2.923200 0.270092
-v 0.045844 2.659200 -0.275801
-v 0.045844 2.659200 0.275801
-v 0.050855 3.117600 -0.304843
-v 0.050855 3.117600 0.304843
-v 0.053428 2.749050 -0.158995
-v 0.053428 2.749050 0.158995
-v 0.053508 2.981250 -0.320834
-v 0.053508 2.981250 0.320834
-v 0.057246 2.804400 -0.170215
-v 0.057246 2.804400 0.170215
-v 0.058988 3.081150 -0.353610
-v 0.058988 3.081150 0.353610
-v 0.059016 3.034800 -0.353807
-v 0.059016 3.034800 0.353807
-v 0.062272 3.141450 -0.184870
-v 0.062272 3.141450 0.184870
-v 0.063708 0.002175 0.383274
-v 0.063708 0.002175 -0.383274
-v 0.063808 2.700000 -0.189952
-v 0.063808 2.700000 0.189952
-v 0.063808 2.700000 -0.189952
-v 0.063808 2.700000 0.189952
-v 0.064188 2.625600 -0.386161
-v 0.064188 2.625600 0.386161
-v 0.070270 2.863350 -0.208794
-v 0.070270 2.863350 0.208794
-v 0.077523 2.749050 -0.148969
-v 0.077523 2.749050 0.148969
-v 0.083047 2.804400 -0.159496
-v 0.083047 2.804400 0.159496
-v 0.086273 2.597400 -0.519028
-v 0.086273 2.597400 0.519028
-v 0.087511 2.923200 -0.259910
-v 0.087511 2.923200 0.259910
-v 0.089140 2.659200 -0.265363
-v 0.089140 2.659200 0.265363
-v 0.090306 3.141450 -0.173255
-v 0.090306 3.141450 0.173255
-v 0.092592 2.700000 -0.177968
-v 0.092592 2.700000 0.177968
-v 0.092592 2.700000 -0.177968
-v 0.092592 2.700000 0.177968
-v 0.098814 3.117600 -0.293360
-v 0.098814 3.117600 0.293360
-v 0.099446 2.749050 0.135489
-v 0.099446 2.749050 -0.135489
-v 0.101925 2.863350 -0.195658
-v 0.101925 2.863350 0.195658
-v 0.103976 2.981250 -0.308744
-v 0.103976 2.981250 0.308744
-v 0.106513 2.804400 -0.145078
-v 0.106513 2.804400 0.145078
-v 0.110524 2.572800 -0.664924
-v 0.110524 2.572800 0.664924
-v 0.114619 3.081150 -0.340289
-v 0.114619 3.081150 0.340289
-v 0.114676 3.034800 -0.340477
-v 0.114676 3.034800 0.340477
-v 0.115381 0.008400 0.694143
-v 0.115381 0.008400 -0.694143
-v 0.115787 3.141450 -0.157626
-v 0.115787 3.141450 0.157626
-v 0.118784 2.700000 0.161856
-v 0.118784 2.700000 -0.161856
-v 0.118784 2.700000 -0.161856
-v 0.118784 2.700000 0.161856
-v 0.118874 2.749050 0.118874
-v 0.118874 2.749050 -0.118874
-v 0.123875 0.002175 0.368768
-v 0.123875 0.002175 -0.368768
-v 0.124808 2.625600 -0.371546
-v 0.124808 2.625600 0.371546
-v 0.126920 2.923200 -0.243569
-v 0.126920 2.923200 0.243569
-v 0.127304 2.804400 0.127304
-v 0.127304 2.804400 -0.127304
-v 0.129351 2.659200 0.248621
-v 0.129351 2.659200 -0.248621
-v 0.130707 2.863350 -0.177989
-v 0.130707 2.863350 0.177989
-v 0.135366 2.550000 -0.814374
-v 0.135366 2.550000 0.814374
-v 0.135489 2.749050 0.099446
-v 0.135489 2.749050 -0.099446
-v 0.138348 3.141450 -0.138348
-v 0.138348 3.141450 0.138348
-v 0.142000 2.700000 0.142000
-v 0.142000 2.700000 -0.142000
-v 0.142000 2.700000 -0.142000
-v 0.142000 2.700000 0.142000
-v 0.143301 3.117600 -0.274928
-v 0.143301 3.117600 0.274928
-v 0.145078 2.804400 0.106513
-v 0.145078 2.804400 -0.106513
-v 0.148969 2.749050 0.077523
-v 0.148969 2.749050 -0.077523
-v 0.150793 2.981250 -0.289340
-v 0.150793 2.981250 0.289340
-v 0.156200 2.863350 -0.156200
-v 0.156200 2.863350 0.156200
-v 0.156274 0.018225 0.940158
-v 0.156274 0.018225 -0.940158
-v 0.157626 3.141450 -0.115787
-v 0.157626 3.141450 0.115787
-v 0.158995 2.749050 0.053428
-v 0.158995 2.749050 -0.053428
-v 0.159223 2.527200 -0.957901
-v 0.159223 2.527200 0.957901
-v 0.159496 2.804400 0.083047
-v 0.159496 2.804400 -0.083047
-v 0.161856 2.700000 0.118784
-v 0.161856 2.700000 -0.118784
-v 0.161856 2.700000 -0.118784
-v 0.161856 2.700000 0.118784
-v 0.162745 2.923200 -0.221585
-v 0.162745 2.923200 0.221585
-v 0.165245 2.749050 0.027480
-v 0.165245 2.749050 -0.027480
-v 0.165941 2.659200 -0.226113
-v 0.165941 2.659200 0.226113
-v 0.166221 3.081150 0.318907
-v 0.166221 3.081150 -0.318907
-v 0.166306 3.034800 -0.319082
-v 0.166306 3.034800 0.319082
-v 0.167400 2.749050 -0.000000
-v 0.167400 2.749050 0.000000
-v 0.167751 2.597400 -0.499384
-v 0.167751 2.597400 0.499384
-v 0.170215 2.804400 0.057246
-v 0.170215 2.804400 -0.057246
-v 0.173255 3.141450 -0.090306
-v 0.173255 3.141450 0.090306
-v 0.176897 2.804400 0.029450
-v 0.176897 2.804400 -0.029450
-v 0.177968 2.700000 0.092592
-v 0.177968 2.700000 -0.092592
-v 0.177968 2.700000 -0.092592
-v 0.177968 2.700000 0.092592
-v 0.177989 2.863350 -0.130707
-v 0.177989 2.863350 0.130707
-v 0.179200 2.804400 -0.000000
-v 0.179200 2.804400 0.000000
-v 0.179756 0.002175 -0.345503
-v 0.179756 0.002175 0.345503
-v 0.180521 2.502600 -1.086029
-v 0.180521 2.502600 1.086029
-v 0.181110 2.625600 0.348105
-v 0.181110 2.625600 -0.348105
-v 0.183734 3.117600 -0.250127
-v 0.183734 3.117600 0.250127
-v 0.184870 3.141450 -0.062272
-v 0.184870 3.141450 0.062272
-v 0.187642 0.031200 1.128870
-v 0.187642 0.031200 -1.128870
-v 0.189952 2.700000 0.063808
-v 0.189952 2.700000 -0.063808
-v 0.189952 2.700000 -0.063808
-v 0.189952 2.700000 0.063808
-v 0.192107 3.141450 -0.032048
-v 0.192107 3.141450 0.032048
-v 0.193348 2.981250 -0.263232
-v 0.193348 2.981250 0.263232
-v 0.194472 2.923200 -0.194472
-v 0.194472 2.923200 0.194472
-v 0.194600 3.141450 0.000000
-v 0.194600 3.141450 -0.000000
-v 0.195658 2.863350 -0.101925
-v 0.195658 2.863350 0.101925
-v 0.197424 2.700000 0.032816
-v 0.197424 2.700000 -0.032816
-v 0.197424 2.700000 -0.032816
-v 0.197424 2.700000 0.032816
-v 0.197684 2.474400 -1.189282
-v 0.197684 2.474400 1.189282
-v 0.198374 2.659200 -0.198374
-v 0.198374 2.659200 0.198374
-v 0.200000 2.700000 -0.000000
-v 0.200000 2.700000 0.000000
-v 0.200000 2.700000 0.000000
-v 0.200000 2.700000 -0.000000
-v 0.208794 2.863350 0.070270
-v 0.208794 2.863350 -0.070270
-v 0.209136 2.440800 -1.258183
-v 0.209136 2.440800 1.258183
-v 0.210740 0.046875 -1.267832
-v 0.210740 0.046875 1.267832
-v 0.213123 3.081150 -0.290138
-v 0.213123 3.081150 0.290138
-v 0.213234 3.034800 -0.290295
-v 0.213234 3.034800 0.290295
-v 0.213304 2.400000 -1.283256
-v 0.213304 2.400000 1.283256
-v 0.214905 2.572800 -0.639758
-v 0.214905 2.572800 0.639758
-v 0.216979 2.863350 0.036157
-v 0.216979 2.863350 -0.036157
-v 0.219536 3.117600 -0.219536
-v 0.219536 3.117600 0.219536
-v 0.219800 2.863350 -0.000000
-v 0.219800 2.863350 0.000000
-v 0.221585 2.923200 -0.162745
-v 0.221585 2.923200 0.162745
-v 0.224349 0.008400 0.667871
-v 0.224349 0.008400 -0.667871
-v 0.226113 2.659200 -0.165941
-v 0.226113 2.659200 0.165941
-v 0.226496 2.463000 -1.362620
-v 0.226496 2.463000 1.362620
-v 0.226795 2.482687 1.364422
-v 0.226795 2.482687 -1.364422
-v 0.226824 0.064800 1.364595
-v 0.226824 0.064800 -1.364595
-v 0.227403 2.435437 -1.368074
-v 0.227403 2.435437 1.368074
-v 0.228104 2.494500 -1.372294
-v 0.228104 2.494500 1.372294
-v 0.229712 2.400000 -1.381968
-v 0.229712 2.400000 1.381968
-v 0.230225 2.498438 -1.385053
-v 0.230225 2.498438 1.385053
-v 0.230604 0.002175 -0.314223
-v 0.230604 0.002175 0.314223
-v 0.231031 2.981250 -0.231031
-v 0.231031 2.981250 0.231031
-v 0.232342 2.625600 -0.316590
-v 0.232342 2.625600 0.316590
-v 0.232961 2.494500 -1.401513
-v 0.232961 2.494500 1.401513
-v 0.236115 2.482687 -1.420490
-v 0.236115 2.482687 1.420490
-v 0.237149 0.084525 1.426709
-v 0.237149 0.084525 -1.426709
-v 0.239491 2.463000 -1.440800
-v 0.239491 2.463000 1.440800
-v 0.242892 2.435437 -1.461258
-v 0.242892 2.435437 1.461258
-v 0.242970 0.105600 1.461727
-v 0.242970 0.105600 -1.461727
-v 0.243424 2.597400 0.467878
-v 0.243424 2.597400 -0.467878
-v 0.243569 2.923200 -0.126920
-v 0.243569 2.923200 0.126920
-v 0.245542 0.127575 1.477200
-v 0.245542 0.127575 -1.477200
-v 0.246120 0.150000 -1.480680
-v 0.246120 2.400000 -1.480680
-v 0.246120 0.150000 1.480680
-v 0.246120 0.150000 1.480680
-v 0.246120 2.400000 1.480680
-v 0.246120 0.150000 -1.480680
-v 0.248417 0.177075 -1.494500
-v 0.248417 0.177075 1.494500
-v 0.248621 2.659200 0.129351
-v 0.248621 2.659200 -0.129351
-v 0.250127 3.117600 -0.183734
-v 0.250127 3.117600 0.183734
-v 0.254652 0.213600 -1.532010
-v 0.254652 0.213600 1.532010
-v 0.254653 3.081150 -0.254653
-v 0.254653 3.081150 0.254653
-v 0.254788 3.034800 -0.254788
-v 0.254788 3.034800 0.254788
-v 0.258385 2.242575 -1.554467
-v 0.258385 2.242575 1.554467
-v 0.259910 2.923200 -0.087511
-v 0.259910 2.923200 0.087511
-v 0.263208 2.550000 -0.783552
-v 0.263208 2.550000 0.783552
-v 0.263232 2.981250 -0.193348
-v 0.263232 2.981250 0.193348
-v 0.263841 0.260025 1.587289
-v 0.263841 0.260025 -1.587289
-v 0.265363 2.659200 -0.089140
-v 0.265363 2.659200 0.089140
-v 0.270092 2.923200 -0.045032
-v 0.270092 2.923200 0.045032
-v 0.270404 2.085600 -1.626774
-v 0.270404 2.085600 1.626774
-v 0.273600 2.923200 -0.000000
-v 0.273600 2.923200 0.000000
-v 0.274928 3.117600 -0.143301
-v 0.274928 3.117600 0.143301
-v 0.274998 0.316800 -1.654413
-v 0.274998 0.316800 1.654413
-v 0.275675 0.002175 -0.275675
-v 0.275675 0.002175 0.275675
-v 0.275801 2.659200 -0.045844
-v 0.275801 2.659200 0.045844
-v 0.277752 2.625600 -0.277752
-v 0.277752 2.625600 0.277752
-v 0.279400 2.659200 0.000000
-v 0.281930 1.929525 1.696119
-v 0.281930 1.929525 -1.696119
-v 0.287140 0.384375 -1.727460
-v 0.287140 0.384375 1.727460
-v 0.289340 2.981250 -0.150793
-v 0.289340 2.981250 0.150793
-v 0.290138 3.081150 -0.213123
-v 0.290138 3.081150 0.213123
-v 0.290295 3.034800 -0.213234
-v 0.290295 3.034800 0.213234
-v 0.292719 1.774800 -1.761022
-v 0.292719 1.774800 1.761022
-v 0.293360 3.117600 -0.098814
-v 0.293360 3.117600 0.098814
-v 0.299282 0.463200 -1.800507
-v 0.299282 0.463200 1.800507
-v 0.302522 1.621875 -1.820003
-v 0.302523 1.621875 1.820003
-v 0.303862 0.018225 0.904575
-v 0.303862 0.018225 -0.904575
-v 0.304843 3.117600 -0.050855
-v 0.304843 3.117600 0.050855
-v 0.308744 2.981250 -0.103976
-v 0.308744 2.981250 0.103976
-v 0.308800 3.117600 0.000000
-v 0.308800 3.117600 -0.000000
-v 0.309596 2.527200 -0.921647
-v 0.309596 2.527200 0.921647
-v 0.310439 0.553725 -1.867631
-v 0.310439 0.553725 1.867631
-v 0.311096 1.471200 -1.871580
-v 0.311096 1.471200 1.871580
-v 0.311850 2.572800 -0.599396
-v 0.311850 2.572800 0.599396
-v 0.312283 2.597400 -0.425519
-v 0.312283 2.597400 0.425519
-v 0.314223 0.002175 -0.230604
-v 0.314223 0.002175 0.230604
-v 0.316590 2.625600 -0.232342
-v 0.316590 2.625600 0.232342
-v 0.318192 1.323225 -1.914272
-v 0.318192 1.323225 1.914272
-v 0.318907 3.081150 -0.166221
-v 0.318907 3.081150 0.166221
-v 0.319082 3.034800 -0.166306
-v 0.319082 3.034800 0.166306
-v 0.319628 0.656400 -1.922910
-v 0.319628 0.656400 1.922910
-v 0.320834 2.981250 -0.053508
-v 0.320834 2.981250 0.053508
-v 0.323566 1.178400 -1.946601
-v 0.323566 1.178400 1.946601
-v 0.325000 2.981250 0.000000
-v 0.325000 2.981250 -0.000000
-v 0.325553 0.008400 -0.625735
-v 0.325553 0.008400 0.625735
-v 0.325863 0.771675 -1.960420
-v 0.325863 0.771675 1.960420
-v 0.326970 1.037175 -1.967083
-v 0.326970 1.037175 1.967083
-v 0.328160 0.900000 -1.974240
-v 0.328160 0.900000 -1.974240
-v 0.328160 0.900000 1.974240
-v 0.340289 3.081150 -0.114619
-v 0.340289 3.081150 0.114619
-v 0.340477 3.034800 -0.114676
-v 0.340477 3.034800 0.114676
-v 0.345503 0.002175 -0.179756
-v 0.345503 0.002175 0.179756
-v 0.348105 2.625600 -0.181110
-v 0.348105 2.625600 0.181110
-v 0.351008 2.502600 -1.044926
-v 0.351008 2.502600 1.044926
-v 0.353610 3.081150 -0.058988
-v 0.353610 3.081150 0.058988
-v 0.353807 3.034800 -0.059016
-v 0.353807 3.034800 0.059016
-v 0.358200 3.081150 -0.000000
-v 0.358200 3.081150 0.000000
-v 0.358400 3.034800 0.000000
-v 0.358400 3.034800 0.000000
-v 0.364854 0.031200 1.086146
-v 0.364854 0.031200 -1.086146
-v 0.368768 0.002175 -0.123875
-v 0.368768 0.002175 0.123875
-v 0.371546 2.625600 -0.124808
-v 0.371546 2.625600 0.124808
-v 0.373318 2.597400 -0.373318
-v 0.373318 2.597400 0.373318
-v 0.381942 2.550000 -0.734118
-v 0.381942 2.550000 0.734118
-v 0.383274 0.002175 -0.063708
-v 0.383274 0.002175 0.063708
-v 0.384379 2.474400 -1.144271
-v 0.384379 2.474400 1.144271
-v 0.386161 2.625600 -0.064188
-v 0.386161 2.625600 0.064188
-v 0.388275 0.002175 0.000000
-v 0.388275 0.002175 0.000000
-v 0.391200 2.625600 0.000000
-v 0.391200 2.625600 0.000000
-v 0.400065 2.572800 -0.545131
-v 0.400065 2.572800 0.545131
-v 0.406648 2.440800 -1.210564
-v 0.406648 2.440800 1.210564
-v 0.409767 0.046875 1.219848
-v 0.409767 0.046875 -1.219848
-v 0.414752 2.400000 -1.234688
-v 0.414752 2.400000 1.234688
-v 0.417645 0.008400 -0.569086
-v 0.417645 0.008400 0.569086
-v 0.425519 2.597400 0.312283
-v 0.425519 2.597400 -0.312283
-v 0.440403 2.463000 -1.311049
-v 0.440403 2.463000 1.311049
-v 0.440935 0.018225 0.847506
-v 0.440935 0.018225 -0.847506
-v 0.440985 2.482687 -1.312782
-v 0.440985 2.482687 1.312782
-v 0.441041 0.064800 1.312948
-v 0.441041 0.064800 -1.312948
-v 0.442166 2.435437 -1.316296
-v 0.442166 2.435437 1.316296
-v 0.443529 2.494500 -1.320356
-v 0.443529 2.494500 1.320356
-v 0.446656 2.400000 -1.329664
-v 0.446656 2.400000 1.329664
-v 0.447653 2.498438 -1.332632
-v 0.447653 2.498438 1.332632
-v 0.449256 2.527200 -0.863501
-v 0.449256 2.527200 0.863501
-v 0.452973 2.494500 -1.348469
-v 0.452973 2.494500 1.348469
-v 0.459107 2.482687 -1.366728
-v 0.459107 2.482687 1.366728
-v 0.461116 0.084525 1.372712
-v 0.461116 0.084525 -1.372712
-v 0.465671 2.463000 -1.386270
-v 0.465671 2.463000 1.386270
-v 0.467878 2.597400 -0.243424
-v 0.467878 2.597400 0.243424
-v 0.472283 2.435437 -1.405953
-v 0.472283 2.435437 1.405953
-v 0.472434 0.105600 1.406405
-v 0.472434 0.105600 -1.406405
-v 0.477435 0.127575 1.421292
-v 0.477435 0.127575 -1.421292
-v 0.478256 2.572800 -0.478256
-v 0.478256 2.572800 0.478256
-v 0.478560 0.150000 -1.424640
-v 0.478560 2.400000 -1.424640
-v 0.478560 0.150000 1.424640
-v 0.478560 0.150000 1.424640
-v 0.478560 0.150000 -1.424640
-v 0.478560 2.400000 1.424640
-v 0.483027 0.177075 -1.437937
-v 0.483027 0.177075 1.437937
-v 0.489984 2.550000 -0.667656
-v 0.489984 2.550000 0.667656
-v 0.495150 0.213600 -1.474028
-v 0.495150 0.213600 1.474028
-v 0.499272 0.008400 -0.499272
-v 0.499272 0.008400 0.499272
-v 0.499384 2.597400 -0.167751
-v 0.499384 2.597400 0.167751
-v 0.502408 2.242575 -1.495635
-v 0.502408 2.242575 1.495635
-v 0.509349 2.502600 0.979002
-v 0.509349 2.502600 -0.979002
-v 0.513016 0.260025 -1.527214
-v 0.513016 0.260025 1.527214
-v 0.519028 2.597400 0.086273
-v 0.519028 2.597400 -0.086273
-v 0.525778 2.085600 -1.565204
-v 0.525778 2.085600 1.565204
-v 0.525800 2.597400 -0.000000
-v 0.525800 2.597400 0.000000
-v 0.529441 0.031200 -1.017621
-v 0.529441 0.031200 1.017621
-v 0.534711 0.316800 -1.591798
-v 0.534711 0.316800 1.591798
-v 0.545131 2.572800 -0.400065
-v 0.545131 2.572800 0.400065
-v 0.548190 1.929525 -1.631925
-v 0.548190 1.929525 1.631925
-v 0.557774 2.474400 -1.072079
-v 0.557774 2.474400 1.072079
-v 0.558320 0.384375 -1.662080
-v 0.558320 0.384375 1.662080
-v 0.565664 0.018225 0.770779
-v 0.565664 0.018225 -0.770779
-v 0.569086 0.008400 -0.417645
-v 0.569086 0.008400 0.417645
-v 0.569167 1.774800 -1.694372
-v 0.569167 1.774800 1.694372
-v 0.576340 2.527200 -0.785325
-v 0.576340 2.527200 0.785325
-v 0.581929 0.463200 -1.732362
-v 0.581929 0.463200 1.732362
-v 0.585750 2.550000 -0.585750
-v 0.585750 2.550000 0.585750
-v 0.588230 1.621875 -1.751120
-v 0.588230 1.621875 1.751120
-v 0.590089 2.440800 1.134190
-v 0.590089 2.440800 -1.134190
-v 0.594614 0.046875 -1.142888
-v 0.594614 0.046875 1.142888
-v 0.599396 2.572800 -0.311850
-v 0.599396 2.572800 0.311850
-v 0.601848 2.400000 -1.156792
-v 0.601848 2.400000 1.156792
-v 0.603624 0.553725 -1.796946
-v 0.603624 0.553725 1.796946
-v 0.604900 1.471200 -1.800745
-v 0.604900 1.471200 1.800745
-v 0.618698 1.323225 -1.841822
-v 0.618698 1.323225 1.841822
-v 0.621490 0.656400 -1.850132
-v 0.621490 0.656400 1.850132
-v 0.625735 0.008400 0.325553
-v 0.625735 0.008400 -0.325553
-v 0.629147 1.178400 -1.872927
-v 0.629147 1.178400 1.872927
-v 0.633613 0.771675 -1.886223
-v 0.633613 0.771675 1.886223
-v 0.635767 1.037175 -1.892634
-v 0.635767 1.037175 1.892634
-v 0.638080 0.900000 -1.899520
-v 0.638080 0.900000 -1.899520
-v 0.638080 0.900000 1.899520
-v 0.638080 0.900000 1.899520
-v 0.639070 2.463000 -1.228335
-v 0.639070 2.463000 1.228335
-v 0.639758 2.572800 -0.214905
-v 0.639758 2.572800 0.214905
-v 0.639915 2.482687 1.229959
-v 0.639915 2.482687 -1.229959
-v 0.639996 0.064800 -1.230115
-v 0.639996 0.064800 1.230115
-v 0.641628 2.435437 -1.233252
-v 0.641628 2.435437 1.233252
-v 0.643607 2.494500 -1.237056
-v 0.643607 2.494500 1.237056
-v 0.648144 2.400000 -1.245776
-v 0.648144 2.400000 1.245776
-v 0.649591 2.498438 -1.248557
-v 0.649591 2.498438 1.248557
-v 0.653431 2.502600 -0.890370
-v 0.653431 2.502600 0.890370
-v 0.657311 2.494500 -1.263395
-v 0.657311 2.494500 1.263395
-v 0.664924 2.572800 -0.110524
-v 0.664924 2.572800 0.110524
-v 0.666211 2.482687 1.280502
-v 0.666211 2.482687 -1.280502
-v 0.667656 2.550000 -0.489984
-v 0.667656 2.550000 0.489984
-v 0.667871 0.008400 -0.224349
-v 0.667871 0.008400 0.224349
-v 0.669128 0.084525 -1.286108
-v 0.669128 0.084525 1.286108
-v 0.673600 2.572800 0.000000
-v 0.673600 2.572800 -0.000000
-v 0.675736 2.463000 -1.298810
-v 0.675736 2.463000 1.298810
-v 0.676222 0.018225 0.676222
-v 0.676222 0.018225 -0.676222
-v 0.679207 0.031200 -0.925493
-v 0.679207 0.031200 0.925493
-v 0.685331 2.435437 -1.317252
-v 0.685331 2.435437 1.317252
-v 0.685551 0.105600 -1.317675
-v 0.685551 0.105600 1.317675
-v 0.688984 2.527200 -0.688984
-v 0.688984 2.527200 0.688984
-v 0.692808 0.127575 1.331623
-v 0.692808 0.127575 -1.331623
-v 0.694143 0.008400 -0.115381
-v 0.694143 0.008400 0.115381
-v 0.694440 0.150000 1.334760
-v 0.694440 0.150000 -1.334760
-v 0.694440 2.400000 1.334760
-v 0.694440 0.150000 -1.334760
-v 0.694440 0.150000 1.334760
-v 0.694440 2.400000 -1.334760
-v 0.700921 0.177075 1.347218
-v 0.700921 0.177075 -1.347218
-v 0.703200 0.008400 0.000000
-v 0.715555 2.474400 -0.975021
-v 0.715555 2.474400 0.975021
-v 0.718514 0.213600 1.381032
-v 0.718514 0.213600 -1.381032
-v 0.729046 2.242575 -1.401276
-v 0.729046 2.242575 1.401276
-v 0.734118 2.550000 -0.381942
-v 0.734118 2.550000 0.381942
-v 0.744440 0.260025 1.430863
-v 0.744440 0.260025 -1.430863
-v 0.757010 2.440800 1.031508
-v 0.757010 2.440800 -1.031508
-v 0.762816 0.046875 -1.039419
-v 0.762816 0.046875 1.039419
-v 0.762958 2.085600 -1.466456
-v 0.762958 2.085600 1.466456
-v 0.770779 0.018225 0.565664
-v 0.770779 0.018225 -0.565664
-v 0.772096 2.400000 -1.052064
-v 0.772096 2.400000 1.052064
-v 0.775921 0.316800 -1.491372
-v 0.775921 0.316800 1.491372
-v 0.781142 2.502600 -0.781142
-v 0.781142 2.502600 0.781142
-v 0.783552 2.550000 -0.263208
-v 0.783552 2.550000 0.263208
-v 0.785325 2.527200 -0.576340
-v 0.785325 2.527200 0.576340
-v 0.795481 1.929525 1.528968
-v 0.795481 1.929525 -1.528968
-v 0.810180 0.384375 1.557220
-v 0.810180 0.384375 -1.557220
-v 0.811956 0.031200 0.811956
-v 0.811956 0.031200 -0.811956
-v 0.814374 2.550000 -0.135366
-v 0.814374 2.550000 0.135366
-v 0.819847 2.463000 -1.117130
-v 0.819847 2.463000 1.117130
-v 0.820931 2.482687 1.118607
-v 0.820931 2.482687 -1.118607
-v 0.821035 0.064800 1.118749
-v 0.821035 0.064800 -1.118749
-v 0.823129 2.435437 -1.121601
-v 0.823129 2.435437 1.121601
-v 0.825000 2.550000 0.000000
-v 0.825000 2.550000 0.000000
-v 0.825668 2.494500 -1.125061
-v 0.825668 2.494500 1.125061
-v 0.825921 1.774800 1.587475
-v 0.825921 1.774800 -1.587475
-v 0.831488 2.400000 -1.132992
-v 0.831488 2.400000 1.132992
-v 0.833344 2.498438 -1.135521
-v 0.833344 2.498438 1.135521
-v 0.843248 2.494500 -1.149016
-v 0.843248 2.494500 1.149016
-v 0.844439 0.463200 1.623068
-v 0.844439 0.463200 -1.623068
-v 0.847506 0.018225 -0.440935
-v 0.847506 0.018225 0.440935
-v 0.853583 1.621875 -1.640643
-v 0.853583 1.621875 1.640643
-v 0.854666 2.482687 -1.164574
-v 0.854666 2.482687 1.164574
-v 0.855408 2.474400 -0.855408
-v 0.855408 2.474400 0.855408
-v 0.858407 0.084525 -1.169673
-v 0.858407 0.084525 1.169673
-v 0.863501 2.527200 -0.449256
-v 0.863501 2.527200 0.449256
-v 0.866886 2.463000 -1.181225
-v 0.866886 2.463000 1.181225
-v 0.875920 0.553725 -1.683577
-v 0.875920 0.553725 1.683577
-v 0.877772 1.471200 -1.687137
-v 0.877772 1.471200 1.687137
-v 0.879195 2.435437 -1.197997
-v 0.879195 2.435437 1.197997
-v 0.879477 0.105600 -1.198382
-v 0.879477 0.105600 1.198382
-v 0.888786 0.127575 1.211067
-v 0.888786 0.127575 -1.211067
-v 0.890370 2.502600 -0.653431
-v 0.890370 2.502600 0.653431
-v 0.890880 0.150000 -1.213920
-v 0.890880 0.150000 1.213920
-v 0.890880 2.400000 -1.213920
-v 0.890880 0.150000 -1.213920
-v 0.890880 0.150000 1.213920
-v 0.890880 2.400000 1.213920
-v 0.897795 1.323225 -1.725622
-v 0.897795 1.323225 1.725622
-v 0.899195 0.177075 1.225250
-v 0.899195 0.177075 -1.225250
-v 0.901846 0.656400 -1.733408
-v 0.901846 0.656400 1.733408
-v 0.904575 0.018225 0.303862
-v 0.904575 0.018225 -0.303862
-v 0.904966 2.440800 0.904966
-v 0.904966 2.440800 -0.904966
-v 0.911906 0.046875 -0.911906
-v 0.911906 0.046875 0.911906
-v 0.912957 1.178400 -1.754764
-v 0.912957 1.178400 1.754764
-v 0.919439 0.771675 -1.767222
-v 0.919439 0.771675 1.767222
-v 0.921647 2.527200 -0.309596
-v 0.921647 2.527200 0.309596
-v 0.921764 0.213600 1.256003
-v 0.921764 0.213600 -1.256003
-v 0.922564 1.037175 1.773229
-v 0.922564 1.037175 -1.773229
-v 0.923000 2.400000 -0.923000
-v 0.923000 2.400000 0.923000
-v 0.925493 0.031200 0.679207
-v 0.925493 0.031200 -0.679207
-v 0.925920 0.900000 1.779680
-v 0.925920 0.900000 -1.779680
-v 0.925920 0.900000 -1.779680
-v 0.925920 0.900000 1.779680
-v 0.935276 2.242575 -1.274414
-v 0.935276 2.242575 1.274414
-v 0.940158 0.018225 0.156274
-v 0.940158 0.018225 -0.156274
-v 0.952425 0.018225 0.000000
-v 0.952425 0.018225 0.000000
-v 0.955023 0.260025 1.301322
-v 0.955023 0.260025 -1.301322
-v 0.957901 2.527200 -0.159223
-v 0.957901 2.527200 0.159223
-v 0.970400 2.527200 0.000000
-v 0.970400 2.527200 -0.000000
-v 0.975021 2.474400 -0.715555
-v 0.975021 2.474400 0.715555
-v 0.978780 2.085600 -1.333693
-v 0.978780 2.085600 1.333693
-v 0.979002 2.502600 0.509349
-v 0.979002 2.502600 -0.509349
-v 0.980084 2.463000 -0.980084
-v 0.980084 2.463000 0.980084
-v 0.981380 2.482687 -0.981380
-v 0.981380 2.482687 0.981380
-v 0.981504 0.064800 0.981504
-v 0.981504 0.064800 -0.981504
-v 0.984007 2.435437 -0.984007
-v 0.984007 2.435437 0.984007
-v 0.987042 2.494500 -0.987042
-v 0.987042 2.494500 0.987042
-v 0.994000 2.400000 -0.994000
-v 0.994000 2.400000 0.994000
-v 0.995410 0.316800 -1.356353
-v 0.995410 0.316800 1.356353
-v 0.996219 2.498438 -0.996219
-v 0.996219 2.498438 0.996219
-v 1.008058 2.494500 -1.008058
-v 1.008058 2.494500 1.008058
-v 1.017621 0.031200 0.529441
-v 1.017621 0.031200 -0.529441
-v 1.020503 1.929525 -1.390545
-v 1.020503 1.929525 1.390545
-v 1.021708 2.482687 -1.021708
-v 1.021708 2.482687 1.021708
-v 1.026181 0.084525 -1.026181
-v 1.026181 0.084525 1.026181
-v 1.031508 2.440800 0.757010
-v 1.031508 2.440800 -0.757010
-v 1.036316 2.463000 -1.036316
-v 1.036316 2.463000 1.036316
-v 1.039360 0.384375 -1.416240
-v 1.039360 0.384375 1.416240
-v 1.039419 0.046875 -0.762816
-v 1.039419 0.046875 0.762816
-v 1.044926 2.502600 -0.351008
-v 1.044926 2.502600 0.351008
-v 1.051031 2.435437 -1.051031
-v 1.051031 2.435437 1.051031
-v 1.051368 0.105600 -1.051368
-v 1.051368 0.105600 1.051368
-v 1.052064 2.400000 -0.772096
-v 1.052064 2.400000 0.772096
-v 1.059553 1.774800 -1.443756
-v 1.059553 1.774800 1.443756
-v 1.062497 0.127575 1.062497
-v 1.062497 0.127575 -1.062497
-v 1.065000 0.150000 -1.065000
-v 1.065000 0.150000 1.065000
-v 1.065000 2.400000 -1.065000
-v 1.065000 2.400000 1.065000
-v 1.072079 2.474400 -0.557774
-v 1.072079 2.474400 0.557774
-v 1.074940 0.177075 -1.074940
-v 1.074940 0.177075 1.074940
-v 1.083310 0.463200 -1.476127
-v 1.083310 0.463200 1.476127
-v 1.086029 2.502600 0.180521
-v 1.086029 2.502600 -0.180521
-v 1.086146 0.031200 0.364854
-v 1.086146 0.031200 -0.364854
-v 1.095040 1.621875 -1.492110
-v 1.095040 1.621875 1.492110
-v 1.100200 2.502600 -0.000000
-v 1.100200 2.502600 0.000000
-v 1.101920 0.213600 1.101920
-v 1.101920 0.213600 -1.101920
-v 1.117130 2.463000 -0.819847
-v 1.117130 2.463000 0.819847
-v 1.118073 2.242575 -1.118073
-v 1.118073 2.242575 1.118073
-v 1.118607 2.482687 -0.820931
-v 1.118607 2.482687 0.820931
-v 1.118749 0.064800 -0.821035
-v 1.118749 0.064800 0.821035
-v 1.121601 2.435437 -0.823129
-v 1.121601 2.435437 0.823129
-v 1.123697 0.553725 -1.531158
-v 1.123697 0.553725 1.531158
-v 1.125061 2.494500 -0.825668
-v 1.125061 2.494500 0.825668
-v 1.126072 1.471200 -1.534395
-v 1.126072 1.471200 1.534395
-v 1.128870 0.031200 -0.187642
-v 1.128870 0.031200 0.187642
-v 1.132992 2.400000 -0.831488
-v 1.132992 2.400000 0.831488
-v 1.134190 2.440800 0.590089
-v 1.134190 2.440800 -0.590089
-v 1.135521 2.498438 -0.833344
-v 1.135521 2.498438 0.833344
-v 1.141680 0.260025 1.141680
-v 1.141680 0.260025 -1.141680
-v 1.142888 0.046875 -0.594614
-v 1.142888 0.046875 0.594614
-v 1.143600 0.031200 0.000000
-v 1.143600 0.031200 0.000000
-v 1.144271 2.474400 -0.384379
-v 1.144271 2.474400 0.384379
-v 1.149016 2.494500 -0.843248
-v 1.149016 2.494500 0.843248
-v 1.151759 1.323225 -1.569396
-v 1.151759 1.323225 1.569396
-v 1.156792 2.400000 -0.601848
-v 1.156792 2.400000 0.601848
-v 1.156956 0.656400 -1.576477
-v 1.156956 0.656400 1.576477
-v 1.164574 2.482687 -0.854666
-v 1.164574 2.482687 0.854666
-v 1.169673 0.084525 -0.858407
-v 1.169673 0.084525 0.858407
-v 1.170080 2.085600 -1.170080
-v 1.170080 2.085600 1.170080
-v 1.171210 1.178400 -1.595900
-v 1.171210 1.178400 1.595900
-v 1.179525 0.771675 -1.607230
-v 1.179525 0.771675 1.607230
-v 1.181225 2.463000 -0.866886
-v 1.181225 2.463000 0.866886
-v 1.183534 1.037175 -1.612693
-v 1.183534 1.037175 1.612693
-v 1.187840 0.900000 -1.618560
-v 1.187840 0.900000 -1.618560
-v 1.187840 0.900000 1.618560
-v 1.187840 0.900000 1.618560
-v 1.189282 2.474400 -0.197684
-v 1.189282 2.474400 0.197684
-v 1.189960 0.316800 -1.189960
-v 1.189960 0.316800 1.189960
-v 1.197997 2.435437 -0.879195
-v 1.197997 2.435437 0.879195
-v 1.198382 0.105600 -0.879477
-v 1.198382 0.105600 0.879477
-v 1.204800 2.474400 0.000000
-v 1.204800 2.474400 -0.000000
-v 1.210564 2.440800 0.406648
-v 1.210564 2.440800 -0.406648
-v 1.211067 0.127575 0.888786
-v 1.211067 0.127575 -0.888786
-v 1.213920 0.150000 -0.890880
-v 1.213920 0.150000 -0.890880
-v 1.213920 0.150000 0.890880
-v 1.213920 0.150000 0.890880
-v 1.213920 2.400000 -0.890880
-v 1.213920 2.400000 0.890880
-v 1.219848 0.046875 -0.409767
-v 1.219848 0.046875 0.409767
-v 1.219958 1.929525 1.219958
-v 1.219958 1.929525 -1.219958
-v 1.225250 0.177075 0.899195
-v 1.225250 0.177075 -0.899195
-v 1.228335 2.463000 -0.639070
-v 1.228335 2.463000 0.639070
-v 1.229959 2.482687 -0.639915
-v 1.229959 2.482687 0.639915
-v 1.230115 0.064800 -0.639996
-v 1.230115 0.064800 0.639996
-v 1.233252 2.435437 -0.641628
-v 1.233252 2.435437 0.641628
-v 1.234688 2.400000 -0.414752
-v 1.234688 2.400000 0.414752
-v 1.237056 2.494500 -0.643607
-v 1.237056 2.494500 0.643607
-v 1.242500 0.384375 -1.242500
-v 1.242500 0.384375 1.242500
-v 1.245776 2.400000 -0.648144
-v 1.245776 2.400000 0.648144
-v 1.248557 2.498438 -0.649591
-v 1.248557 2.498438 0.649591
-v 1.256003 0.213600 0.921764
-v 1.256003 0.213600 -0.921764
-v 1.258183 2.440800 0.209136
-v 1.258183 2.440800 -0.209136
-v 1.263395 2.494500 -0.657311
-v 1.263395 2.494500 0.657311
-v 1.266640 1.774800 -1.266640
-v 1.266640 1.774800 1.266640
-v 1.267832 0.046875 -0.210740
-v 1.267832 0.046875 0.210740
-v 1.274414 2.242575 -0.935276
-v 1.274414 2.242575 0.935276
-v 1.274600 2.440800 0.000000
-v 1.274600 2.440800 0.000000
-v 1.280502 2.482687 -0.666211
-v 1.280502 2.482687 0.666211
-v 1.283256 2.400000 -0.213304
-v 1.283256 2.400000 0.213304
-v 1.284375 0.046875 0.000000
-v 1.284375 0.046875 -0.000000
-v 1.286108 0.084525 -0.669128
-v 1.286108 0.084525 0.669128
-v 1.295040 0.463200 -1.295040
-v 1.295040 0.463200 1.295040
-v 1.298810 2.463000 -0.675736
-v 1.298810 2.463000 0.675736
-v 1.300000 2.400000 0.000000
-v 1.300000 2.400000 -0.000000
-v 1.301322 0.260025 0.955023
-v 1.301322 0.260025 -0.955023
-v 1.309063 1.621875 -1.309063
-v 1.309063 1.621875 1.309063
-v 1.311049 2.463000 -0.440403
-v 1.311049 2.463000 0.440403
-v 1.312782 2.482687 -0.440985
-v 1.312782 2.482687 0.440985
-v 1.312948 0.064800 0.441041
-v 1.312948 0.064800 -0.441041
-v 1.316296 2.435437 -0.442166
-v 1.316296 2.435437 0.442166
-v 1.317252 2.435437 -0.685331
-v 1.317252 2.435437 0.685331
-v 1.317675 0.105600 -0.685551
-v 1.317675 0.105600 0.685551
-v 1.320356 2.494500 -0.443529
-v 1.320356 2.494500 0.443529
-v 1.329664 2.400000 -0.446656
-v 1.329664 2.400000 0.446656
-v 1.331623 0.127575 0.692808
-v 1.331623 0.127575 -0.692808
-v 1.332632 2.498438 -0.447653
-v 1.332632 2.498438 0.447653
-v 1.333693 2.085600 -0.978780
-v 1.333693 2.085600 0.978780
-v 1.334760 0.150000 0.694440
-v 1.334760 0.150000 -0.694440
-v 1.334760 0.150000 -0.694440
-v 1.334760 0.150000 0.694440
-v 1.334760 2.400000 -0.694440
-v 1.334760 2.400000 0.694440
-v 1.343320 0.553725 -1.343320
-v 1.343320 0.553725 1.343320
-v 1.346160 1.471200 -1.346160
-v 1.346160 1.471200 1.346160
-v 1.347218 0.177075 0.700921
-v 1.347218 0.177075 -0.700921
-v 1.348469 2.494500 -0.452973
-v 1.348469 2.494500 0.452973
-v 1.356353 0.316800 -0.995410
-v 1.356353 0.316800 0.995410
-v 1.362620 2.463000 -0.226496
-v 1.362620 2.463000 0.226496
-v 1.364422 2.482687 -0.226795
-v 1.364422 2.482687 0.226795
-v 1.364595 0.064800 -0.226824
-v 1.364595 0.064800 0.226824
-v 1.366728 2.482687 -0.459107
-v 1.366728 2.482687 0.459107
-v 1.368074 2.435437 -0.227403
-v 1.368074 2.435437 0.227403
-v 1.372294 2.494500 -0.228104
-v 1.372294 2.494500 0.228104
-v 1.372712 0.084525 -0.461116
-v 1.372712 0.084525 0.461116
-v 1.376867 1.323225 -1.376868
-v 1.376868 1.323225 1.376867
-v 1.380400 2.463000 0.000000
-v 1.380400 2.463000 -0.000000
-v 1.381032 0.213600 0.718514
-v 1.381032 0.213600 -0.718514
-v 1.381968 2.400000 -0.229712
-v 1.381968 2.400000 0.229712
-v 1.382225 2.482687 0.000000
-v 1.382225 2.482687 0.000000
-v 1.382400 0.064800 0.000000
-v 1.382400 0.064800 0.000000
-v 1.383080 0.656400 -1.383080
-v 1.383080 0.656400 1.383080
-v 1.385053 2.498438 -0.230225
-v 1.385053 2.498438 0.230225
-v 1.385925 2.435437 0.000000
-v 1.385925 2.435437 -0.000000
-v 1.386270 2.463000 -0.465671
-v 1.386270 2.463000 0.465671
-v 1.390200 2.494500 0.000000
-v 1.390200 2.494500 -0.000000
-v 1.390545 1.929525 -1.020503
-v 1.390545 1.929525 1.020503
-v 1.400000 2.400000 0.000000
-v 1.400000 2.400000 0.000000
-v 1.400120 1.178400 -1.400120
-v 1.400120 1.178400 1.400120
-v 1.401276 2.242575 -0.729046
-v 1.401276 2.242575 0.729046
-v 1.401513 2.494500 -0.232961
-v 1.401513 2.494500 0.232961
-v 1.403125 2.498438 0.000000
-v 1.403125 2.498438 0.000000
-v 1.405953 2.435437 -0.472283
-v 1.405953 2.435437 0.472283
-v 1.406405 0.105600 -0.472434
-v 1.406405 0.105600 0.472434
-v 1.410060 0.771675 -1.410060
-v 1.410060 0.771675 1.410060
-v 1.414853 1.037175 -1.414853
-v 1.414853 1.037175 1.414853
-v 1.416240 0.384375 -1.039360
-v 1.416240 0.384375 1.039360
-v 1.419800 2.494500 0.000000
-v 1.419800 2.494500 -0.000000
-v 1.420000 0.900000 -1.420000
-v 1.420000 0.900000 -1.420000
-v 1.420000 0.900000 1.420000
-v 1.420000 0.900000 1.420000
-v 1.420490 2.482687 -0.236115
-v 1.420490 2.482687 0.236115
-v 1.421292 0.127575 0.477435
-v 1.421292 0.127575 -0.477435
-v 1.424640 0.150000 -0.478560
-v 1.424640 0.150000 -0.478560
-v 1.424640 0.150000 0.478560
-v 1.424640 0.150000 0.478560
-v 1.424640 2.400000 -0.478560
-v 1.424640 2.400000 0.478560
-v 1.426709 0.084525 -0.237149
-v 1.426709 0.084525 0.237149
-v 1.430863 0.260025 0.744440
-v 1.430863 0.260025 -0.744440
-v 1.437937 0.177075 0.483027
-v 1.437937 0.177075 -0.483027
-v 1.439025 2.482687 0.000000
-v 1.440800 2.463000 -0.239491
-v 1.440800 2.463000 0.239491
-v 1.443756 1.774800 -1.059553
-v 1.443756 1.774800 1.059553
-v 1.445325 0.084525 0.000000
-v 1.445325 0.084525 0.000000
-v 1.459600 2.463000 0.000000
-v 1.459600 2.463000 -0.000000
-v 1.461258 2.435437 -0.242892
-v 1.461258 2.435437 0.242892
-v 1.461727 0.105600 -0.242970
-v 1.461727 0.105600 0.242970
-v 1.466456 2.085600 -0.762958
-v 1.466456 2.085600 0.762958
-v 1.474028 0.213600 0.495150
-v 1.474028 0.213600 -0.495150
-v 1.476127 0.463200 -1.083310
-v 1.476127 0.463200 1.083310
-v 1.477200 0.127575 0.245542
-v 1.477200 0.127575 -0.245542
-v 1.480325 2.435437 0.000000
-v 1.480325 2.435437 -0.000000
-v 1.480680 0.150000 -0.246120
-v 1.480680 0.150000 0.246120
-v 1.480680 0.150000 0.246120
-v 1.480680 0.150000 -0.246120
-v 1.480680 2.400000 -0.246120
-v 1.480680 2.400000 0.246120
-v 1.480800 0.105600 0.000000
-v 1.480800 0.105600 0.000000
-v 1.491372 0.316800 -0.775921
-v 1.491372 0.316800 0.775921
-v 1.492110 1.621875 -1.095040
-v 1.492110 1.621875 1.095040
-v 1.494500 0.177075 0.248417
-v 1.494500 0.177075 -0.248417
-v 1.495635 2.242575 -0.502408
-v 1.495635 2.242575 0.502408
-v 1.496475 0.127575 0.000000
-v 1.496475 0.127575 0.000000
-v 1.500000 0.150000 0.000000
-v 1.500000 0.150000 0.000000
-v 1.500000 2.400000 0.000000
-v 1.500000 2.400000 0.000000
-v 1.514000 0.177075 -0.000000
-v 1.514000 0.177075 0.000000
-v 1.527214 0.260025 -0.513016
-v 1.527214 0.260025 0.513016
-v 1.528968 1.929525 -0.795481
-v 1.528968 1.929525 0.795481
-v 1.531158 0.553725 -1.123697
-v 1.531158 0.553725 1.123697
-v 1.532010 0.213600 0.254652
-v 1.532010 0.213600 -0.254652
-v 1.534395 1.471200 -1.126072
-v 1.534395 1.471200 1.126072
-v 1.552000 0.213600 0.000000
-v 1.552000 0.213600 0.000000
-v 1.554467 2.242575 -0.258385
-v 1.554467 2.242575 0.258385
-v 1.557220 0.384375 -0.810180
-v 1.557220 0.384375 0.810180
-v 1.565204 2.085600 -0.525778
-v 1.565204 2.085600 0.525778
-v 1.569396 1.323225 -1.151759
-v 1.569396 1.323225 1.151759
-v 1.574750 2.242575 0.000000
-v 1.574750 2.242575 0.000000
-v 1.576477 0.656400 -1.156956
-v 1.576477 0.656400 1.156956
-v 1.587289 0.260025 0.263841
-v 1.587289 0.260025 -0.263841
-v 1.587475 1.774800 -0.825921
-v 1.587475 1.774800 0.825921
-v 1.591798 0.316800 -0.534711
-v 1.591798 0.316800 0.534711
-v 1.595900 1.178400 -1.171210
-v 1.595900 1.178400 1.171210
-v 1.607230 0.771675 -1.179525
-v 1.607230 0.771675 1.179525
-v 1.608000 0.260025 0.000000
-v 1.608000 0.260025 0.000000
-v 1.612693 1.037175 -1.183534
-v 1.612693 1.037175 1.183534
-v 1.618560 0.900000 -1.187840
-v 1.618560 0.900000 -1.187840
-v 1.618560 0.900000 1.187840
-v 1.618560 0.900000 1.187840
-v 1.623068 0.463200 -0.844439
-v 1.623068 0.463200 0.844439
-v 1.626774 2.085600 -0.270404
-v 1.626774 2.085600 0.270404
-v 1.631925 1.929525 -0.548190
-v 1.631925 1.929525 0.548190
-v 1.640643 1.621875 -0.853583
-v 1.640643 1.621875 0.853583
-v 1.648000 2.085600 0.000000
-v 1.648000 2.085600 -0.000000
-v 1.654413 0.316800 -0.274998
-v 1.654413 0.316800 0.274998
-v 1.662080 0.384375 -0.558320
-v 1.662080 0.384375 0.558320
-v 1.676000 0.316800 0.000000
-v 1.676000 0.316800 0.000000
-v 1.683577 0.553725 -0.875920
-v 1.683577 0.553725 0.875920
-v 1.687137 1.471200 -0.877772
-v 1.687137 1.471200 0.877772
-v 1.694372 1.774800 -0.569167
-v 1.694372 1.774800 0.569167
-v 1.696119 1.929525 -0.281930
-v 1.696119 1.929525 0.281930
-v 1.700000 0.600000 0.000000
-v 1.700000 0.600000 0.000000
-v 1.700000 0.623100 0.178200
-v 1.700000 0.623100 -0.178200
-v 1.700000 0.685800 -0.316800
-v 1.700000 0.685800 0.316800
-v 1.700000 0.778200 0.415800
-v 1.700000 0.778200 -0.415800
-v 1.700000 0.890400 -0.475200
-v 1.700000 0.890400 0.475200
-v 1.700000 1.012500 -0.495000
-v 1.700000 1.012500 0.495000
-v 1.700000 1.134600 -0.475200
-v 1.700000 1.134600 0.475200
-v 1.700000 1.246800 0.415800
-v 1.700000 1.246800 -0.415800
-v 1.700000 1.339200 -0.316800
-v 1.700000 1.339200 0.316800
-v 1.700000 1.401900 0.178200
-v 1.700000 1.401900 -0.178200
-v 1.700000 1.425000 0.000000
-v 1.700000 1.425000 0.000000
-v 1.718250 1.929525 0.000000
-v 1.718250 1.929525 0.000000
-v 1.725622 1.323225 -0.897795
-v 1.725622 1.323225 0.897795
-v 1.727460 0.384375 -0.287140
-v 1.727460 0.384375 0.287140
-v 1.732362 0.463200 -0.581929
-v 1.732362 0.463200 0.581929
-v 1.733408 0.656400 -0.901846
-v 1.733408 0.656400 0.901846
-v 1.750000 0.384375 0.000000
-v 1.750000 0.384375 0.000000
-v 1.751120 1.621875 -0.588230
-v 1.751120 1.621875 0.588230
-v 1.754764 1.178400 -0.912957
-v 1.754764 1.178400 0.912957
-v 1.761022 1.774800 -0.292719
-v 1.761022 1.774800 0.292719
-v 1.767222 0.771675 -0.919439
-v 1.767222 0.771675 0.919439
-v 1.773229 1.037175 -0.922564
-v 1.773229 1.037175 0.922564
-v 1.779680 0.900000 -0.925920
-v 1.779680 0.900000 -0.925920
-v 1.779680 0.900000 0.925920
-v 1.779680 0.900000 0.925920
-v 1.784000 1.774800 0.000000
-v 1.784000 1.774800 0.000000
-v 1.796946 0.553725 -0.603624
-v 1.796946 0.553725 0.603624
-v 1.800507 0.463200 -0.299282
-v 1.800507 0.463200 0.299282
-v 1.800745 1.471200 -0.604900
-v 1.800745 1.471200 0.604900
-v 1.820003 1.621875 -0.302523
-v 1.820003 1.621875 0.302522
-v 1.824000 0.463200 0.000000
-v 1.824000 0.463200 0.000000
-v 1.841822 1.323225 -0.618698
-v 1.841822 1.323225 0.618698
-v 1.843750 1.621875 0.000000
-v 1.843750 1.621875 -0.000000
-v 1.850132 0.656400 -0.621490
-v 1.850132 0.656400 0.621490
-v 1.867631 0.553725 -0.310439
-v 1.867631 0.553725 0.310439
-v 1.871580 1.471200 -0.311096
-v 1.871580 1.471200 0.311096
-v 1.872927 1.178400 -0.629147
-v 1.872927 1.178400 0.629147
-v 1.886223 0.771675 -0.633613
-v 1.886223 0.771675 0.633613
-v 1.892000 0.553725 0.000000
-v 1.892000 0.553725 -0.000000
-v 1.892634 1.037175 -0.635767
-v 1.892634 1.037175 0.635767
-v 1.896000 1.471200 0.000000
-v 1.896000 1.471200 0.000000
-v 1.899520 0.900000 -0.638080
-v 1.899520 0.900000 -0.638080
-v 1.899520 0.900000 0.638080
-v 1.899520 0.900000 0.638080
-v 1.914272 1.323225 -0.318192
-v 1.914272 1.323225 0.318192
-v 1.922910 0.656400 -0.319628
-v 1.922910 0.656400 0.319628
-v 1.935900 1.444200 0.000000
-v 1.935900 1.444200 0.000000
-v 1.939250 1.323225 0.000000
-v 1.939250 1.323225 -0.000000
-v 1.939394 1.423221 -0.175100
-v 1.939394 1.423221 0.175100
-v 1.946601 1.178400 -0.323566
-v 1.946601 1.178400 0.323566
-v 1.948000 0.656400 0.000000
-v 1.948000 0.656400 -0.000000
-v 1.948879 1.366278 -0.311290
-v 1.948879 1.366278 0.311290
-v 1.960420 0.771675 -0.325863
-v 1.960420 0.771675 0.325863
-v 1.962857 1.282362 -0.408568
-v 1.962857 1.282362 0.408568
-v 1.967083 1.037175 -0.326970
-v 1.967083 1.037175 0.326970
-v 1.972000 1.178400 0.000000
-v 1.972000 1.178400 0.000000
-v 1.974240 0.900000 -0.328160
-v 1.974240 0.900000 0.328160
-v 1.974240 0.900000 0.328160
-v 1.979830 1.180464 -0.466934
-v 1.979830 1.180464 0.466934
-v 1.986000 0.771675 0.000000
-v 1.986000 0.771675 -0.000000
-v 1.992750 1.037175 0.000000
-v 1.992750 1.037175 0.000000
-v 1.998300 1.069575 -0.486390
-v 1.998300 1.069575 0.486390
-v 2.000000 0.900000 0.000000
-v 2.000000 0.900000 0.000000
-v 2.016770 0.958686 -0.466934
-v 2.016770 0.958686 0.466934
-v 2.033743 0.856788 -0.408568
-v 2.033743 0.856788 0.408568
-v 2.047721 0.772872 0.311290
-v 2.047721 0.772872 -0.311290
-v 2.057206 0.715929 0.175100
-v 2.057206 0.715929 -0.175100
-v 2.060700 0.694950 0.000000
-v 2.060700 0.694950 0.000000
-v 2.111200 1.497600 0.000000
-v 2.111200 1.497600 0.000000
-v 2.116979 1.479120 -0.166687
-v 2.116979 1.479120 0.166687
-v 2.132666 1.428960 -0.296333
-v 2.132666 1.428960 0.296333
-v 2.155782 1.355040 -0.388937
-v 2.155782 1.355040 0.388937
-v 2.183853 1.265280 -0.444499
-v 2.183853 1.265280 0.444499
-v 2.214400 1.167600 -0.463020
-v 2.214400 1.167600 0.463020
-v 2.237300 1.578900 0.000000
-v 2.237300 1.578900 0.000000
-v 2.244457 1.563171 -0.154289
-v 2.244457 1.563171 0.154289
-v 2.244947 1.069920 -0.444499
-v 2.244947 1.069920 0.444499
-v 2.263882 1.520478 -0.274291
-v 2.263882 1.520478 0.274291
-v 2.273018 0.980160 -0.388937
-v 2.273018 0.980160 0.388937
-v 2.292510 1.457562 -0.360007
-v 2.292510 1.457562 0.360007
-v 2.296134 0.906240 -0.296333
-v 2.296134 0.906240 0.296333
-v 2.311821 0.856080 -0.166687
-v 2.311821 0.856080 0.166687
-v 2.317600 0.837600 0.000000
-v 2.317600 0.837600 0.000000
-v 2.325600 1.681800 0.000000
-v 2.325600 1.681800 0.000000
-v 2.327271 1.381164 -0.411437
-v 2.327271 1.381164 0.411437
-v 2.333530 1.668948 -0.139234
-v 2.333530 1.668948 0.139234
-v 2.355053 1.634064 -0.247526
-v 2.355053 1.634064 0.247526
-v 2.365100 1.298025 -0.428580
-v 2.365100 1.298025 0.428580
-v 2.386771 1.582656 -0.324878
-v 2.386771 1.582656 0.324878
-v 2.387500 1.800000 0.000000
-v 2.387500 1.800000 0.000000
-v 2.395900 1.790025 0.122850
-v 2.395900 1.790025 -0.122850
-v 2.402929 1.214886 -0.411437
-v 2.402929 1.214886 0.411437
-v 2.418700 1.762950 -0.218400
-v 2.418700 1.762950 0.218400
-v 2.425286 1.520232 -0.371290
-v 2.425286 1.520232 0.371290
-v 2.434400 1.927200 0.000000
-v 2.434400 1.927200 0.000000
-v 2.437690 1.138488 -0.360007
-v 2.437690 1.138488 0.360007
-v 2.443270 1.919976 0.106466
-v 2.443270 1.919976 -0.106466
-v 2.452300 1.723050 -0.286650
-v 2.452300 1.723050 0.286650
-v 2.466318 1.075572 -0.274291
-v 2.466318 1.075572 0.274291
-v 2.467200 1.452300 -0.386760
-v 2.467200 1.452300 0.386760
-v 2.467347 1.900368 0.189274
-v 2.467347 1.900368 -0.189274
-v 2.477700 2.057100 0.000000
-v 2.477700 2.057100 0.000000
-v 2.485743 1.032879 -0.154289
-v 2.485743 1.032879 0.154289
-v 2.487343 2.052375 -0.091411
-v 2.487343 2.052375 0.091411
-v 2.492900 1.017150 0.000000
-v 2.492900 1.017150 0.000000
-v 2.493100 1.674600 -0.327600
-v 2.493100 1.674600 0.327600
-v 2.502829 1.871472 0.248422
-v 2.502829 1.871472 -0.248422
-v 2.509114 1.384368 -0.371290
-v 2.509114 1.384368 0.371290
-v 2.513518 2.039550 0.162509
-v 2.513518 2.039550 -0.162509
-v 2.528800 2.183400 0.000000
-v 2.537500 1.621875 -0.341250
-v 2.537500 1.621875 0.341250
-v 2.539821 2.180796 -0.079013
-v 2.539821 2.180796 0.079013
-v 2.545914 1.836384 -0.283910
-v 2.545914 1.836384 0.283910
-v 2.547629 1.321944 -0.324878
-v 2.547629 1.321944 0.324878
-v 2.552090 2.020650 -0.213293
-v 2.552090 2.020650 0.213293
-v 2.569734 2.173728 -0.140467
-v 2.569734 2.173728 0.140467
-v 2.579347 1.270536 -0.247526
-v 2.579347 1.270536 0.247526
-v 2.581900 1.569150 -0.327600
-v 2.581900 1.569150 0.327600
-v 2.592800 1.798200 -0.295740
-v 2.592800 1.798200 0.295740
-v 2.598929 1.997700 -0.243763
-v 2.598929 1.997700 0.243763
-v 2.599100 2.299800 0.000000
-v 2.599100 2.299800 0.000000
-v 2.600870 1.235652 -0.139234
-v 2.600870 1.235652 0.139234
-v 2.608800 1.222800 0.000000
-v 2.608800 1.222800 0.000000
-v 2.612406 2.298813 0.070600
-v 2.612406 2.298813 -0.070600
-v 2.613818 2.163312 -0.184363
-v 2.613818 2.163312 0.184363
-v 2.622700 1.520700 -0.286650
-v 2.622700 1.520700 0.286650
-v 2.639686 1.760016 -0.283910
-v 2.639686 1.760016 0.283910
-v 2.648521 2.296134 0.125510
-v 2.648521 2.296134 -0.125510
-v 2.649900 1.972725 0.253920
-v 2.649900 1.972725 -0.253920
-v 2.656300 1.480800 -0.218400
-v 2.656300 1.480800 0.218400
-v 2.667347 2.150664 -0.210701
-v 2.667347 2.150664 0.210701
-v 2.679100 1.453725 0.122850
-v 2.679100 1.453725 -0.122850
-v 2.682771 1.724928 0.248422
-v 2.682771 1.724928 -0.248422
-v 2.687500 1.443750 0.000000
-v 2.687500 1.443750 0.000000
-v 2.700000 2.400000 0.000000
-v 2.700000 2.400000 0.000000
-v 2.700000 2.400000 0.000000
-v 2.700871 1.947750 -0.243763
-v 2.700871 1.947750 0.243763
-v 2.701743 2.292186 0.164732
-v 2.701743 2.292186 -0.164732
-v 2.716800 2.400000 0.067500
-v 2.716800 2.400000 -0.067500
-v 2.716800 2.400000 -0.067500
-v 2.716800 2.400000 0.067500
-v 2.718253 1.696032 0.189274
-v 2.718253 1.696032 -0.189274
-v 2.725600 2.136900 -0.219480
-v 2.725600 2.136900 0.219480
-v 2.729800 2.420250 0.000000
-v 2.742330 1.676424 0.106466
-v 2.742330 1.676424 -0.106466
-v 2.747407 2.420406 -0.066744
-v 2.747407 2.420406 0.066744
-v 2.747710 1.924800 -0.213293
-v 2.747710 1.924800 0.213293
-v 2.751200 1.669200 0.000000
-v 2.751200 1.669200 0.000000
-v 2.758400 2.436000 0.000000
-v 2.762400 2.400000 0.120000
-v 2.762400 2.400000 -0.120000
-v 2.762400 2.400000 -0.120000
-v 2.762400 2.400000 0.120000
-v 2.766370 2.287392 0.188266
-v 2.766370 2.287392 -0.188266
-v 2.776365 2.436302 -0.064692
-v 2.776365 2.436302 0.064692
-v 2.783853 2.123136 -0.210701
-v 2.783853 2.123136 0.210701
-v 2.784600 2.447250 0.000000
-v 2.784600 2.447250 0.000000
-v 2.786282 1.905900 0.162509
-v 2.786282 1.905900 -0.162509
-v 2.795198 2.420829 -0.118656
-v 2.795198 2.420829 0.118656
-v 2.800000 2.400000 0.000000
-v 2.802528 2.447680 -0.061668
-v 2.802528 2.447680 0.061668
-v 2.807200 2.454000 0.000000
-v 2.811200 2.400000 -0.040500
-v 2.811200 2.400000 0.040500
-v 2.812457 1.893075 0.091411
-v 2.812457 1.893075 -0.091411
-v 2.822100 1.888350 0.000000
-v 2.822100 1.888350 0.000000
-v 2.824200 2.420250 0.000000
-v 2.824200 2.420250 0.000000
-v 2.824750 2.454529 -0.057996
-v 2.824750 2.454529 0.057996
-v 2.825000 2.456250 0.000000
-v 2.825000 2.456250 0.000000
-v 2.825126 2.437123 -0.115008
-v 2.825126 2.437123 0.115008
-v 2.829600 2.400000 0.157500
-v 2.829600 2.400000 -0.157500
-v 2.829600 2.400000 -0.157500
-v 2.829600 2.400000 0.157500
-v 2.836672 2.420519 -0.041256
-v 2.836672 2.420519 0.041256
-v 2.836700 2.282175 0.196110
-v 2.836700 2.282175 -0.196110
-v 2.836800 2.454000 0.000000
-v 2.836800 2.454000 0.000000
-v 2.837382 2.110488 -0.184363
-v 2.837382 2.110488 0.184363
-v 2.837600 2.436000 0.000000
-v 2.837600 2.436000 0.000000
-v 2.841400 2.447250 0.000000
-v 2.841400 2.447250 0.000000
-v 2.841600 2.400000 -0.072000
-v 2.841600 2.400000 0.072000
-v 2.841887 2.456841 -0.054000
-v 2.841887 2.456841 0.054000
-v 2.851189 2.448847 -0.109632
-v 2.851189 2.448847 0.109632
-v 2.851331 2.436454 -0.043308
-v 2.851331 2.436454 0.043308
-v 2.852794 2.454605 -0.050004
-v 2.852794 2.454605 0.050004
-v 2.856323 2.447812 -0.046332
-v 2.856323 2.447812 0.046332
-v 2.865626 2.421453 -0.155736
-v 2.865626 2.421453 0.155736
-v 2.870524 2.421250 -0.073344
-v 2.870524 2.421250 0.073344
-v 2.872387 2.455966 -0.103104
-v 2.872387 2.455966 0.103104
-v 2.881466 2.100072 -0.140467
-v 2.881466 2.100072 0.140467
-v 2.886400 2.400000 -0.094500
-v 2.886400 2.400000 0.094500
-v 2.887725 2.458444 -0.096000
-v 2.887725 2.458444 0.096000
-v 2.888602 2.437685 -0.076992
-v 2.888602 2.437685 0.076992
-v 2.896205 2.456246 0.088896
-v 2.896205 2.456246 -0.088896
-v 2.896829 2.449338 -0.082368
-v 2.896829 2.449338 0.082368
-v 2.896986 2.438333 -0.150948
-v 2.896986 2.438333 0.150948
-v 2.907030 2.276958 0.188266
-v 2.907030 2.276958 -0.188266
-v 2.911200 2.400000 -0.180000
-v 2.911200 2.400000 -0.180000
-v 2.911200 2.400000 0.180000
-v 2.911379 2.093004 -0.079013
-v 2.911379 2.093004 0.079013
-v 2.920412 2.422328 -0.096264
-v 2.920412 2.422328 0.096264
-v 2.922400 2.090400 0.000000
-v 2.922899 2.450567 -0.143892
-v 2.922899 2.450567 0.143892
-v 2.940800 2.400000 -0.108000
-v 2.940800 2.400000 0.108000
-v 2.942589 2.458082 -0.135324
-v 2.942589 2.458082 0.135324
-v 2.943526 2.439499 -0.101052
-v 2.943526 2.439499 0.101052
-v 2.951146 2.422210 -0.177984
-v 2.951146 2.422210 0.177984
-v 2.955275 2.460806 -0.126000
-v 2.955275 2.460806 0.126000
-v 2.956523 2.451588 -0.108108
-v 2.956523 2.451588 0.108108
-v 2.960179 2.458666 -0.116676
-v 2.960179 2.458666 0.116676
-v 2.971657 2.272164 0.164732
-v 2.971657 2.272164 -0.164732
-v 2.980990 2.423636 0.110016
-v 2.980990 2.423636 -0.110016
-v 2.984243 2.439802 -0.172512
-v 2.984243 2.439802 0.172512
-v 3.000000 2.400000 -0.187500
-v 3.000000 2.400000 -0.187500
-v 3.000000 2.400000 -0.112500
-v 3.000000 2.400000 0.112500
-v 3.000000 2.400000 0.187500
-v 3.009977 2.452655 -0.164448
-v 3.009977 2.452655 0.164448
-v 3.010221 2.441702 -0.115488
-v 3.010221 2.441702 0.115488
-v 3.024879 2.268216 0.125510
-v 3.024879 2.268216 -0.125510
-v 3.027834 2.460653 -0.154656
-v 3.027834 2.460653 0.154656
-v 3.029007 2.454319 -0.123552
-v 3.029007 2.454319 0.123552
-v 3.037300 2.463675 -0.144000
-v 3.037300 2.463675 0.144000
-v 3.037862 2.461603 0.133344
-v 3.037862 2.461603 -0.133344
-v 3.044212 2.423034 -0.185400
-v 3.044212 2.423034 0.185400
-v 3.046912 2.425059 0.114600
-v 3.046912 2.425059 -0.114600
-v 3.059200 2.400000 -0.108000
-v 3.059200 2.400000 0.108000
-v 3.060994 2.265537 0.070600
-v 3.060994 2.265537 -0.070600
-v 3.074300 2.264550 0.000000
-v 3.074300 2.264550 0.000000
-v 3.079200 2.441400 -0.179700
-v 3.079200 2.441400 0.179700
-v 3.082800 2.444100 -0.120300
-v 3.082800 2.444100 0.120300
-v 3.088800 2.400000 -0.180000
-v 3.088800 2.400000 -0.180000
-v 3.088800 2.400000 0.180000
-v 3.104737 2.454928 -0.171300
-v 3.104738 2.454928 0.171300
-v 3.107887 2.457291 -0.128700
-v 3.107887 2.457291 0.128700
-v 3.112835 2.426483 0.110016
-v 3.112835 2.426483 -0.110016
-v 3.113600 2.400000 -0.094500
-v 3.113600 2.400000 0.094500
-v 3.120600 2.463450 0.161100
-v 3.120600 2.463450 -0.161100
-v 3.122400 2.464800 0.138900
-v 3.122400 2.464800 -0.138900
-v 3.126562 2.466797 -0.150000
-v 3.126562 2.466797 0.150000
-v 3.137279 2.423859 -0.177984
-v 3.137279 2.423859 0.177984
-v 3.155379 2.446498 -0.115488
-v 3.155379 2.446498 0.115488
-v 3.158400 2.400000 -0.072000
-v 3.158400 2.400000 0.072000
-v 3.170400 2.400000 -0.157500
-v 3.170400 2.400000 0.157500
-v 3.170400 2.400000 -0.157500
-v 3.173413 2.427791 -0.096264
-v 3.173413 2.427791 0.096264
-v 3.174157 2.442998 -0.172512
-v 3.174157 2.442998 0.172512
-v 3.186768 2.460263 -0.123552
-v 3.186768 2.460263 0.123552
-v 3.188800 2.400000 -0.040500
-v 3.188800 2.400000 0.040500
-v 3.199498 2.457201 -0.164448
-v 3.199498 2.457201 0.164448
-v 3.200000 2.400000 0.000000
-v 3.206938 2.467997 0.133344
-v 3.206938 2.467997 -0.133344
-v 3.213366 2.466247 -0.154656
-v 3.213366 2.466247 0.154656
-v 3.215825 2.469919 -0.144000
-v 3.215825 2.469919 0.144000
-v 3.222074 2.448701 -0.101052
-v 3.222074 2.448701 0.101052
-v 3.222799 2.424616 -0.155736
-v 3.222799 2.424616 0.155736
-v 3.223301 2.428868 -0.073344
-v 3.223301 2.428868 0.073344
-v 3.237600 2.400000 -0.120000
-v 3.237600 2.400000 0.120000
-v 3.237600 2.400000 -0.120000
-v 3.257153 2.429599 -0.041256
-v 3.257153 2.429599 0.041256
-v 3.259252 2.462994 -0.108108
-v 3.259252 2.462994 0.108108
-v 3.261414 2.444467 -0.150948
-v 3.261414 2.444467 0.150948
-v 3.269625 2.429869 0.000000
-v 3.269625 2.429869 0.000000
-v 3.276998 2.450515 -0.076992
-v 3.276998 2.450515 0.076992
-v 3.283200 2.400000 -0.067500
-v 3.283200 2.400000 0.067500
-v 3.283200 2.400000 -0.067500
-v 3.284621 2.470934 -0.116676
-v 3.284621 2.470934 0.116676
-v 3.286576 2.459289 -0.143892
-v 3.286576 2.459289 0.143892
-v 3.293227 2.425240 -0.118656
-v 3.293227 2.425240 0.118656
-v 3.297850 2.472787 -0.126000
-v 3.297850 2.472788 0.126000
-v 3.298611 2.468818 -0.135324
-v 3.298611 2.468818 0.135324
-v 3.300000 2.400000 0.000000
-v 3.300000 2.400000 0.000000
-v 3.314269 2.451746 -0.043308
-v 3.314269 2.451746 0.043308
-v 3.318946 2.465243 -0.082368
-v 3.318946 2.465243 0.082368
-v 3.328000 2.452200 0.000000
-v 3.328000 2.452200 0.000000
-v 3.333274 2.445677 -0.115008
-v 3.333274 2.445677 0.115008
-v 3.341018 2.425663 -0.066744
-v 3.341018 2.425663 0.066744
-v 3.348595 2.473354 0.088896
-v 3.348595 2.473354 -0.088896
-v 3.358286 2.461009 -0.109632
-v 3.358286 2.461009 0.109632
-v 3.358625 2.425819 0.000000
-v 3.359452 2.466769 -0.046332
-v 3.359452 2.466769 0.046332
-v 3.365400 2.475150 -0.096000
-v 3.365400 2.475150 0.096000
-v 3.368813 2.470934 -0.103104
-v 3.368813 2.470934 0.103104
-v 3.374375 2.467331 0.000000
-v 3.374375 2.467331 0.000000
-v 3.382035 2.446498 -0.064692
-v 3.382035 2.446498 0.064692
-v 3.392006 2.474995 -0.050004
-v 3.392006 2.474995 0.050004
-v 3.400000 2.446800 0.000000
-v 3.406947 2.462176 -0.061668
-v 3.406947 2.462176 0.061668
-v 3.408000 2.475600 0.000000
-v 3.408000 2.475600 0.000000
-v 3.411237 2.476753 -0.054000
-v 3.411237 2.476753 0.054000
-v 3.416450 2.472371 -0.057996
-v 3.416450 2.472371 0.057996
-v 3.424875 2.462606 0.000000
-v 3.428125 2.477344 0.000000
-v 3.428125 2.477344 0.000000
-v 3.434000 2.472900 0.000000
-
-f 2909 2921 2939
-f 2939 2931 2909
-f 2869 2877 2921
-f 2921 2909 2869
-f 2819 2827 2877
-f 2877 2869 2819
-f 2737 2747 2827
-f 2827 2819 2737
-f 2669 2673 2747
-f 2747 2737 2669
-f 2567 2575 2673
-f 2673 2669 2567
-f 2476 2480 2575
-f 2575 2567 2476
-f 2358 2362 2480
-f 2480 2476 2358
-f 2158 2162 2362
-f 2362 2358 2158
-f 1715 1812 2162
-f 2162 2158 1715
-f 2901 2909 2931
-f 2931 2917 2901
-f 2863 2869 2909
-f 2909 2901 2863
-f 2813 2819 2869
-f 2869 2863 2813
-f 2729 2737 2819
-f 2819 2813 2729
-f 2663 2669 2737
-f 2737 2729 2663
-f 2561 2567 2669
-f 2669 2663 2561
-f 2468 2476 2567
-f 2567 2561 2468
-f 2350 2358 2476
-f 2476 2468 2350
-f 2152 2158 2358
-f 2358 2350 2152
-f 1717 1715 2158
-f 2158 2152 1717
-f 2903 2901 2917
-f 2917 2923 2903
-f 2865 2863 2901
-f 2901 2903 2865
-f 2815 2813 2863
-f 2863 2865 2815
-f 2733 2729 2813
-f 2813 2815 2733
-f 2665 2663 2729
-f 2729 2733 2665
-f 2564 2561 2663
-f 2663 2665 2564
-f 2473 2468 2561
-f 2561 2564 2473
-f 2354 2350 2468
-f 2468 2473 2354
-f 2155 2152 2350
-f 2350 2354 2155
-f 1927 1717 2152
-f 2152 2155 1927
-f 2911 2903 2923
-f 2923 2935 2911
-f 2875 2865 2903
-f 2903 2911 2875
-f 2823 2815 2865
-f 2865 2875 2823
-f 2741 2733 2815
-f 2815 2823 2741
-f 2671 2665 2733
-f 2733 2741 2671
-f 2571 2564 2665
-f 2665 2671 2571
-f 2478 2473 2564
-f 2564 2571 2478
-f 2360 2354 2473
-f 2473 2478 2360
-f 2160 2155 2354
-f 2354 2360 2160
-f 1718 1927 2155
-f 2155 2160 1718
-f 2929 2911 2935
-f 2935 2947 2929
-f 2881 2875 2911
-f 2911 2929 2881
-f 2829 2823 2875
-f 2875 2881 2829
-f 2751 2741 2823
-f 2823 2829 2751
-f 2677 2671 2741
-f 2741 2751 2677
-f 2577 2571 2671
-f 2671 2677 2577
-f 2482 2478 2571
-f 2571 2577 2482
-f 2364 2360 2478
-f 2478 2482 2364
-f 2164 2160 2360
-f 2360 2364 2164
-f 1842 1718 2160
-f 2160 2164 1842
-f 2945 2929 2947
-f 2947 2959 2945
-f 2897 2881 2929
-f 2929 2945 2897
-f 2835 2829 2881
-f 2881 2897 2835
-f 2761 2751 2829
-f 2829 2835 2761
-f 2679 2677 2751
-f 2751 2761 2679
-f 2579 2577 2677
-f 2677 2679 2579
-f 2486 2482 2577
-f 2577 2579 2486
-f 2368 2364 2482
-f 2482 2486 2368
-f 2172 2164 2364
-f 2364 2368 2172
-f 1725 1842 2164
-f 2164 2172 1725
-f 2965 2945 2959
-f 2959 2981 2965
-f 2907 2897 2945
-f 2945 2965 2907
-f 2845 2835 2897
-f 2897 2907 2845
-f 2769 2761 2835
-f 2835 2845 2769
-f 2685 2679 2761
-f 2761 2769 2685
-f 2587 2579 2679
-f 2679 2685 2587
-f 2491 2486 2579
-f 2579 2587 2491
-f 2370 2368 2486
-f 2486 2491 2370
-f 2174 2172 2368
-f 2368 2370 2174
-f 1834 1725 2172
-f 2172 2174 1834
-f 2982 2965 2981
-f 2981 2988 2982
-f 2933 2907 2965
-f 2965 2982 2933
-f 2855 2845 2907
-f 2907 2933 2855
-f 2779 2769 2845
-f 2845 2855 2779
-f 2691 2685 2769
-f 2769 2779 2691
-f 2595 2587 2685
-f 2685 2691 2595
-f 2500 2491 2587
-f 2587 2595 2500
-f 2374 2370 2491
-f 2491 2500 2374
-f 2178 2174 2370
-f 2370 2374 2178
-f 1716 1834 2174
-f 2174 2178 1716
-f 2990 2982 2988
-f 2988 3002 2990
-f 2949 2933 2982
-f 2982 2990 2949
-f 2871 2855 2933
-f 2933 2949 2871
-f 2791 2779 2855
-f 2855 2871 2791
-f 2699 2691 2779
-f 2779 2791 2699
-f 2601 2595 2691
-f 2691 2699 2601
-f 2506 2500 2595
-f 2595 2601 2506
-f 2378 2374 2500
-f 2500 2506 2378
-f 2180 2178 2374
-f 2374 2378 2180
-f 1714 1716 2178
-f 2178 2180 1714
-f 3008 2990 3002
-f 3002 3024 3008
-f 2973 2949 2990
-f 2990 3008 2973
-f 2889 2871 2949
-f 2949 2973 2889
-f 2805 2791 2871
-f 2871 2889 2805
-f 2711 2699 2791
-f 2791 2805 2711
-f 2611 2601 2699
-f 2699 2711 2611
-f 2521 2506 2601
-f 2601 2611 2521
-f 2387 2378 2506
-f 2506 2521 2387
-f 2191 2180 2378
-f 2378 2387 2191
-f 1810 1714 2180
-f 2180 2191 1810
-f 1464 1460 1813
-f 1813 1821 1464
-f 1264 1260 1460
-f 1460 1464 1264
-f 1146 1142 1260
-f 1260 1264 1146
-f 1055 1047 1142
-f 1142 1146 1055
-f 953 949 1047
-f 1047 1055 953
-f 885 875 949
-f 949 953 885
-f 803 795 875
-f 875 885 803
-f 753 745 795
-f 795 803 753
-f 713 701 745
-f 745 753 713
-f 691 683 701
-f 701 713 691
-f 1470 1464 1821
-f 1821 1829 1470
-f 1272 1264 1464
-f 1464 1470 1272
-f 1154 1146 1264
-f 1264 1272 1154
-f 1061 1055 1146
-f 1146 1154 1061
-f 959 953 1055
-f 1055 1061 959
-f 893 885 953
-f 953 959 893
-f 809 803 885
-f 885 893 809
-f 759 753 803
-f 803 809 759
-f 721 713 753
-f 753 759 721
-f 705 691 713
-f 713 721 705
-f 1469 1470 1829
-f 1829 1835 1469
-f 1268 1272 1470
-f 1470 1469 1268
-f 1151 1154 1272
-f 1272 1268 1151
-f 1060 1061 1154
-f 1154 1151 1060
-f 957 959 1061
-f 1061 1060 957
-f 889 893 959
-f 959 957 889
-f 807 809 893
-f 893 889 807
-f 757 759 809
-f 809 807 757
-f 719 721 759
-f 759 757 719
-f 699 705 721
-f 721 719 699
-f 1462 1469 1835
-f 1835 1839 1462
-f 1262 1268 1469
-f 1469 1462 1262
-f 1144 1151 1268
-f 1268 1262 1144
-f 1051 1060 1151
-f 1151 1144 1051
-f 951 957 1060
-f 1060 1051 951
-f 881 889 957
-f 957 951 881
-f 799 807 889
-f 889 881 799
-f 747 757 807
-f 807 799 747
-f 711 719 757
-f 757 747 711
-f 687 699 719
-f 719 711 687
-f 1458 1462 1839
-f 1839 1843 1458
-f 1258 1262 1462
-f 1462 1458 1258
-f 1140 1144 1262
-f 1262 1258 1140
-f 1045 1051 1144
-f 1144 1140 1045
-f 945 951 1051
-f 1051 1045 945
-f 871 881 951
-f 951 945 871
-f 793 799 881
-f 881 871 793
-f 741 747 799
-f 799 793 741
-f 693 711 747
-f 747 741 693
-f 675 687 711
-f 711 693 675
-f 1450 1458 1843
-f 1843 1838 1450
-f 1254 1258 1458
-f 1458 1450 1254
-f 1136 1140 1258
-f 1258 1254 1136
-f 1043 1045 1140
-f 1140 1136 1043
-f 943 945 1045
-f 1045 1043 943
-f 861 871 945
-f 945 943 861
-f 787 793 871
-f 871 861 787
-f 725 741 793
-f 793 787 725
-f 677 693 741
-f 741 725 677
-f 663 675 693
-f 693 677 663
-f 1448 1450 1838
-f 1838 1834 1448
-f 1252 1254 1450
-f 1450 1448 1252
-f 1133 1136 1254
-f 1254 1252 1133
-f 1035 1043 1136
-f 1136 1133 1035
-f 937 943 1043
-f 1043 1035 937
-f 853 861 943
-f 943 937 853
-f 777 787 861
-f 861 853 777
-f 715 725 787
-f 787 777 715
-f 657 677 725
-f 725 715 657
-f 642 663 677
-f 677 657 642
-f 1444 1448 1834
-f 1834 1828 1444
-f 1248 1252 1448
-f 1448 1444 1248
-f 1122 1133 1252
-f 1252 1248 1122
-f 1027 1035 1133
-f 1133 1122 1027
-f 931 937 1035
-f 1035 1027 931
-f 843 853 937
-f 937 931 843
-f 767 777 853
-f 853 843 767
-f 689 715 777
-f 777 767 689
-f 640 657 715
-f 715 689 640
-f 634 642 657
-f 657 640 634
-f 1442 1444 1828
-f 1828 1820 1442
-f 1244 1248 1444
-f 1444 1442 1244
-f 1116 1122 1248
-f 1248 1244 1116
-f 1021 1027 1122
-f 1122 1116 1021
-f 923 931 1027
-f 1027 1021 923
-f 831 843 931
-f 931 923 831
-f 751 767 843
-f 843 831 751
-f 673 689 767
-f 767 751 673
-f 632 640 689
-f 689 673 632
-f 620 634 640
-f 640 632 620
-f 1429 1442 1820
-f 1820 1811 1429
-f 1233 1244 1442
-f 1442 1429 1233
-f 1106 1116 1244
-f 1244 1233 1106
-f 1011 1021 1116
-f 1116 1106 1011
-f 911 923 1021
-f 1021 1011 911
-f 817 831 923
-f 923 911 817
-f 733 751 831
-f 831 817 733
-f 649 673 751
-f 751 733 649
-f 614 632 673
-f 673 649 614
-f 597 620 632
-f 632 614 597
-f 714 702 684
-f 684 692 714
-f 754 746 702
-f 702 714 754
-f 804 796 746
-f 746 754 804
-f 886 876 796
-f 796 804 886
-f 954 950 876
-f 876 886 954
-f 1056 1048 950
-f 950 954 1056
-f 1147 1143 1048
-f 1048 1056 1147
-f 1265 1261 1143
-f 1143 1147 1265
-f 1465 1461 1261
-f 1261 1265 1465
-f 1915 1817 1461
-f 1461 1465 1915
-f 722 714 692
-f 692 706 722
-f 760 754 714
-f 714 722 760
-f 810 804 754
-f 754 760 810
-f 894 886 804
-f 804 810 894
-f 960 954 886
-f 886 894 960
-f 1062 1056 954
-f 954 960 1062
-f 1155 1147 1056
-f 1056 1062 1155
-f 1273 1265 1147
-f 1147 1155 1273
-f 1471 1465 1265
-f 1265 1273 1471
-f 1917 1915 1465
-f 1465 1471 1917
-f 720 722 706
-f 706 700 720
-f 758 760 722
-f 722 720 758
-f 808 810 760
-f 760 758 808
-f 890 894 810
-f 810 808 890
-f 958 960 894
-f 894 890 958
-f 1059 1062 960
-f 960 958 1059
-f 1150 1155 1062
-f 1062 1059 1150
-f 1269 1273 1155
-f 1155 1150 1269
-f 1468 1471 1273
-f 1273 1269 1468
-f 1697 1917 1471
-f 1471 1468 1697
-f 712 720 700
-f 700 688 712
-f 748 758 720
-f 720 712 748
-f 800 808 758
-f 758 748 800
-f 882 890 808
-f 808 800 882
-f 952 958 890
-f 890 882 952
-f 1052 1059 958
-f 958 952 1052
-f 1145 1150 1059
-f 1059 1052 1145
-f 1263 1269 1150
-f 1150 1145 1263
-f 1463 1468 1269
-f 1269 1263 1463
-f 1919 1697 1468
-f 1468 1463 1919
-f 694 712 688
-f 688 676 694
-f 742 748 712
-f 712 694 742
-f 794 800 748
-f 748 742 794
-f 872 882 800
-f 800 794 872
-f 946 952 882
-f 882 872 946
-f 1046 1052 952
-f 952 946 1046
-f 1141 1145 1052
-f 1052 1046 1141
-f 1259 1263 1145
-f 1145 1141 1259
-f 1459 1463 1263
-f 1263 1259 1459
-f 1845 1919 1463
-f 1463 1459 1845
-f 678 694 676
-f 676 664 678
-f 726 742 694
-f 694 678 726
-f 788 794 742
-f 742 726 788
-f 862 872 794
-f 794 788 862
-f 944 946 872
-f 872 862 944
-f 1044 1046 946
-f 946 944 1044
-f 1137 1141 1046
-f 1046 1044 1137
-f 1255 1259 1141
-f 1141 1137 1255
-f 1451 1459 1259
-f 1259 1255 1451
-f 1898 1845 1459
-f 1459 1451 1898
-f 658 678 664
-f 664 642 658
-f 716 726 678
-f 678 658 716
-f 778 788 726
-f 726 716 778
-f 854 862 788
-f 788 778 854
-f 938 944 862
-f 862 854 938
-f 1036 1044 944
-f 944 938 1036
-f 1132 1137 1044
-f 1044 1036 1132
-f 1253 1255 1137
-f 1137 1132 1253
-f 1449 1451 1255
-f 1255 1253 1449
-f 1837 1898 1451
-f 1451 1449 1837
-f 641 658 642
-f 642 635 641
-f 690 716 658
-f 658 641 690
-f 768 778 716
-f 716 690 768
-f 844 854 778
-f 778 768 844
-f 932 938 854
-f 854 844 932
-f 1028 1036 938
-f 938 932 1028
-f 1123 1132 1036
-f 1036 1028 1123
-f 1249 1253 1132
-f 1132 1123 1249
-f 1445 1449 1253
-f 1253 1249 1445
-f 1918 1837 1449
-f 1449 1445 1918
-f 633 641 635
-f 635 621 633
-f 674 690 641
-f 641 633 674
-f 752 768 690
-f 690 674 752
-f 832 844 768
-f 768 752 832
-f 924 932 844
-f 844 832 924
-f 1022 1028 932
-f 932 924 1022
-f 1117 1123 1028
-f 1028 1022 1117
-f 1245 1249 1123
-f 1123 1117 1245
-f 1443 1445 1249
-f 1249 1245 1443
-f 1916 1918 1445
-f 1445 1443 1916
-f 616 633 621
-f 621 600 616
-f 654 674 633
-f 633 616 654
-f 737 752 674
-f 674 654 737
-f 822 832 752
-f 752 737 822
-f 914 924 832
-f 832 822 914
-f 1014 1022 924
-f 924 914 1014
-f 1104 1117 1022
-f 1022 1014 1104
-f 1237 1245 1117
-f 1117 1104 1237
-f 1433 1443 1245
-f 1245 1237 1433
-f 1819 1916 1443
-f 1443 1433 1819
-f 2159 2163 1816
-f 1816 1822 2159
-f 2359 2363 2163
-f 2163 2159 2359
-f 2477 2481 2363
-f 2363 2359 2477
-f 2568 2576 2481
-f 2481 2477 2568
-f 2670 2674 2576
-f 2576 2568 2670
-f 2738 2748 2674
-f 2674 2670 2738
-f 2820 2828 2748
-f 2748 2738 2820
-f 2870 2878 2828
-f 2828 2820 2870
-f 2910 2922 2878
-f 2878 2870 2910
-f 2932 2940 2922
-f 2922 2910 2932
-f 2153 2159 1822
-f 1822 1830 2153
-f 2351 2359 2159
-f 2159 2153 2351
-f 2469 2477 2359
-f 2359 2351 2469
-f 2562 2568 2477
-f 2477 2469 2562
-f 2664 2670 2568
-f 2568 2562 2664
-f 2730 2738 2670
-f 2670 2664 2730
-f 2814 2820 2738
-f 2738 2730 2814
-f 2864 2870 2820
-f 2820 2814 2864
-f 2902 2910 2870
-f 2870 2864 2902
-f 2918 2932 2910
-f 2910 2902 2918
-f 2154 2153 1830
-f 1830 1836 2154
-f 2355 2351 2153
-f 2153 2154 2355
-f 2472 2469 2351
-f 2351 2355 2472
-f 2563 2562 2469
-f 2469 2472 2563
-f 2666 2664 2562
-f 2562 2563 2666
-f 2734 2730 2664
-f 2664 2666 2734
-f 2816 2814 2730
-f 2730 2734 2816
-f 2866 2864 2814
-f 2814 2816 2866
-f 2904 2902 2864
-f 2864 2866 2904
-f 2924 2918 2902
-f 2902 2904 2924
-f 2161 2154 1836
-f 1836 1840 2161
-f 2361 2355 2154
-f 2154 2161 2361
-f 2479 2472 2355
-f 2355 2361 2479
-f 2572 2563 2472
-f 2472 2479 2572
-f 2672 2666 2563
-f 2563 2572 2672
-f 2742 2734 2666
-f 2666 2672 2742
-f 2824 2816 2734
-f 2734 2742 2824
-f 2876 2866 2816
-f 2816 2824 2876
-f 2912 2904 2866
-f 2866 2876 2912
-f 2936 2924 2904
-f 2904 2912 2936
-f 2165 2161 1840
-f 1840 1844 2165
-f 2365 2361 2161
-f 2161 2165 2365
-f 2483 2479 2361
-f 2361 2365 2483
-f 2578 2572 2479
-f 2479 2483 2578
-f 2678 2672 2572
-f 2572 2578 2678
-f 2752 2742 2672
-f 2672 2678 2752
-f 2830 2824 2742
-f 2742 2752 2830
-f 2882 2876 2824
-f 2824 2830 2882
-f 2930 2912 2876
-f 2876 2882 2930
-f 2948 2936 2912
-f 2912 2930 2948
-f 2173 2165 1844
-f 1844 1841 2173
-f 2369 2365 2165
-f 2165 2173 2369
-f 2487 2483 2365
-f 2365 2369 2487
-f 2580 2578 2483
-f 2483 2487 2580
-f 2680 2678 2578
-f 2578 2580 2680
-f 2762 2752 2678
-f 2678 2680 2762
-f 2836 2830 2752
-f 2752 2762 2836
-f 2898 2882 2830
-f 2830 2836 2898
-f 2946 2930 2882
-f 2882 2898 2946
-f 2960 2948 2930
-f 2930 2946 2960
-f 2175 2173 1841
-f 1841 1837 2175
-f 2371 2369 2173
-f 2173 2175 2371
-f 2490 2487 2369
-f 2369 2371 2490
-f 2588 2580 2487
-f 2487 2490 2588
-f 2686 2680 2580
-f 2580 2588 2686
-f 2770 2762 2680
-f 2680 2686 2770
-f 2846 2836 2762
-f 2762 2770 2846
-f 2908 2898 2836
-f 2836 2846 2908
-f 2966 2946 2898
-f 2898 2908 2966
-f 2981 2960 2946
-f 2946 2966 2981
-f 2179 2175 1837
-f 1837 1831 2179
-f 2375 2371 2175
-f 2175 2179 2375
-f 2501 2490 2371
-f 2371 2375 2501
-f 2596 2588 2490
-f 2490 2501 2596
-f 2692 2686 2588
-f 2588 2596 2692
-f 2780 2770 2686
-f 2686 2692 2780
-f 2856 2846 2770
-f 2770 2780 2856
-f 2934 2908 2846
-f 2846 2856 2934
-f 2983 2966 2908
-f 2908 2934 2983
-f 2989 2981 2966
-f 2966 2983 2989
-f 2181 2179 1831
-f 1831 1823 2181
-f 2379 2375 2179
-f 2179 2181 2379
-f 2507 2501 2375
-f 2375 2379 2507
-f 2602 2596 2501
-f 2501 2507 2602
-f 2700 2692 2596
-f 2596 2602 2700
-f 2792 2780 2692
-f 2692 2700 2792
-f 2872 2856 2780
-f 2780 2792 2872
-f 2950 2934 2856
-f 2856 2872 2950
-f 2991 2983 2934
-f 2934 2950 2991
-f 3003 2989 2983
-f 2983 2991 3003
-f 2194 2181 1823
-f 1823 1818 2194
-f 2391 2379 2181
-f 2181 2194 2391
-f 2518 2507 2379
-f 2379 2391 2518
-f 2614 2602 2507
-f 2507 2518 2614
-f 2712 2700 2602
-f 2602 2614 2712
-f 2806 2792 2700
-f 2700 2712 2806
-f 2890 2872 2792
-f 2792 2806 2890
-f 2974 2950 2872
-f 2872 2890 2974
-f 3009 2991 2950
-f 2950 2974 3009
-f 3025 3003 2991
-f 2991 3009 3025
-f 3040 3008 3024
-f 3024 3048 3040
-f 3018 2973 3008
-f 3008 3040 3018
-f 2943 2889 2973
-f 2973 3018 2943
-f 2841 2805 2889
-f 2889 2943 2841
-f 2731 2711 2805
-f 2805 2841 2731
-f 2645 2611 2711
-f 2711 2731 2645
-f 2529 2521 2611
-f 2611 2645 2529
-f 2402 2387 2521
-f 2521 2529 2402
-f 2208 2191 2387
-f 2387 2402 2208
-f 1806 1810 2191
-f 2191 2208 1806
-f 3072 3040 3048
-f 3048 3078 3072
-f 3044 3018 3040
-f 3040 3072 3044
-f 2994 2943 3018
-f 3018 3044 2994
-f 2883 2841 2943
-f 2943 2994 2883
-f 2773 2731 2841
-f 2841 2883 2773
-f 2659 2645 2731
-f 2731 2773 2659
-f 2539 2529 2645
-f 2645 2659 2539
-f 2410 2402 2529
-f 2529 2539 2410
-f 2222 2208 2402
-f 2402 2410 2222
-f 1694 1806 2208
-f 2208 2222 1694
-f 3092 3072 3078
-f 3078 3116 3092
-f 3074 3044 3072
-f 3072 3092 3074
-f 3030 2994 3044
-f 3044 3074 3030
-f 2937 2883 2994
-f 2994 3030 2937
-f 2810 2773 2883
-f 2883 2937 2810
-f 2683 2659 2773
-f 2773 2810 2683
-f 2554 2539 2659
-f 2659 2683 2554
-f 2420 2410 2539
-f 2539 2554 2420
-f 2238 2222 2410
-f 2410 2420 2238
-f 1930 1694 2222
-f 2222 2238 1930
-f 3132 3092 3116
-f 3116 3142 3132
-f 3090 3074 3092
-f 3092 3132 3090
-f 3054 3030 3074
-f 3074 3090 3054
-f 2984 2937 3030
-f 3030 3054 2984
-f 2837 2810 2937
-f 2937 2984 2837
-f 2705 2683 2810
-f 2810 2837 2705
-f 2574 2554 2683
-f 2683 2705 2574
-f 2430 2420 2554
-f 2554 2574 2430
-f 2247 2238 2420
-f 2420 2430 2247
-f 1913 1930 2238
-f 2238 2247 1913
-f 3150 3132 3142
-f 3142 3156 3150
-f 3128 3090 3132
-f 3132 3150 3128
-f 3076 3054 3090
-f 3090 3128 3076
-f 3014 2984 3054
-f 3054 3076 3014
-f 2861 2837 2984
-f 2984 3014 2861
-f 2723 2705 2837
-f 2837 2861 2723
-f 2585 2574 2705
-f 2705 2723 2585
-f 2438 2430 2574
-f 2574 2585 2438
-f 2253 2247 2430
-f 2430 2438 2253
-f 1711 1913 2247
-f 2247 2253 1711
-f 3162 3150 3156
-f 3156 3172 3162
-f 3148 3128 3150
-f 3150 3162 3148
-f 3088 3076 3128
-f 3128 3148 3088
-f 3036 3014 3076
-f 3076 3088 3036
-f 2893 2861 3014
-f 3014 3036 2893
-f 2743 2723 2861
-f 2861 2893 2743
-f 2599 2585 2723
-f 2723 2743 2599
-f 2450 2438 2585
-f 2585 2599 2450
-f 2267 2253 2438
-f 2438 2450 2267
-f 1794 1711 2253
-f 2253 2267 1794
-f 3178 3162 3172
-f 3172 3184 3178
-f 3154 3148 3162
-f 3162 3178 3154
-f 3118 3088 3148
-f 3148 3154 3118
-f 3046 3036 3088
-f 3088 3118 3046
-f 2915 2893 3036
-f 3036 3046 2915
-f 2763 2743 2893
-f 2893 2915 2763
-f 2615 2599 2743
-f 2743 2763 2615
-f 2452 2450 2599
-f 2599 2615 2452
-f 2277 2267 2450
-f 2450 2452 2277
-f 1710 1794 2267
-f 2267 2277 1710
-f 3188 3178 3184
-f 3184 3200 3188
-f 3164 3154 3178
-f 3178 3188 3164
-f 3130 3118 3154
-f 3154 3164 3130
-f 3058 3046 3118
-f 3118 3130 3058
-f 2941 2915 3046
-f 3046 3058 2941
-f 2775 2763 2915
-f 2915 2941 2775
-f 2627 2615 2763
-f 2763 2775 2627
-f 2458 2452 2615
-f 2615 2627 2458
-f 2287 2277 2452
-f 2452 2458 2287
-f 1910 1710 2277
-f 2277 2287 1910
-f 3198 3188 3200
-f 3200 3209 3198
-f 3170 3164 3188
-f 3188 3198 3170
-f 3136 3130 3164
-f 3164 3170 3136
-f 3064 3058 3130
-f 3130 3136 3064
-f 2955 2941 3058
-f 3058 3064 2955
-f 2781 2775 2941
-f 2941 2955 2781
-f 2636 2627 2775
-f 2775 2781 2636
-f 2462 2458 2627
-f 2627 2636 2462
-f 2295 2287 2458
-f 2458 2462 2295
-f 1909 1910 2287
-f 2287 2295 1909
-f 3202 3198 3209
-f 3209 3213 3202
-f 3174 3170 3198
-f 3198 3202 3174
-f 3138 3136 3170
-f 3170 3174 3138
-f 3066 3064 3136
-f 3136 3138 3066
-f 2961 2955 3064
-f 3064 3066 2961
-f 2783 2781 2955
-f 2955 2961 2783
-f 2642 2636 2781
-f 2781 2783 2642
-f 2464 2462 2636
-f 2636 2642 2464
-f 2297 2295 2462
-f 2462 2464 2297
-f 1784 1909 2295
-f 2295 2297 1784
-f 1414 1429 1811
-f 1811 1807 1414
-f 1220 1233 1429
-f 1429 1414 1220
-f 1093 1106 1233
-f 1233 1220 1093
-f 977 1011 1106
-f 1106 1093 977
-f 891 911 1011
-f 1011 977 891
-f 781 817 911
-f 911 891 781
-f 679 733 817
-f 817 781 679
-f 604 649 733
-f 733 679 604
-f 571 614 649
-f 649 604 571
-f 561 597 614
-f 614 571 561
-f 1400 1414 1807
-f 1807 1804 1400
-f 1212 1220 1414
-f 1414 1400 1212
-f 1083 1093 1220
-f 1220 1212 1083
-f 963 977 1093
-f 1093 1083 963
-f 849 891 977
-f 977 963 849
-f 739 781 891
-f 891 849 739
-f 628 679 781
-f 781 739 628
-f 565 604 679
-f 679 628 565
-f 530 571 604
-f 604 565 530
-f 524 561 571
-f 571 530 524
-f 1386 1400 1804
-f 1804 1802 1386
-f 1202 1212 1400
-f 1400 1386 1202
-f 1070 1083 1212
-f 1212 1202 1070
-f 939 963 1083
-f 1083 1070 939
-f 814 849 963
-f 963 939 814
-f 685 739 849
-f 849 814 685
-f 585 628 739
-f 739 685 585
-f 528 565 628
-f 628 585 528
-f 510 530 565
-f 565 528 510
-f 508 524 530
-f 530 510 508
-f 1375 1386 1802
-f 1802 1800 1375
-f 1192 1202 1386
-f 1386 1375 1192
-f 1050 1070 1202
-f 1202 1192 1050
-f 917 939 1070
-f 1070 1050 917
-f 785 814 939
-f 939 917 785
-f 638 685 814
-f 814 785 638
-f 553 585 685
-f 685 638 553
-f 512 528 585
-f 585 553 512
-f 492 510 528
-f 528 512 492
-f 482 508 510
-f 510 492 482
-f 1369 1375 1800
-f 1800 1798 1369
-f 1184 1192 1375
-f 1375 1369 1184
-f 1037 1050 1192
-f 1192 1184 1037
-f 899 917 1050
-f 1050 1037 899
-f 761 785 917
-f 917 899 761
-f 608 638 785
-f 785 761 608
-f 526 553 638
-f 638 608 526
-f 496 512 553
-f 553 526 496
-f 454 492 512
-f 512 496 454
-f 448 482 492
-f 492 454 448
-f 1355 1369 1798
-f 1798 1795 1355
-f 1172 1184 1369
-f 1369 1355 1172
-f 1023 1037 1184
-f 1184 1172 1023
-f 879 899 1037
-f 1037 1023 879
-f 729 761 899
-f 899 879 729
-f 579 608 761
-f 761 729 579
-f 514 526 608
-f 608 579 514
-f 457 496 526
-f 526 514 457
-f 442 454 496
-f 496 457 442
-f 432 448 454
-f 454 442 432
-f 1345 1355 1795
-f 1795 1792 1345
-f 1170 1172 1355
-f 1355 1345 1170
-f 1007 1023 1172
-f 1172 1170 1007
-f 859 879 1023
-f 1023 1007 859
-f 707 729 879
-f 879 859 707
-f 563 579 729
-f 729 707 563
-f 506 514 579
-f 579 563 506
-f 450 457 514
-f 514 506 450
-f 420 442 457
-f 457 450 420
-f 412 432 442
-f 442 420 412
-f 1335 1345 1792
-f 1792 1790 1335
-f 1164 1170 1345
-f 1345 1335 1164
-f 995 1007 1170
-f 1170 1164 995
-f 847 859 1007
-f 1007 995 847
-f 681 707 859
-f 859 847 681
-f 547 563 707
-f 707 681 547
-f 494 506 563
-f 563 547 494
-f 440 450 506
-f 506 494 440
-f 410 420 450
-f 450 440 410
-f 398 412 420
-f 420 410 398
-f 1327 1335 1790
-f 1790 1788 1327
-f 1160 1164 1335
-f 1335 1327 1160
-f 988 995 1164
-f 1164 1160 988
-f 841 847 995
-f 995 988 841
-f 667 681 847
-f 847 841 667
-f 538 547 681
-f 681 667 538
-f 488 494 547
-f 547 538 488
-f 434 440 494
-f 494 488 434
-f 400 410 440
-f 440 434 400
-f 381 398 410
-f 410 400 381
-f 1324 1327 1788
-f 1788 1785 1324
-f 1156 1160 1327
-f 1327 1324 1156
-f 979 988 1160
-f 1160 1156 979
-f 837 841 988
-f 988 979 837
-f 659 667 841
-f 841 837 659
-f 534 538 667
-f 667 659 534
-f 484 488 538
-f 538 534 484
-f 428 434 488
-f 488 484 428
-f 395 400 434
-f 434 428 395
-f 374 381 400
-f 400 395 374
-f 572 616 600
-f 600 562 572
-f 605 654 616
-f 616 572 605
-f 680 737 654
-f 654 605 680
-f 782 822 737
-f 737 680 782
-f 892 914 822
-f 822 782 892
-f 978 1014 914
-f 914 892 978
-f 1094 1104 1014
-f 1014 978 1094
-f 1221 1237 1104
-f 1104 1094 1221
-f 1415 1433 1237
-f 1237 1221 1415
-f 1809 1819 1433
-f 1433 1415 1809
-f 531 572 562
-f 562 525 531
-f 566 605 572
-f 572 531 566
-f 629 680 605
-f 605 566 629
-f 740 782 680
-f 680 629 740
-f 850 892 782
-f 782 740 850
-f 964 978 892
-f 892 850 964
-f 1084 1094 978
-f 978 964 1084
-f 1213 1221 1094
-f 1094 1084 1213
-f 1401 1415 1221
-f 1221 1213 1401
-f 1931 1809 1415
-f 1415 1401 1931
-f 511 531 525
-f 525 509 511
-f 529 566 531
-f 531 511 529
-f 586 629 566
-f 566 529 586
-f 686 740 629
-f 629 586 686
-f 813 850 740
-f 740 686 813
-f 940 964 850
-f 850 813 940
-f 1069 1084 964
-f 964 940 1069
-f 1203 1213 1084
-f 1084 1069 1203
-f 1385 1401 1213
-f 1213 1203 1385
-f 1693 1931 1401
-f 1401 1385 1693
-f 493 511 509
-f 509 483 493
-f 513 529 511
-f 511 493 513
-f 554 586 529
-f 529 513 554
-f 639 686 586
-f 586 554 639
-f 786 813 686
-f 686 639 786
-f 918 940 813
-f 813 786 918
-f 1049 1069 940
-f 940 918 1049
-f 1193 1203 1069
-f 1069 1049 1193
-f 1376 1385 1203
-f 1203 1193 1376
-f 1712 1693 1385
-f 1385 1376 1712
-f 455 493 483
-f 483 449 455
-f 497 513 493
-f 493 455 497
-f 527 554 513
-f 513 497 527
-f 609 639 554
-f 554 527 609
-f 762 786 639
-f 639 609 762
-f 900 918 786
-f 786 762 900
-f 1038 1049 918
-f 918 900 1038
-f 1185 1193 1049
-f 1049 1038 1185
-f 1370 1376 1193
-f 1193 1185 1370
-f 1912 1712 1376
-f 1376 1370 1912
-f 443 455 449
-f 449 433 443
-f 458 497 455
-f 455 443 458
-f 515 527 497
-f 497 458 515
-f 580 609 527
-f 527 515 580
-f 730 762 609
-f 609 580 730
-f 880 900 762
-f 762 730 880
-f 1024 1038 900
-f 900 880 1024
-f 1173 1185 1038
-f 1038 1024 1173
-f 1356 1370 1185
-f 1185 1173 1356
-f 1797 1912 1370
-f 1370 1356 1797
-f 421 443 433
-f 433 413 421
-f 451 458 443
-f 443 421 451
-f 507 515 458
-f 458 451 507
-f 564 580 515
-f 515 507 564
-f 708 730 580
-f 580 564 708
-f 860 880 730
-f 730 708 860
-f 1008 1024 880
-f 880 860 1008
-f 1171 1173 1024
-f 1024 1008 1171
-f 1346 1356 1173
-f 1173 1171 1346
-f 1911 1797 1356
-f 1356 1346 1911
-f 411 421 413
-f 413 399 411
-f 441 451 421
-f 421 411 441
-f 495 507 451
-f 451 441 495
-f 548 564 507
-f 507 495 548
-f 682 708 564
-f 564 548 682
-f 848 860 708
-f 708 682 848
-f 996 1008 860
-f 860 848 996
-f 1165 1171 1008
-f 1008 996 1165
-f 1336 1346 1171
-f 1171 1165 1336
-f 1709 1911 1346
-f 1346 1336 1709
-f 401 411 399
-f 399 382 401
-f 435 441 411
-f 411 401 435
-f 489 495 441
-f 441 435 489
-f 539 548 495
-f 495 489 539
-f 668 682 548
-f 548 539 668
-f 842 848 682
-f 682 668 842
-f 987 996 848
-f 848 842 987
-f 1161 1165 996
-f 996 987 1161
-f 1328 1336 1165
-f 1165 1161 1328
-f 1708 1709 1336
-f 1336 1328 1708
-f 397 401 382
-f 382 376 397
-f 431 435 401
-f 401 397 431
-f 487 489 435
-f 435 431 487
-f 537 539 489
-f 489 487 537
-f 662 668 539
-f 539 537 662
-f 840 842 668
-f 668 662 840
-f 981 987 842
-f 842 840 981
-f 1159 1161 987
-f 987 981 1159
-f 1326 1328 1161
-f 1161 1159 1326
-f 1787 1708 1328
-f 1328 1326 1787
-f 2209 2194 1818
-f 1818 1808 2209
-f 2403 2391 2194
-f 2194 2209 2403
-f 2530 2518 2391
-f 2391 2403 2530
-f 2646 2614 2518
-f 2518 2530 2646
-f 2732 2712 2614
-f 2614 2646 2732
-f 2842 2806 2712
-f 2712 2732 2842
-f 2944 2890 2806
-f 2806 2842 2944
-f 3019 2974 2890
-f 2890 2944 3019
-f 3041 3009 2974
-f 2974 3019 3041
-f 3049 3025 3009
-f 3009 3041 3049
-f 2223 2209 1808
-f 1808 1805 2223
-f 2411 2403 2209
-f 2209 2223 2411
-f 2540 2530 2403
-f 2403 2411 2540
-f 2660 2646 2530
-f 2530 2540 2660
-f 2774 2732 2646
-f 2646 2660 2774
-f 2884 2842 2732
-f 2732 2774 2884
-f 2995 2944 2842
-f 2842 2884 2995
-f 3045 3019 2944
-f 2944 2995 3045
-f 3073 3041 3019
-f 3019 3045 3073
-f 3079 3049 3041
-f 3041 3073 3079
-f 2237 2223 1805
-f 1805 1803 2237
-f 2421 2411 2223
-f 2223 2237 2421
-f 2553 2540 2411
-f 2411 2421 2553
-f 2684 2660 2540
-f 2540 2553 2684
-f 2809 2774 2660
-f 2660 2684 2809
-f 2938 2884 2774
-f 2774 2809 2938
-f 3031 2995 2884
-f 2884 2938 3031
-f 3075 3045 2995
-f 2995 3031 3075
-f 3093 3073 3045
-f 3045 3075 3093
-f 3117 3079 3073
-f 3073 3093 3117
-f 2248 2237 1803
-f 1803 1801 2248
-f 2431 2421 2237
-f 2237 2248 2431
-f 2573 2553 2421
-f 2421 2431 2573
-f 2706 2684 2553
-f 2553 2573 2706
-f 2838 2809 2684
-f 2684 2706 2838
-f 2985 2938 2809
-f 2809 2838 2985
-f 3055 3031 2938
-f 2938 2985 3055
-f 3091 3075 3031
-f 3031 3055 3091
-f 3133 3093 3075
-f 3075 3091 3133
-f 3143 3117 3093
-f 3093 3133 3143
-f 2254 2248 1801
-f 1801 1799 2254
-f 2439 2431 2248
-f 2248 2254 2439
-f 2586 2573 2431
-f 2431 2439 2586
-f 2724 2706 2573
-f 2573 2586 2724
-f 2862 2838 2706
-f 2706 2724 2862
-f 3015 2985 2838
-f 2838 2862 3015
-f 3077 3055 2985
-f 2985 3015 3077
-f 3129 3091 3055
-f 3055 3077 3129
-f 3151 3133 3091
-f 3091 3129 3151
-f 3157 3143 3133
-f 3133 3151 3157
-f 2268 2254 1799
-f 1799 1796 2268
-f 2451 2439 2254
-f 2254 2268 2451
-f 2600 2586 2439
-f 2439 2451 2600
-f 2744 2724 2586
-f 2586 2600 2744
-f 2894 2862 2724
-f 2724 2744 2894
-f 3037 3015 2862
-f 2862 2894 3037
-f 3089 3077 3015
-f 3015 3037 3089
-f 3149 3129 3077
-f 3077 3089 3149
-f 3163 3151 3129
-f 3129 3149 3163
-f 3173 3157 3151
-f 3151 3163 3173
-f 2278 2268 1796
-f 1796 1793 2278
-f 2453 2451 2268
-f 2268 2278 2453
-f 2616 2600 2451
-f 2451 2453 2616
-f 2764 2744 2600
-f 2600 2616 2764
-f 2916 2894 2744
-f 2744 2764 2916
-f 3047 3037 2894
-f 2894 2916 3047
-f 3119 3089 3037
-f 3037 3047 3119
-f 3155 3149 3089
-f 3089 3119 3155
-f 3179 3163 3149
-f 3149 3155 3179
-f 3185 3173 3163
-f 3163 3179 3185
-f 2288 2278 1793
-f 1793 1791 2288
-f 2459 2453 2278
-f 2278 2288 2459
-f 2628 2616 2453
-f 2453 2459 2628
-f 2776 2764 2616
-f 2616 2628 2776
-f 2942 2916 2764
-f 2764 2776 2942
-f 3059 3047 2916
-f 2916 2942 3059
-f 3131 3119 3047
-f 3047 3059 3131
-f 3165 3155 3119
-f 3119 3131 3165
-f 3189 3179 3155
-f 3155 3165 3189
-f 3201 3185 3179
-f 3179 3189 3201
-f 2296 2288 1791
-f 1791 1789 2296
-f 2463 2459 2288
-f 2288 2296 2463
-f 2635 2628 2459
-f 2459 2463 2635
-f 2782 2776 2628
-f 2628 2635 2782
-f 2956 2942 2776
-f 2776 2782 2956
-f 3065 3059 2942
-f 2942 2956 3065
-f 3137 3131 3059
-f 3059 3065 3137
-f 3171 3165 3131
-f 3131 3137 3171
-f 3199 3189 3165
-f 3165 3171 3199
-f 3210 3201 3189
-f 3189 3199 3210
-f 2299 2296 1789
-f 1789 1786 2299
-f 2467 2463 2296
-f 2296 2299 2467
-f 2644 2635 2463
-f 2463 2467 2644
-f 2786 2782 2635
-f 2635 2644 2786
-f 2964 2956 2782
-f 2782 2786 2964
-f 3069 3065 2956
-f 2956 2964 3069
-f 3141 3137 3065
-f 3065 3069 3141
-f 3177 3171 3137
-f 3137 3141 3177
-f 3204 3199 3171
-f 3171 3177 3204
-f 3214 3210 3199
-f 3199 3204 3214
-f 3194 3202 3213
-f 3213 3207 3194
-f 3166 3175 3202
-f 3202 3194 3166
-f 3134 3139 3175
-f 3175 3166 3134
-f 3060 3067 3139
-f 3139 3134 3060
-f 2953 2962 3067
-f 3067 3060 2953
-f 2777 2784 2962
-f 2962 2953 2777
-f 2629 2643 2784
-f 2784 2777 2629
-f 2460 2465 2643
-f 2643 2629 2460
-f 2293 2298 2465
-f 2465 2460 2293
-f 1696 1785 2298
-f 2298 2293 1696
-f 3180 3194 3207
-f 3207 3190 3180
-f 3158 3166 3194
-f 3194 3180 3158
-f 3124 3134 3166
-f 3166 3158 3124
-f 3050 3060 3134
-f 3134 3124 3050
-f 2927 2953 3060
-f 3060 3050 2927
-f 2767 2777 2953
-f 2953 2927 2767
-f 2619 2629 2777
-f 2777 2767 2619
-f 2454 2460 2629
-f 2629 2619 2454
-f 2283 2293 2460
-f 2460 2454 2283
-f 1695 1696 2293
-f 2293 2283 1695
-f 3160 3180 3190
-f 3190 3168 3160
-f 3144 3158 3180
-f 3180 3160 3144
-f 3086 3124 3158
-f 3158 3144 3086
-f 3032 3050 3124
-f 3124 3086 3032
-f 2891 2927 3050
-f 3050 3032 2891
-f 2739 2767 2927
-f 2927 2891 2739
-f 2597 2619 2767
-f 2767 2739 2597
-f 2448 2454 2619
-f 2619 2597 2448
-f 2265 2283 2454
-f 2454 2448 2265
-f 1707 1695 2283
-f 2283 2265 1707
-f 3146 3160 3168
-f 3168 3152 3146
-f 3122 3144 3160
-f 3160 3146 3122
-f 3070 3086 3144
-f 3144 3122 3070
-f 2998 3032 3086
-f 3086 3070 2998
-f 2853 2891 3032
-f 3032 2998 2853
-f 2717 2739 2891
-f 2891 2853 2717
-f 2582 2597 2739
-f 2739 2717 2582
-f 2434 2448 2597
-f 2597 2582 2434
-f 2251 2265 2448
-f 2448 2434 2251
-f 1907 1707 2265
-f 2265 2251 1907
-f 3120 3146 3152
-f 3152 3126 3120
-f 3082 3122 3146
-f 3146 3120 3082
-f 3042 3070 3122
-f 3122 3082 3042
-f 2957 2998 3070
-f 3070 3042 2957
-f 2825 2853 2998
-f 2998 2957 2825
-f 2693 2717 2853
-f 2853 2825 2693
-f 2556 2582 2717
-f 2717 2693 2556
-f 2424 2434 2582
-f 2582 2556 2424
-f 2239 2251 2434
-f 2434 2424 2239
-f 1906 1907 2251
-f 2251 2239 1906
-f 3080 3120 3126
-f 3126 3084 3080
-f 3056 3082 3120
-f 3120 3080 3056
-f 3012 3042 3082
-f 3082 3056 3012
-f 2899 2957 3042
-f 3042 3012 2899
-f 2789 2825 2957
-f 2957 2899 2789
-f 2675 2693 2825
-f 2825 2789 2675
-f 2545 2556 2693
-f 2693 2675 2545
-f 2416 2424 2556
-f 2556 2545 2416
-f 2228 2239 2424
-f 2424 2416 2228
-f 1770 1906 2239
-f 2239 2228 1770
-f 3053 3080 3084
-f 3084 3062 3053
-f 3028 3056 3080
-f 3080 3053 3028
-f 2978 3012 3056
-f 3056 3028 2978
-f 2860 2899 3012
-f 3012 2978 2860
-f 2754 2789 2899
-f 2899 2860 2754
-f 2652 2675 2789
-f 2789 2754 2652
-f 2534 2545 2675
-f 2675 2652 2534
-f 2406 2416 2545
-f 2545 2534 2406
-f 2217 2228 2416
-f 2416 2406 2217
-f 1929 1770 2228
-f 2228 2217 1929
-f 3035 3053 3062
-f 3062 3039 3035
-f 2997 3028 3053
-f 3053 3035 2997
-f 2920 2978 3028
-f 3028 2997 2920
-f 2832 2860 2978
-f 2978 2920 2832
-f 2728 2754 2860
-f 2860 2832 2728
-f 2634 2652 2754
-f 2754 2728 2634
-f 2528 2534 2652
-f 2652 2634 2528
-f 2396 2406 2534
-f 2534 2528 2396
-f 2202 2217 2406
-f 2406 2396 2202
-f 1765 1929 2217
-f 2217 2202 1765
-f 3017 3035 3039
-f 3039 3027 3017
-f 2980 2997 3035
-f 3035 3017 2980
-f 2896 2920 2997
-f 2997 2980 2896
-f 2812 2832 2920
-f 2920 2896 2812
-f 2715 2728 2832
-f 2832 2812 2715
-f 2618 2634 2728
-f 2728 2715 2618
-f 2523 2528 2634
-f 2634 2618 2523
-f 2392 2396 2528
-f 2528 2523 2392
-f 2196 2202 2396
-f 2396 2392 2196
-f 1724 1765 2202
-f 2202 2196 1724
-f 3007 3017 3027
-f 3027 3023 3007
-f 2969 2980 3017
-f 3017 3007 2969
-f 2887 2896 2980
-f 2980 2969 2887
-f 2802 2812 2896
-f 2896 2887 2802
-f 2709 2715 2812
-f 2812 2802 2709
-f 2609 2618 2715
-f 2715 2709 2609
-f 2519 2523 2618
-f 2618 2609 2519
-f 2386 2392 2523
-f 2523 2519 2386
-f 2190 2196 2392
-f 2392 2386 2190
-f 1759 1724 2196
-f 2196 2190 1759
-f 1329 1324 1785
-f 1785 1782 1329
-f 1162 1157 1324
-f 1324 1329 1162
-f 993 982 1157
-f 1157 1162 993
-f 845 838 982
-f 982 993 845
-f 669 660 838
-f 838 845 669
-f 542 535 660
-f 660 669 542
-f 490 485 535
-f 535 542 490
-f 438 429 485
-f 485 490 438
-f 404 396 429
-f 429 438 404
-f 387 376 396
-f 396 404 387
-f 1339 1329 1782
-f 1782 1780 1339
-f 1168 1162 1329
-f 1329 1339 1168
-f 1003 993 1162
-f 1162 1168 1003
-f 855 845 993
-f 993 1003 855
-f 695 669 845
-f 845 855 695
-f 559 542 669
-f 669 695 559
-f 500 490 542
-f 542 559 500
-f 446 438 490
-f 490 500 446
-f 416 404 438
-f 438 446 416
-f 408 387 404
-f 404 416 408
-f 1357 1339 1780
-f 1780 1778 1357
-f 1174 1168 1339
-f 1339 1357 1174
-f 1025 1003 1168
-f 1168 1174 1025
-f 883 855 1003
-f 1003 1025 883
-f 731 695 855
-f 855 883 731
-f 583 559 695
-f 695 731 583
-f 516 500 559
-f 559 583 516
-f 467 446 500
-f 500 516 467
-f 444 416 446
-f 446 467 444
-f 436 408 416
-f 416 444 436
-f 1371 1357 1778
-f 1778 1776 1371
-f 1188 1174 1357
-f 1357 1371 1188
-f 1042 1025 1174
-f 1174 1188 1042
-f 905 883 1025
-f 1025 1042 905
-f 769 731 883
-f 883 905 769
-f 624 583 731
-f 731 769 624
-f 532 516 583
-f 583 624 532
-f 502 467 516
-f 516 532 502
-f 459 444 467
-f 467 502 459
-f 452 436 444
-f 444 459 452
-f 1383 1371 1776
-f 1776 1774 1383
-f 1198 1188 1371
-f 1371 1383 1198
-f 1068 1042 1188
-f 1188 1198 1068
-f 929 905 1042
-f 1042 1068 929
-f 797 769 905
-f 905 929 797
-f 665 624 769
-f 769 797 665
-f 569 532 624
-f 624 665 569
-f 520 502 532
-f 532 569 520
-f 504 459 502
-f 502 520 504
-f 498 452 459
-f 459 504 498
-f 1394 1383 1774
-f 1774 1771 1394
-f 1206 1198 1383
-f 1383 1394 1206
-f 1077 1068 1198
-f 1198 1206 1077
-f 947 929 1068
-f 1068 1077 947
-f 833 797 929
-f 929 947 833
-f 723 665 797
-f 797 833 723
-f 610 569 665
-f 665 723 610
-f 549 520 569
-f 569 610 549
-f 522 504 520
-f 520 549 522
-f 518 498 504
-f 504 522 518
-f 1407 1394 1771
-f 1771 1768 1407
-f 1216 1206 1394
-f 1394 1407 1216
-f 1090 1077 1206
-f 1206 1216 1090
-f 972 947 1077
-f 1077 1090 972
-f 870 833 947
-f 947 972 870
-f 764 723 833
-f 833 870 764
-f 646 610 723
-f 723 764 646
-f 587 549 610
-f 610 646 587
-f 556 522 549
-f 549 587 556
-f 540 518 522
-f 522 556 540
-f 1420 1407 1768
-f 1768 1764 1420
-f 1226 1216 1407
-f 1407 1420 1226
-f 1096 1090 1216
-f 1216 1226 1096
-f 990 972 1090
-f 1090 1096 990
-f 896 870 972
-f 972 990 896
-f 792 764 870
-f 870 896 792
-f 704 646 764
-f 764 792 704
-f 627 587 646
-f 646 704 627
-f 582 556 587
-f 587 627 582
-f 574 540 556
-f 556 582 574
-f 1426 1420 1764
-f 1764 1762 1426
-f 1230 1226 1420
-f 1420 1426 1230
-f 1101 1096 1226
-f 1226 1230 1101
-f 1006 990 1096
-f 1096 1101 1006
-f 907 896 990
-f 990 1006 907
-f 812 792 896
-f 896 907 812
-f 728 704 792
-f 792 812 728
-f 644 627 704
-f 704 728 644
-f 607 582 627
-f 627 644 607
-f 592 574 582
-f 582 607 592
-f 1430 1426 1762
-f 1762 1758 1430
-f 1234 1230 1426
-f 1426 1430 1234
-f 1107 1101 1230
-f 1230 1234 1107
-f 1012 1006 1101
-f 1101 1107 1012
-f 912 907 1006
-f 1006 1012 912
-f 819 812 907
-f 907 912 819
-f 738 728 812
-f 812 819 738
-f 651 644 728
-f 728 738 651
-f 618 607 644
-f 644 651 618
-f 601 592 607
-f 607 618 601
-f 405 397 376
-f 376 388 405
-f 439 430 397
-f 397 405 439
-f 491 486 430
-f 430 439 491
-f 543 536 486
-f 486 491 543
-f 670 661 536
-f 536 543 670
-f 846 839 661
-f 661 670 846
-f 994 980 839
-f 839 846 994
-f 1163 1158 980
-f 980 994 1163
-f 1330 1325 1158
-f 1158 1163 1330
-f 1926 1786 1325
-f 1325 1330 1926
-f 417 405 388
-f 388 409 417
-f 447 439 405
-f 405 417 447
-f 501 491 439
-f 439 447 501
-f 560 543 491
-f 491 501 560
-f 696 670 543
-f 543 560 696
-f 856 846 670
-f 670 696 856
-f 1004 994 846
-f 846 856 1004
-f 1169 1163 994
-f 994 1004 1169
-f 1340 1330 1163
-f 1163 1169 1340
-f 1925 1926 1330
-f 1330 1340 1925
-f 445 417 409
-f 409 437 445
-f 468 447 417
-f 417 445 468
-f 517 501 447
-f 447 468 517
-f 584 560 501
-f 501 517 584
-f 732 696 560
-f 560 584 732
-f 884 856 696
-f 696 732 884
-f 1026 1004 856
-f 856 884 1026
-f 1175 1169 1004
-f 1004 1026 1175
-f 1358 1340 1169
-f 1169 1175 1358
-f 1908 1925 1340
-f 1340 1358 1908
-f 460 445 437
-f 437 453 460
-f 503 468 445
-f 445 460 503
-f 533 517 468
-f 468 503 533
-f 625 584 517
-f 517 533 625
-f 770 732 584
-f 584 625 770
-f 906 884 732
-f 732 770 906
-f 1041 1026 884
-f 884 906 1041
-f 1189 1175 1026
-f 1026 1041 1189
-f 1372 1358 1175
-f 1175 1189 1372
-f 1706 1908 1358
-f 1358 1372 1706
-f 505 460 453
-f 453 499 505
-f 521 503 460
-f 460 505 521
-f 570 533 503
-f 503 521 570
-f 666 625 533
-f 533 570 666
-f 798 770 625
-f 625 666 798
-f 930 906 770
-f 770 798 930
-f 1067 1041 906
-f 906 930 1067
-f 1199 1189 1041
-f 1041 1067 1199
-f 1384 1372 1189
-f 1189 1199 1384
-f 1705 1706 1372
-f 1372 1384 1705
-f 523 505 499
-f 499 519 523
-f 550 521 505
-f 505 523 550
-f 611 570 521
-f 521 550 611
-f 724 666 570
-f 570 611 724
-f 834 798 666
-f 666 724 834
-f 948 930 798
-f 798 834 948
-f 1078 1067 930
-f 930 948 1078
-f 1207 1199 1067
-f 1067 1078 1207
-f 1395 1384 1199
-f 1199 1207 1395
-f 1773 1705 1384
-f 1384 1395 1773
-f 555 523 519
-f 519 541 555
-f 588 550 523
-f 523 555 588
-f 645 611 550
-f 550 588 645
-f 763 724 611
-f 611 645 763
-f 869 834 724
-f 724 763 869
-f 971 948 834
-f 834 869 971
-f 1089 1078 948
-f 948 971 1089
-f 1217 1207 1078
-f 1078 1089 1217
-f 1406 1395 1207
-f 1207 1217 1406
-f 1692 1773 1395
-f 1395 1406 1692
-f 581 555 541
-f 541 573 581
-f 626 588 555
-f 555 581 626
-f 703 645 588
-f 588 626 703
-f 791 763 645
-f 645 703 791
-f 895 869 763
-f 763 791 895
-f 989 971 869
-f 869 895 989
-f 1095 1089 971
-f 971 989 1095
-f 1227 1217 1089
-f 1089 1095 1227
-f 1421 1406 1217
-f 1217 1227 1421
-f 1766 1692 1406
-f 1406 1421 1766
-f 606 581 573
-f 573 591 606
-f 643 626 581
-f 581 606 643
-f 727 703 626
-f 626 643 727
-f 811 791 703
-f 703 727 811
-f 908 895 791
-f 791 811 908
-f 1005 989 895
-f 895 908 1005
-f 1100 1095 989
-f 989 1005 1100
-f 1231 1227 1095
-f 1095 1100 1231
-f 1427 1421 1227
-f 1227 1231 1427
-f 1897 1766 1421
-f 1421 1427 1897
-f 615 606 591
-f 591 598 615
-f 653 643 606
-f 606 615 653
-f 735 727 643
-f 643 653 735
-f 820 811 727
-f 727 735 820
-f 913 908 811
-f 811 820 913
-f 1013 1005 908
-f 908 913 1013
-f 1103 1100 1005
-f 1005 1013 1103
-f 1236 1231 1100
-f 1100 1103 1236
-f 1432 1427 1231
-f 1231 1236 1432
-f 1760 1897 1427
-f 1427 1432 1760
-f 2294 2299 1786
-f 1786 1783 2294
-f 2461 2466 2299
-f 2299 2294 2461
-f 2630 2641 2466
-f 2466 2461 2630
-f 2778 2785 2641
-f 2641 2630 2778
-f 2954 2963 2785
-f 2785 2778 2954
-f 3061 3068 2963
-f 2963 2954 3061
-f 3135 3140 3068
-f 3068 3061 3135
-f 3167 3176 3140
-f 3140 3135 3167
-f 3195 3203 3176
-f 3176 3167 3195
-f 3208 3213 3203
-f 3203 3195 3208
-f 2284 2294 1783
-f 1783 1781 2284
-f 2455 2461 2294
-f 2294 2284 2455
-f 2620 2630 2461
-f 2461 2455 2620
-f 2768 2778 2630
-f 2630 2620 2768
-f 2928 2954 2778
-f 2778 2768 2928
-f 3051 3061 2954
-f 2954 2928 3051
-f 3125 3135 3061
-f 3061 3051 3125
-f 3159 3167 3135
-f 3135 3125 3159
-f 3181 3195 3167
-f 3167 3159 3181
-f 3191 3208 3195
-f 3195 3181 3191
-f 2266 2284 1781
-f 1781 1779 2266
-f 2449 2455 2284
-f 2284 2266 2449
-f 2598 2620 2455
-f 2455 2449 2598
-f 2740 2768 2620
-f 2620 2598 2740
-f 2892 2928 2768
-f 2768 2740 2892
-f 3033 3051 2928
-f 2928 2892 3033
-f 3087 3125 3051
-f 3051 3033 3087
-f 3145 3159 3125
-f 3125 3087 3145
-f 3161 3181 3159
-f 3159 3145 3161
-f 3169 3191 3181
-f 3181 3161 3169
-f 2252 2266 1779
-f 1779 1777 2252
-f 2435 2449 2266
-f 2266 2252 2435
-f 2581 2598 2449
-f 2449 2435 2581
-f 2718 2740 2598
-f 2598 2581 2718
-f 2854 2892 2740
-f 2740 2718 2854
-f 2999 3033 2892
-f 2892 2854 2999
-f 3071 3087 3033
-f 3033 2999 3071
-f 3123 3145 3087
-f 3087 3071 3123
-f 3147 3161 3145
-f 3145 3123 3147
-f 3153 3169 3161
-f 3161 3147 3153
-f 2240 2252 1777
-f 1777 1775 2240
-f 2425 2435 2252
-f 2252 2240 2425
-f 2555 2581 2435
-f 2435 2425 2555
-f 2694 2718 2581
-f 2581 2555 2694
-f 2826 2854 2718
-f 2718 2694 2826
-f 2958 2999 2854
-f 2854 2826 2958
-f 3043 3071 2999
-f 2999 2958 3043
-f 3083 3123 3071
-f 3071 3043 3083
-f 3121 3147 3123
-f 3123 3083 3121
-f 3127 3153 3147
-f 3147 3121 3127
-f 2229 2240 1775
-f 1775 1772 2229
-f 2417 2425 2240
-f 2240 2229 2417
-f 2546 2555 2425
-f 2425 2417 2546
-f 2676 2694 2555
-f 2555 2546 2676
-f 2790 2826 2694
-f 2694 2676 2790
-f 2900 2958 2826
-f 2826 2790 2900
-f 3013 3043 2958
-f 2958 2900 3013
-f 3057 3083 3043
-f 3043 3013 3057
-f 3081 3121 3083
-f 3083 3057 3081
-f 3085 3127 3121
-f 3121 3081 3085
-f 2216 2229 1772
-f 1772 1769 2216
-f 2407 2417 2229
-f 2229 2216 2407
-f 2533 2546 2417
-f 2417 2407 2533
-f 2651 2676 2546
-f 2546 2533 2651
-f 2753 2790 2676
-f 2676 2651 2753
-f 2859 2900 2790
-f 2790 2753 2859
-f 2977 3013 2900
-f 2900 2859 2977
-f 3029 3057 3013
-f 3013 2977 3029
-f 3052 3081 3057
-f 3057 3029 3052
-f 3063 3085 3081
-f 3081 3052 3063
-f 2203 2216 1769
-f 1769 1767 2203
-f 2397 2407 2216
-f 2216 2203 2397
-f 2527 2533 2407
-f 2407 2397 2527
-f 2633 2651 2533
-f 2533 2527 2633
-f 2727 2753 2651
-f 2651 2633 2727
-f 2831 2859 2753
-f 2753 2727 2831
-f 2919 2977 2859
-f 2859 2831 2919
-f 2996 3029 2977
-f 2977 2919 2996
-f 3034 3052 3029
-f 3029 2996 3034
-f 3038 3063 3052
-f 3052 3034 3038
-f 2197 2203 1767
-f 1767 1763 2197
-f 2393 2397 2203
-f 2203 2197 2393
-f 2522 2527 2397
-f 2397 2393 2522
-f 2617 2633 2527
-f 2527 2522 2617
-f 2716 2727 2633
-f 2633 2617 2716
-f 2811 2831 2727
-f 2727 2716 2811
-f 2895 2919 2831
-f 2831 2811 2895
-f 2979 2996 2919
-f 2919 2895 2979
-f 3016 3034 2996
-f 2996 2979 3016
-f 3026 3038 3034
-f 3034 3016 3026
-f 2193 2197 1763
-f 1763 1761 2193
-f 2389 2393 2197
-f 2197 2193 2389
-f 2516 2522 2393
-f 2393 2389 2516
-f 2610 2617 2522
-f 2522 2516 2610
-f 2710 2716 2617
-f 2617 2610 2710
-f 2803 2811 2716
-f 2716 2710 2803
-f 2885 2895 2811
-f 2811 2803 2885
-f 2971 2979 2895
-f 2895 2885 2971
-f 3005 3016 2979
-f 2979 2971 3005
-f 3022 3026 3016
-f 3016 3005 3022
-f 461 545 544
-f 544 456 461
-f 463 551 545
-f 545 461 463
-f 465 557 551
-f 551 463 465
-f 469 567 557
-f 557 465 469
-f 471 575 567
-f 567 469 471
-f 473 577 575
-f 575 471 473
-f 475 589 577
-f 577 473 475
-f 477 593 589
-f 589 475 477
-f 479 595 593
-f 593 477 479
-f 481 599 595
-f 595 479 481
-f 389 461 456
-f 456 392 389
-f 386 463 461
-f 461 389 386
-f 379 465 463
-f 463 386 379
-f 373 469 465
-f 465 379 373
-f 371 471 469
-f 469 373 371
-f 369 473 471
-f 471 371 369
-f 366 475 473
-f 473 369 366
-f 364 477 475
-f 475 366 364
-f 362 479 477
-f 477 364 362
-f 361 481 479
-f 479 362 361
-f 335 389 392
-f 392 337 335
-f 333 386 389
-f 389 335 333
-f 331 379 386
-f 386 333 331
-f 329 373 379
-f 379 331 329
-f 328 371 373
-f 373 329 328
-f 325 369 371
-f 371 328 325
-f 323 366 369
-f 369 325 323
-f 321 364 366
-f 366 323 321
-f 319 362 364
-f 364 321 319
-f 316 361 362
-f 362 319 316
-f 298 335 337
-f 337 302 298
-f 290 333 335
-f 335 298 290
-f 288 331 333
-f 333 290 288
-f 286 329 331
-f 331 288 286
-f 281 328 329
-f 329 286 281
-f 275 325 328
-f 328 281 275
-f 265 323 325
-f 325 275 265
-f 259 321 323
-f 323 265 259
-f 255 319 321
-f 321 259 255
-f 249 316 319
-f 319 255 249
-f 269 298 302
-f 302 271 269
-f 261 290 298
-f 298 269 261
-f 251 288 290
-f 290 261 251
-f 238 286 288
-f 288 251 238
-f 230 281 286
-f 286 238 230
-f 218 275 281
-f 281 230 218
-f 208 265 275
-f 275 218 208
-f 196 259 265
-f 265 208 196
-f 186 255 259
-f 259 196 186
-f 181 249 255
-f 255 186 181
-f 228 269 271
-f 271 234 228
-f 222 261 269
-f 269 228 222
-f 212 251 261
-f 261 222 212
-f 200 238 251
-f 251 212 200
-f 177 230 238
-f 238 200 177
-f 160 218 230
-f 230 177 160
-f 134 208 218
-f 218 160 134
-f 112 196 208
-f 208 134 112
-f 102 186 196
-f 196 112 102
-f 96 181 186
-f 186 102 96
-f 198 228 234
-f 234 205 198
-f 182 222 228
-f 228 198 182
-f 168 212 222
-f 222 182 168
-f 146 200 212
-f 212 168 146
-f 118 177 200
-f 200 146 118
-f 92 160 177
-f 177 118 92
-f 74 134 160
-f 160 92 74
-f 63 112 134
-f 134 74 63
-f 53 102 112
-f 112 63 53
-f 50 96 102
-f 102 53 50
-f 167 198 205
-f 205 170 167
-f 154 182 198
-f 198 167 154
-f 126 168 182
-f 182 154 126
-f 100 146 168
-f 168 126 100
-f 83 118 146
-f 146 100 83
-f 61 92 118
-f 118 83 61
-f 46 74 92
-f 92 61 46
-f 32 63 74
-f 74 46 32
-f 25 53 63
-f 63 32 25
-f 21 50 53
-f 53 25 21
-f 143 167 170
-f 170 150 143
-f 124 154 167
-f 167 143 124
-f 104 126 154
-f 154 124 104
-f 84 100 126
-f 126 104 84
-f 65 83 100
-f 100 84 65
-f 44 61 83
-f 83 65 44
-f 30 46 61
-f 61 44 30
-f 17 32 46
-f 46 30 17
-f 9 25 32
-f 32 17 9
-f 5 21 25
-f 25 9 5
-f 132 143 150
-f 150 140 132
-f 116 124 143
-f 143 132 116
-f 94 104 124
-f 124 116 94
-f 76 84 104
-f 104 94 76
-f 55 65 84
-f 84 76 55
-f 40 44 65
-f 65 55 40
-f 22 30 44
-f 44 40 22
-f 11 17 30
-f 30 22 11
-f 2 9 17
-f 17 11 2
-f 1 5 9
-f 9 2 1
-f 480 596 599
-f 599 481 480
-f 478 594 596
-f 596 480 478
-f 476 590 594
-f 594 478 476
-f 474 578 590
-f 590 476 474
-f 472 576 578
-f 578 474 472
-f 470 568 576
-f 576 472 470
-f 466 558 568
-f 568 470 466
-f 464 552 558
-f 558 466 464
-f 462 546 552
-f 552 464 462
-f 456 544 546
-f 546 462 456
-f 363 480 481
-f 481 360 363
-f 365 478 480
-f 480 363 365
-f 367 476 478
-f 478 365 367
-f 368 474 476
-f 476 367 368
-f 370 472 474
-f 474 368 370
-f 372 470 472
-f 472 370 372
-f 380 466 470
-f 470 372 380
-f 385 464 466
-f 466 380 385
-f 390 462 464
-f 464 385 390
-f 391 456 462
-f 462 390 391
-f 320 363 360
-f 360 316 320
-f 322 365 363
-f 363 320 322
-f 324 367 365
-f 365 322 324
-f 326 368 367
-f 367 324 326
-f 327 370 368
-f 368 326 327
-f 330 372 370
-f 370 327 330
-f 332 380 372
-f 372 330 332
-f 334 385 380
-f 380 332 334
-f 336 390 385
-f 385 334 336
-f 337 391 390
-f 390 336 337
-f 256 320 316
-f 316 250 256
-f 260 322 320
-f 320 256 260
-f 266 324 322
-f 322 260 266
-f 276 326 324
-f 324 266 276
-f 282 327 326
-f 326 276 282
-f 287 330 327
-f 327 282 287
-f 289 332 330
-f 330 287 289
-f 291 334 332
-f 332 289 291
-f 299 336 334
-f 334 291 299
-f 303 337 336
-f 336 299 303
-f 187 256 250
-f 250 181 187
-f 197 260 256
-f 256 187 197
-f 209 266 260
-f 260 197 209
-f 219 276 266
-f 266 209 219
-f 231 282 276
-f 276 219 231
-f 239 287 282
-f 282 231 239
-f 252 289 287
-f 287 239 252
-f 262 291 289
-f 289 252 262
-f 270 299 291
-f 291 262 270
-f 272 303 299
-f 299 270 272
-f 103 187 181
-f 181 97 103
-f 113 197 187
-f 187 103 113
-f 135 209 197
-f 197 113 135
-f 161 219 209
-f 209 135 161
-f 178 231 219
-f 219 161 178
-f 201 239 231
-f 231 178 201
-f 213 252 239
-f 239 201 213
-f 223 262 252
-f 252 213 223
-f 229 270 262
-f 262 223 229
-f 235 272 270
-f 270 229 235
-f 54 103 97
-f 97 50 54
-f 64 113 103
-f 103 54 64
-f 75 135 113
-f 113 64 75
-f 93 161 135
-f 135 75 93
-f 119 178 161
-f 161 93 119
-f 147 201 178
-f 178 119 147
-f 169 213 201
-f 201 147 169
-f 183 223 213
-f 213 169 183
-f 199 229 223
-f 223 183 199
-f 205 235 229
-f 229 199 205
-f 24 54 50
-f 50 21 24
-f 33 64 54
-f 54 24 33
-f 47 75 64
-f 64 33 47
-f 62 93 75
-f 75 47 62
-f 82 119 93
-f 93 62 82
-f 101 147 119
-f 119 82 101
-f 127 169 147
-f 147 101 127
-f 155 183 169
-f 169 127 155
-f 166 199 183
-f 183 155 166
-f 171 205 199
-f 199 166 171
-f 10 24 21
-f 21 6 10
-f 18 33 24
-f 24 10 18
-f 31 47 33
-f 33 18 31
-f 45 62 47
-f 47 31 45
-f 66 82 62
-f 62 45 66
-f 85 101 82
-f 82 66 85
-f 105 127 101
-f 101 85 105
-f 125 155 127
-f 127 105 125
-f 144 166 155
-f 155 125 144
-f 151 171 166
-f 166 144 151
-f 3 10 6
-f 6 1 3
-f 12 18 10
-f 10 3 12
-f 23 31 18
-f 18 12 23
-f 41 45 31
-f 31 23 41
-f 56 66 45
-f 45 41 56
-f 77 85 66
-f 66 56 77
-f 95 105 85
-f 85 77 95
-f 117 125 105
-f 105 95 117
-f 133 144 125
-f 125 117 133
-f 140 151 144
-f 144 133 140
-f 138 132 140
-f 140 145 138
-f 122 116 132
-f 132 138 122
-f 98 94 116
-f 116 122 98
-f 80 76 94
-f 94 98 80
-f 60 55 76
-f 76 80 60
-f 42 40 55
-f 55 60 42
-f 28 22 40
-f 40 42 28
-f 13 11 22
-f 22 28 13
-f 7 2 11
-f 11 13 7
-f 4 1 2
-f 2 7 4
-f 152 138 145
-f 145 158 152
-f 136 122 138
-f 138 152 136
-f 108 98 122
-f 122 136 108
-f 89 80 98
-f 98 108 89
-f 70 60 80
-f 80 89 70
-f 52 42 60
-f 60 70 52
-f 38 28 42
-f 42 52 38
-f 26 13 28
-f 28 38 26
-f 19 7 13
-f 13 26 19
-f 15 4 7
-f 7 19 15
-f 173 152 158
-f 158 176 173
-f 162 136 152
-f 152 173 162
-f 142 108 136
-f 136 162 142
-f 111 89 108
-f 108 142 111
-f 91 70 89
-f 89 111 91
-f 73 52 70
-f 70 91 73
-f 58 38 52
-f 52 73 58
-f 48 26 38
-f 38 58 48
-f 37 19 26
-f 26 48 37
-f 35 15 19
-f 19 37 35
-f 194 173 176
-f 176 202 194
-f 184 162 173
-f 173 194 184
-f 174 142 162
-f 162 184 174
-f 156 111 142
-f 142 174 156
-f 128 91 111
-f 111 156 128
-f 106 73 91
-f 91 128 106
-f 86 58 73
-f 73 106 86
-f 78 48 58
-f 58 86 78
-f 68 37 48
-f 48 78 68
-f 67 35 37
-f 37 68 67
-f 221 194 202
-f 202 225 221
-f 216 184 194
-f 194 221 216
-f 206 174 184
-f 184 216 206
-f 192 156 174
-f 174 206 192
-f 180 128 156
-f 156 192 180
-f 164 106 128
-f 128 180 164
-f 148 86 106
-f 106 164 148
-f 130 78 86
-f 86 148 130
-f 121 68 78
-f 78 130 121
-f 115 67 68
-f 68 121 115
-f 244 221 225
-f 225 247 244
-f 240 216 221
-f 221 244 240
-f 236 206 216
-f 216 240 236
-f 233 192 206
-f 206 236 233
-f 227 180 192
-f 192 233 227
-f 215 164 180
-f 180 227 215
-f 210 148 164
-f 164 215 210
-f 203 130 148
-f 148 210 203
-f 191 121 130
-f 130 203 191
-f 188 115 121
-f 121 191 188
-f 284 244 247
-f 247 285 284
-f 279 240 244
-f 244 284 279
-f 277 236 240
-f 240 279 277
-f 273 233 236
-f 236 277 273
-f 267 227 233
-f 233 273 267
-f 263 215 227
-f 227 267 263
-f 258 210 215
-f 215 263 258
-f 253 203 210
-f 210 258 253
-f 245 191 203
-f 203 253 245
-f 242 188 191
-f 191 245 242
-f 315 284 285
-f 285 318 315
-f 312 279 284
-f 284 315 312
-f 311 277 279
-f 279 312 311
-f 309 273 277
-f 277 311 309
-f 307 267 273
-f 273 309 307
-f 305 263 267
-f 267 307 305
-f 301 258 263
-f 263 305 301
-f 297 253 258
-f 258 301 297
-f 295 245 253
-f 253 297 295
-f 293 242 245
-f 245 295 293
-f 341 315 318
-f 318 339 341
-f 343 312 315
-f 315 341 343
-f 345 311 312
-f 312 343 345
-f 347 309 311
-f 311 345 347
-f 349 307 309
-f 309 347 349
-f 351 305 307
-f 307 349 351
-f 353 301 305
-f 305 351 353
-f 355 297 301
-f 301 353 355
-f 357 295 297
-f 297 355 357
-f 359 293 295
-f 295 357 359
-f 378 341 339
-f 339 376 378
-f 384 343 341
-f 341 378 384
-f 394 345 343
-f 343 384 394
-f 403 347 345
-f 345 394 403
-f 406 349 347
-f 347 403 406
-f 415 351 349
-f 349 406 415
-f 419 353 351
-f 351 415 419
-f 423 355 353
-f 353 419 423
-f 425 357 355
-f 355 423 425
-f 427 359 357
-f 357 425 427
-f 8 3 1
-f 1 4 8
-f 14 12 3
-f 3 8 14
-f 29 23 12
-f 12 14 29
-f 43 41 23
-f 23 29 43
-f 59 56 41
-f 41 43 59
-f 81 77 56
-f 56 59 81
-f 99 95 77
-f 77 81 99
-f 123 117 95
-f 95 99 123
-f 139 133 117
-f 117 123 139
-f 145 140 133
-f 133 139 145
-f 20 8 4
-f 4 16 20
-f 27 14 8
-f 8 20 27
-f 39 29 14
-f 14 27 39
-f 51 43 29
-f 29 39 51
-f 71 59 43
-f 43 51 71
-f 88 81 59
-f 59 71 88
-f 109 99 81
-f 81 88 109
-f 137 123 99
-f 99 109 137
-f 153 139 123
-f 123 137 153
-f 159 145 139
-f 139 153 159
-f 36 20 16
-f 16 34 36
-f 49 27 20
-f 20 36 49
-f 57 39 27
-f 27 49 57
-f 72 51 39
-f 39 57 72
-f 90 71 51
-f 51 72 90
-f 110 88 71
-f 71 90 110
-f 141 109 88
-f 88 110 141
-f 163 137 109
-f 109 141 163
-f 172 153 137
-f 137 163 172
-f 176 159 153
-f 153 172 176
-f 69 36 34
-f 34 67 69
-f 79 49 36
-f 36 69 79
-f 87 57 49
-f 49 79 87
-f 107 72 57
-f 57 87 107
-f 129 90 72
-f 72 107 129
-f 157 110 90
-f 90 129 157
-f 175 141 110
-f 110 157 175
-f 185 163 141
-f 141 175 185
-f 195 172 163
-f 163 185 195
-f 202 176 172
-f 172 195 202
-f 120 69 67
-f 67 114 120
-f 131 79 69
-f 69 120 131
-f 149 87 79
-f 79 131 149
-f 165 107 87
-f 87 149 165
-f 179 129 107
-f 107 165 179
-f 193 157 129
-f 129 179 193
-f 207 175 157
-f 157 193 207
-f 217 185 175
-f 175 207 217
-f 220 195 185
-f 185 217 220
-f 224 202 195
-f 195 220 224
-f 190 120 114
-f 114 189 190
-f 204 131 120
-f 120 190 204
-f 211 149 131
-f 131 204 211
-f 214 165 149
-f 149 211 214
-f 226 179 165
-f 165 214 226
-f 232 193 179
-f 179 226 232
-f 237 207 193
-f 193 232 237
-f 241 217 207
-f 207 237 241
-f 243 220 217
-f 217 241 243
-f 248 224 220
-f 220 243 248
-f 246 190 189
-f 189 242 246
-f 254 204 190
-f 190 246 254
-f 257 211 204
-f 204 254 257
-f 264 214 211
-f 211 257 264
-f 268 226 214
-f 214 264 268
-f 274 232 226
-f 226 268 274
-f 278 237 232
-f 232 274 278
-f 280 241 237
-f 237 278 280
-f 283 243 241
-f 241 280 283
-f 285 248 243
-f 243 283 285
-f 294 246 242
-f 242 292 294
-f 296 254 246
-f 246 294 296
-f 300 257 254
-f 254 296 300
-f 304 264 257
-f 257 300 304
-f 306 268 264
-f 264 304 306
-f 308 274 268
-f 268 306 308
-f 310 278 274
-f 274 308 310
-f 313 280 278
-f 278 310 313
-f 314 283 280
-f 280 313 314
-f 317 285 283
-f 283 314 317
-f 356 294 292
-f 292 358 356
-f 354 296 294
-f 294 356 354
-f 352 300 296
-f 296 354 352
-f 350 304 300
-f 300 352 350
-f 348 306 304
-f 304 350 348
-f 346 308 306
-f 306 348 346
-f 344 310 308
-f 308 346 344
-f 342 313 310
-f 310 344 342
-f 340 314 313
-f 313 342 340
-f 338 317 314
-f 314 340 338
-f 424 356 358
-f 358 426 424
-f 422 354 356
-f 356 424 422
-f 418 352 354
-f 354 422 418
-f 414 350 352
-f 352 418 414
-f 407 348 350
-f 350 414 407
-f 402 346 348
-f 348 407 402
-f 393 344 346
-f 346 402 393
-f 383 342 344
-f 344 393 383
-f 377 340 342
-f 342 383 377
-f 375 338 340
-f 340 377 375
-f 3186 3113 3115
-f 3115 3182 3186
-f 3192 3110 3113
-f 3113 3186 3192
-f 3196 3109 3110
-f 3110 3192 3196
-f 3205 3106 3109
-f 3109 3196 3205
-f 3211 3104 3106
-f 3106 3205 3211
-f 3215 3102 3104
-f 3104 3211 3215
-f 3217 3101 3102
-f 3102 3215 3217
-f 3220 3098 3101
-f 3101 3217 3220
-f 3222 3097 3098
-f 3098 3220 3222
-f 3223 3095 3097
-f 3097 3222 3223
-f 3227 3186 3182
-f 3182 3225 3227
-f 3229 3192 3186
-f 3186 3227 3229
-f 3231 3196 3192
-f 3192 3229 3231
-f 3233 3205 3196
-f 3196 3231 3233
-f 3235 3211 3205
-f 3205 3233 3235
-f 3241 3215 3211
-f 3211 3235 3241
-f 3245 3217 3215
-f 3215 3241 3245
-f 3249 3220 3217
-f 3217 3245 3249
-f 3251 3222 3220
-f 3220 3249 3251
-f 3253 3223 3222
-f 3222 3251 3253
-f 3239 3227 3225
-f 3225 3237 3239
-f 3243 3229 3227
-f 3227 3239 3243
-f 3247 3231 3229
-f 3229 3243 3247
-f 3257 3233 3231
-f 3231 3247 3257
-f 3263 3235 3233
-f 3233 3257 3263
-f 3271 3241 3235
-f 3235 3263 3271
-f 3279 3245 3241
-f 3241 3271 3279
-f 3285 3249 3245
-f 3245 3279 3285
-f 3293 3251 3249
-f 3249 3285 3293
-f 3297 3253 3251
-f 3251 3293 3297
-f 3259 3239 3237
-f 3237 3255 3259
-f 3261 3243 3239
-f 3239 3259 3261
-f 3265 3247 3243
-f 3243 3261 3265
-f 3275 3257 3247
-f 3247 3265 3275
-f 3287 3263 3257
-f 3257 3275 3287
-f 3303 3271 3263
-f 3263 3287 3303
-f 3314 3279 3271
-f 3271 3303 3314
-f 3320 3285 3279
-f 3279 3314 3320
-f 3330 3293 3285
-f 3285 3320 3330
-f 3332 3297 3293
-f 3293 3330 3332
-f 3270 3259 3255
-f 3255 3268 3270
-f 3273 3261 3259
-f 3259 3270 3273
-f 3283 3265 3261
-f 3261 3273 3283
-f 3299 3275 3265
-f 3265 3283 3299
-f 3308 3287 3275
-f 3275 3299 3308
-f 3322 3303 3287
-f 3287 3308 3322
-f 3338 3314 3303
-f 3303 3322 3338
-f 3346 3320 3314
-f 3314 3338 3346
-f 3351 3330 3320
-f 3320 3346 3351
-f 3355 3332 3330
-f 3330 3351 3355
-f 3282 3270 3268
-f 3268 3278 3282
-f 3290 3273 3270
-f 3270 3282 3290
-f 3302 3283 3273
-f 3273 3290 3302
-f 3312 3299 3283
-f 3283 3302 3312
-f 3324 3308 3299
-f 3299 3312 3324
-f 3340 3322 3308
-f 3308 3324 3340
-f 3353 3338 3322
-f 3322 3340 3353
-f 3368 3346 3338
-f 3338 3353 3368
-f 3373 3351 3346
-f 3346 3368 3373
-f 3379 3355 3351
-f 3351 3373 3379
-f 3295 3282 3278
-f 3278 3292 3295
-f 3306 3290 3282
-f 3282 3295 3306
-f 3316 3302 3290
-f 3290 3306 3316
-f 3326 3312 3302
-f 3302 3316 3326
-f 3345 3324 3312
-f 3312 3326 3345
-f 3359 3340 3324
-f 3324 3345 3359
-f 3376 3353 3340
-f 3340 3359 3376
-f 3394 3368 3353
-f 3353 3376 3394
-f 3404 3373 3368
-f 3368 3394 3404
-f 3406 3379 3373
-f 3373 3404 3406
-f 3310 3295 3292
-f 3292 3307 3310
-f 3318 3306 3295
-f 3295 3310 3318
-f 3336 3316 3306
-f 3306 3318 3336
-f 3348 3326 3316
-f 3316 3336 3348
-f 3369 3345 3326
-f 3326 3348 3369
-f 3389 3359 3345
-f 3345 3369 3389
-f 3425 3376 3359
-f 3359 3389 3425
-f 3449 3394 3376
-f 3376 3425 3449
-f 3468 3404 3394
-f 3394 3449 3468
-f 3472 3406 3404
-f 3404 3468 3472
-f 3335 3310 3307
-f 3307 3329 3335
-f 3343 3318 3310
-f 3310 3335 3343
-f 3362 3336 3318
-f 3318 3343 3362
-f 3386 3348 3336
-f 3336 3362 3386
-f 3422 3369 3348
-f 3348 3386 3422
-f 3464 3389 3369
-f 3369 3422 3464
-f 3490 3425 3389
-f 3389 3464 3490
-f 3505 3449 3425
-f 3425 3490 3505
-f 3521 3468 3449
-f 3449 3505 3521
-f 3523 3472 3468
-f 3468 3521 3523
-f 3364 3335 3329
-f 3329 3357 3364
-f 3382 3343 3335
-f 3335 3364 3382
-f 3416 3362 3343
-f 3343 3382 3416
-f 3465 3386 3362
-f 3362 3416 3465
-f 3495 3422 3386
-f 3386 3465 3495
-f 3528 3464 3422
-f 3422 3495 3528
-f 3553 3490 3464
-f 3464 3528 3553
-f 3579 3505 3490
-f 3490 3553 3579
-f 3592 3521 3505
-f 3505 3579 3592
-f 3604 3523 3521
-f 3521 3592 3604
-f 3221 3096 3094
-f 3094 3224 3221
-f 3219 3099 3096
-f 3096 3221 3219
-f 3218 3100 3099
-f 3099 3219 3218
-f 3216 3103 3100
-f 3100 3218 3216
-f 3212 3105 3103
-f 3103 3216 3212
-f 3206 3107 3105
-f 3105 3212 3206
-f 3197 3108 3107
-f 3107 3206 3197
-f 3193 3111 3108
-f 3108 3197 3193
-f 3187 3112 3111
-f 3111 3193 3187
-f 3183 3114 3112
-f 3112 3187 3183
-f 3252 3221 3224
-f 3224 3254 3252
-f 3250 3219 3221
-f 3221 3252 3250
-f 3246 3218 3219
-f 3219 3250 3246
-f 3242 3216 3218
-f 3218 3246 3242
-f 3236 3212 3216
-f 3216 3242 3236
-f 3234 3206 3212
-f 3212 3236 3234
-f 3232 3197 3206
-f 3206 3234 3232
-f 3230 3193 3197
-f 3197 3232 3230
-f 3228 3187 3193
-f 3193 3230 3228
-f 3226 3183 3187
-f 3187 3228 3226
-f 3294 3252 3254
-f 3254 3298 3294
-f 3286 3250 3252
-f 3252 3294 3286
-f 3280 3246 3250
-f 3250 3286 3280
-f 3272 3242 3246
-f 3246 3280 3272
-f 3264 3236 3242
-f 3242 3272 3264
-f 3258 3234 3236
-f 3236 3264 3258
-f 3248 3232 3234
-f 3234 3258 3248
-f 3244 3230 3232
-f 3232 3248 3244
-f 3240 3228 3230
-f 3230 3244 3240
-f 3238 3226 3228
-f 3228 3240 3238
-f 3331 3294 3298
-f 3298 3333 3331
-f 3321 3286 3294
-f 3294 3331 3321
-f 3315 3280 3286
-f 3286 3321 3315
-f 3304 3272 3280
-f 3280 3315 3304
-f 3288 3264 3272
-f 3272 3304 3288
-f 3276 3258 3264
-f 3264 3288 3276
-f 3266 3248 3258
-f 3258 3276 3266
-f 3262 3244 3248
-f 3248 3266 3262
-f 3260 3240 3244
-f 3244 3262 3260
-f 3256 3238 3240
-f 3240 3260 3256
-f 3350 3331 3333
-f 3333 3354 3350
-f 3347 3321 3331
-f 3331 3350 3347
-f 3339 3315 3321
-f 3321 3347 3339
-f 3323 3304 3315
-f 3315 3339 3323
-f 3309 3288 3304
-f 3304 3323 3309
-f 3300 3276 3288
-f 3288 3309 3300
-f 3284 3266 3276
-f 3276 3300 3284
-f 3274 3262 3266
-f 3266 3284 3274
-f 3269 3260 3262
-f 3262 3274 3269
-f 3267 3256 3260
-f 3260 3269 3267
-f 3372 3350 3354
-f 3354 3378 3372
-f 3367 3347 3350
-f 3350 3372 3367
-f 3352 3339 3347
-f 3347 3367 3352
-f 3341 3323 3339
-f 3339 3352 3341
-f 3325 3309 3323
-f 3323 3341 3325
-f 3313 3300 3309
-f 3309 3325 3313
-f 3301 3284 3300
-f 3300 3313 3301
-f 3289 3274 3284
-f 3284 3301 3289
-f 3281 3269 3274
-f 3274 3289 3281
-f 3277 3267 3269
-f 3269 3281 3277
-f 3403 3372 3378
-f 3378 3405 3403
-f 3393 3367 3372
-f 3372 3403 3393
-f 3377 3352 3367
-f 3367 3393 3377
-f 3360 3341 3352
-f 3352 3377 3360
-f 3344 3325 3341
-f 3341 3360 3344
-f 3327 3313 3325
-f 3325 3344 3327
-f 3317 3301 3313
-f 3313 3327 3317
-f 3305 3289 3301
-f 3301 3317 3305
-f 3296 3281 3289
-f 3289 3305 3296
-f 3291 3277 3281
-f 3281 3296 3291
-f 3469 3403 3405
-f 3405 3472 3469
-f 3450 3393 3403
-f 3403 3469 3450
-f 3426 3377 3393
-f 3393 3450 3426
-f 3390 3360 3377
-f 3377 3426 3390
-f 3370 3344 3360
-f 3360 3390 3370
-f 3349 3327 3344
-f 3344 3370 3349
-f 3337 3317 3327
-f 3327 3349 3337
-f 3319 3305 3317
-f 3317 3337 3319
-f 3311 3296 3305
-f 3305 3319 3311
-f 3307 3291 3296
-f 3296 3311 3307
-f 3520 3469 3472
-f 3472 3522 3520
-f 3504 3450 3469
-f 3469 3520 3504
-f 3489 3426 3450
-f 3450 3504 3489
-f 3463 3390 3426
-f 3426 3489 3463
-f 3421 3370 3390
-f 3390 3463 3421
-f 3385 3349 3370
-f 3370 3421 3385
-f 3361 3337 3349
-f 3349 3385 3361
-f 3342 3319 3337
-f 3337 3361 3342
-f 3334 3311 3319
-f 3319 3342 3334
-f 3328 3307 3311
-f 3311 3334 3328
-f 3591 3520 3522
-f 3522 3603 3591
-f 3578 3504 3520
-f 3520 3591 3578
-f 3552 3489 3504
-f 3504 3578 3552
-f 3530 3463 3489
-f 3489 3552 3530
-f 3499 3421 3463
-f 3463 3530 3499
-f 3467 3385 3421
-f 3421 3499 3467
-f 3415 3361 3385
-f 3385 3467 3415
-f 3381 3342 3361
-f 3361 3415 3381
-f 3363 3334 3342
-f 3342 3381 3363
-f 3356 3328 3334
-f 3334 3363 3356
-f 3374 3365 3358
-f 3358 3371 3374
-f 3395 3383 3365
-f 3365 3374 3395
-f 3443 3417 3383
-f 3383 3395 3443
-f 3481 3466 3417
-f 3417 3443 3481
-f 3514 3496 3466
-f 3466 3481 3514
-f 3545 3529 3496
-f 3496 3514 3545
-f 3573 3551 3529
-f 3529 3545 3573
-f 3597 3577 3551
-f 3551 3573 3597
-f 3613 3590 3577
-f 3577 3597 3613
-f 3619 3603 3590
-f 3590 3613 3619
-f 3387 3374 3371
-f 3371 3380 3387
-f 3413 3395 3374
-f 3374 3387 3413
-f 3461 3443 3395
-f 3395 3413 3461
-f 3493 3481 3443
-f 3443 3461 3493
-f 3524 3514 3481
-f 3481 3493 3524
-f 3556 3545 3514
-f 3514 3524 3556
-f 3584 3573 3545
-f 3545 3556 3584
-f 3611 3597 3573
-f 3573 3584 3611
-f 3628 3613 3597
-f 3597 3611 3628
-f 3632 3619 3613
-f 3613 3628 3632
-f 3398 3387 3380
-f 3380 3391 3398
-f 3435 3413 3387
-f 3387 3398 3435
-f 3473 3461 3413
-f 3413 3435 3473
-f 3500 3493 3461
-f 3461 3473 3500
-f 3531 3524 3493
-f 3493 3500 3531
-f 3562 3556 3524
-f 3524 3531 3562
-f 3595 3584 3556
-f 3556 3562 3595
-f 3617 3611 3584
-f 3584 3595 3617
-f 3633 3628 3611
-f 3611 3617 3633
-f 3641 3632 3628
-f 3628 3633 3641
-f 3409 3398 3391
-f 3391 3400 3409
-f 3447 3435 3398
-f 3398 3409 3447
-f 3477 3473 3435
-f 3435 3447 3477
-f 3506 3500 3473
-f 3473 3477 3506
-f 3540 3531 3500
-f 3500 3506 3540
-f 3567 3562 3531
-f 3531 3540 3567
-f 3601 3595 3562
-f 3562 3567 3601
-f 3624 3617 3595
-f 3595 3601 3624
-f 3639 3633 3617
-f 3617 3624 3639
-f 3644 3641 3633
-f 3633 3639 3644
-f 3433 3409 3400
-f 3400 3411 3433
-f 3453 3447 3409
-f 3409 3433 3453
-f 3483 3477 3447
-f 3447 3453 3483
-f 3510 3506 3477
-f 3477 3483 3510
-f 3543 3540 3506
-f 3506 3510 3543
-f 3569 3567 3540
-f 3540 3543 3569
-f 3599 3601 3567
-f 3567 3569 3599
-f 3622 3624 3601
-f 3601 3599 3622
-f 3637 3639 3624
-f 3624 3622 3637
-f 3642 3644 3639
-f 3639 3637 3642
-f 3439 3433 3411
-f 3411 3424 3439
-f 3458 3453 3433
-f 3433 3439 3458
-f 3487 3483 3453
-f 3453 3458 3487
-f 3513 3510 3483
-f 3483 3487 3513
-f 3542 3543 3510
-f 3510 3513 3542
-f 3566 3569 3543
-f 3543 3542 3566
-f 3593 3599 3569
-f 3569 3566 3593
-f 3616 3622 3599
-f 3599 3593 3616
-f 3630 3637 3622
-f 3622 3616 3630
-f 3636 3642 3637
-f 3637 3630 3636
-f 3441 3439 3424
-f 3424 3429 3441
-f 3459 3458 3439
-f 3439 3441 3459
-f 3485 3487 3458
-f 3458 3459 3485
-f 3508 3513 3487
-f 3487 3485 3508
-f 3533 3542 3513
-f 3513 3508 3533
-f 3558 3566 3542
-f 3542 3533 3558
-f 3582 3593 3566
-f 3566 3558 3582
-f 3607 3616 3593
-f 3593 3582 3607
-f 3620 3630 3616
-f 3616 3607 3620
-f 3626 3636 3630
-f 3630 3620 3626
-f 3437 3441 3429
-f 3429 3427 3437
-f 3455 3459 3441
-f 3441 3437 3455
-f 3479 3485 3459
-f 3459 3455 3479
-f 3502 3508 3485
-f 3485 3479 3502
-f 3526 3533 3508
-f 3508 3502 3526
-f 3547 3558 3533
-f 3533 3526 3547
-f 3571 3582 3558
-f 3558 3547 3571
-f 3588 3607 3582
-f 3582 3571 3588
-f 3605 3620 3607
-f 3607 3588 3605
-f 3609 3626 3620
-f 3620 3605 3609
-f 3419 3437 3427
-f 3427 3408 3419
-f 3445 3455 3437
-f 3437 3419 3445
-f 3470 3479 3455
-f 3455 3445 3470
-f 3492 3502 3479
-f 3479 3470 3492
-f 3517 3526 3502
-f 3502 3492 3517
-f 3536 3547 3526
-f 3526 3517 3536
-f 3554 3571 3547
-f 3547 3536 3554
-f 3575 3588 3571
-f 3571 3554 3575
-f 3580 3605 3588
-f 3588 3575 3580
-f 3587 3609 3605
-f 3605 3580 3587
-f 3401 3419 3408
-f 3408 3397 3401
-f 3431 3445 3419
-f 3419 3401 3431
-f 3451 3470 3445
-f 3445 3431 3451
-f 3475 3492 3470
-f 3470 3451 3475
-f 3497 3517 3492
-f 3492 3475 3497
-f 3518 3536 3517
-f 3517 3497 3518
-f 3537 3554 3536
-f 3536 3518 3537
-f 3549 3575 3554
-f 3554 3537 3549
-f 3560 3580 3575
-f 3575 3549 3560
-f 3564 3587 3580
-f 3580 3560 3564
-f 3614 3591 3603
-f 3603 3619 3614
-f 3598 3578 3591
-f 3591 3614 3598
-f 3574 3552 3578
-f 3578 3598 3574
-f 3546 3530 3552
-f 3552 3574 3546
-f 3515 3499 3530
-f 3530 3546 3515
-f 3482 3467 3499
-f 3499 3515 3482
-f 3444 3418 3467
-f 3467 3482 3444
-f 3396 3384 3418
-f 3418 3444 3396
-f 3375 3366 3384
-f 3384 3396 3375
-f 3371 3358 3366
-f 3366 3375 3371
-f 3629 3614 3619
-f 3619 3632 3629
-f 3612 3598 3614
-f 3614 3629 3612
-f 3585 3574 3598
-f 3598 3612 3585
-f 3557 3546 3574
-f 3574 3585 3557
-f 3525 3515 3546
-f 3546 3557 3525
-f 3494 3482 3515
-f 3515 3525 3494
-f 3462 3444 3482
-f 3482 3494 3462
-f 3414 3396 3444
-f 3444 3462 3414
-f 3388 3375 3396
-f 3396 3414 3388
-f 3380 3371 3375
-f 3375 3388 3380
-f 3634 3629 3632
-f 3632 3641 3634
-f 3618 3612 3629
-f 3629 3634 3618
-f 3596 3585 3612
-f 3612 3618 3596
-f 3563 3557 3585
-f 3585 3596 3563
-f 3532 3525 3557
-f 3557 3563 3532
-f 3501 3494 3525
-f 3525 3532 3501
-f 3474 3462 3494
-f 3494 3501 3474
-f 3436 3414 3462
-f 3462 3474 3436
-f 3399 3388 3414
-f 3414 3436 3399
-f 3392 3380 3388
-f 3388 3399 3392
-f 3640 3634 3641
-f 3641 3644 3640
-f 3625 3618 3634
-f 3634 3640 3625
-f 3602 3596 3618
-f 3618 3625 3602
-f 3568 3563 3596
-f 3596 3602 3568
-f 3539 3532 3563
-f 3563 3568 3539
-f 3507 3501 3532
-f 3532 3539 3507
-f 3478 3474 3501
-f 3501 3507 3478
-f 3448 3436 3474
-f 3474 3478 3448
-f 3410 3399 3436
-f 3436 3448 3410
-f 3400 3392 3399
-f 3399 3410 3400
-f 3638 3640 3644
-f 3644 3643 3638
-f 3623 3625 3640
-f 3640 3638 3623
-f 3600 3602 3625
-f 3625 3623 3600
-f 3570 3568 3602
-f 3602 3600 3570
-f 3544 3539 3568
-f 3568 3570 3544
-f 3511 3507 3539
-f 3539 3544 3511
-f 3484 3478 3507
-f 3507 3511 3484
-f 3454 3448 3478
-f 3478 3484 3454
-f 3434 3410 3448
-f 3448 3454 3434
-f 3412 3400 3410
-f 3410 3434 3412
-f 3631 3638 3643
-f 3643 3635 3631
-f 3615 3623 3638
-f 3638 3631 3615
-f 3594 3600 3623
-f 3623 3615 3594
-f 3565 3570 3600
-f 3600 3594 3565
-f 3541 3544 3570
-f 3570 3565 3541
-f 3512 3511 3544
-f 3544 3541 3512
-f 3488 3484 3511
-f 3511 3512 3488
-f 3457 3454 3484
-f 3484 3488 3457
-f 3440 3434 3454
-f 3454 3457 3440
-f 3423 3412 3434
-f 3434 3440 3423
-f 3621 3631 3635
-f 3635 3627 3621
-f 3608 3615 3631
-f 3631 3621 3608
-f 3583 3594 3615
-f 3615 3608 3583
-f 3559 3565 3594
-f 3594 3583 3559
-f 3534 3541 3565
-f 3565 3559 3534
-f 3509 3512 3541
-f 3541 3534 3509
-f 3486 3488 3512
-f 3512 3509 3486
-f 3460 3457 3488
-f 3488 3486 3460
-f 3442 3440 3457
-f 3457 3460 3442
-f 3430 3423 3440
-f 3440 3442 3430
-f 3606 3621 3627
-f 3627 3610 3606
-f 3589 3608 3621
-f 3621 3606 3589
-f 3572 3583 3608
-f 3608 3589 3572
-f 3548 3559 3583
-f 3583 3572 3548
-f 3527 3534 3559
-f 3559 3548 3527
-f 3503 3509 3534
-f 3534 3527 3503
-f 3480 3486 3509
-f 3509 3503 3480
-f 3456 3460 3486
-f 3486 3480 3456
-f 3438 3442 3460
-f 3460 3456 3438
-f 3428 3430 3442
-f 3442 3438 3428
-f 3581 3606 3610
-f 3610 3586 3581
-f 3576 3589 3606
-f 3606 3581 3576
-f 3555 3572 3589
-f 3589 3576 3555
-f 3535 3548 3572
-f 3572 3555 3535
-f 3516 3527 3548
-f 3548 3535 3516
-f 3491 3503 3527
-f 3527 3516 3491
-f 3471 3480 3503
-f 3503 3491 3471
-f 3446 3456 3480
-f 3480 3471 3446
-f 3420 3438 3456
-f 3456 3446 3420
-f 3407 3428 3438
-f 3438 3420 3407
-f 3561 3581 3586
-f 3586 3564 3561
-f 3550 3576 3581
-f 3581 3561 3550
-f 3538 3555 3576
-f 3576 3550 3538
-f 3519 3535 3555
-f 3555 3538 3519
-f 3498 3516 3535
-f 3535 3519 3498
-f 3476 3491 3516
-f 3516 3498 3476
-f 3452 3471 3491
-f 3491 3476 3452
-f 3432 3446 3471
-f 3471 3452 3432
-f 3402 3420 3446
-f 3446 3432 3402
-f 3397 3407 3420
-f 3420 3402 3397
-f 1888 2110 2104
-f 1888 2104 2096
-f 1888 2096 2076
-f 1888 2076 2048
-f 1888 2048 2030
-f 1888 2030 2006
-f 1888 2006 1982
-f 1888 1982 1960
-f 1888 1960 1936
-f 1888 1936 1732
-f 2257 2104 2110
-f 2110 2261 2257
-f 2249 2096 2104
-f 2104 2257 2249
-f 2226 2076 2096
-f 2096 2249 2226
-f 2200 2048 2076
-f 2076 2226 2200
-f 2142 2030 2048
-f 2048 2200 2142
-f 2094 2006 2030
-f 2030 2142 2094
-f 2036 1982 2006
-f 2006 2094 2036
-f 1988 1960 1982
-f 1982 2036 1988
-f 1948 1936 1960
-f 1960 1988 1948
-f 1728 1732 1936
-f 1936 1948 1728
-f 2310 2257 2261
-f 2261 2315 2310
-f 2300 2249 2257
-f 2257 2310 2300
-f 2279 2226 2249
-f 2249 2300 2279
-f 2243 2200 2226
-f 2226 2279 2243
-f 2204 2142 2200
-f 2200 2243 2204
-f 2132 2094 2142
-f 2142 2204 2132
-f 2067 2036 2094
-f 2094 2132 2067
-f 2000 1988 2036
-f 2036 2067 2000
-f 1956 1948 1988
-f 1988 2000 1956
-f 1734 1728 1948
-f 1948 1956 1734
-f 2312 2310 2315
-f 2315 2316 2312
-f 2302 2300 2310
-f 2310 2312 2302
-f 2281 2279 2300
-f 2300 2302 2281
-f 2245 2243 2279
-f 2279 2281 2245
-f 2206 2204 2243
-f 2243 2245 2206
-f 2134 2132 2204
-f 2204 2206 2134
-f 2068 2067 2132
-f 2132 2134 2068
-f 2002 2000 2067
-f 2067 2068 2002
-f 1958 1956 2000
-f 2000 2002 1958
-f 1878 1734 1956
-f 1956 1958 1878
-f 2285 2312 2316
-f 2316 2289 2285
-f 2259 2302 2312
-f 2312 2285 2259
-f 2241 2281 2302
-f 2302 2259 2241
-f 2214 2245 2281
-f 2281 2241 2214
-f 2168 2206 2245
-f 2245 2214 2168
-f 2106 2134 2206
-f 2206 2168 2106
-f 2042 2068 2134
-f 2134 2106 2042
-f 1994 2002 2068
-f 2068 2042 1994
-f 1952 1958 2002
-f 2002 1994 1952
-f 1731 1878 1958
-f 1958 1952 1731
-f 2220 2285 2289
-f 2289 2225 2220
-f 2210 2259 2285
-f 2285 2220 2210
-f 2186 2241 2259
-f 2259 2210 2186
-f 2146 2214 2241
-f 2241 2186 2146
-f 2108 2168 2214
-f 2214 2146 2108
-f 2060 2106 2168
-f 2168 2108 2060
-f 2018 2042 2106
-f 2106 2060 2018
-f 1978 1994 2042
-f 2042 2018 1978
-f 1944 1952 1994
-f 1994 1978 1944
-f 1727 1731 1952
-f 1952 1944 1727
-f 2141 2220 2225
-f 2225 2145 2141
-f 2127 2210 2220
-f 2220 2141 2127
-f 2112 2186 2210
-f 2210 2127 2112
-f 2084 2146 2186
-f 2186 2112 2084
-f 2044 2108 2146
-f 2146 2084 2044
-f 2024 2060 2108
-f 2108 2044 2024
-f 1992 2018 2060
-f 2060 2024 1992
-f 1970 1978 2018
-f 2018 1992 1970
-f 1942 1944 1978
-f 1978 1970 1942
-f 1721 1727 1944
-f 1944 1942 1721
-f 2079 2141 2145
-f 2145 2087 2079
-f 2075 2127 2141
-f 2141 2079 2075
-f 2055 2112 2127
-f 2127 2075 2055
-f 2039 2084 2112
-f 2112 2055 2039
-f 2021 2044 2084
-f 2084 2039 2021
-f 1996 2024 2044
-f 2044 2021 1996
-f 1974 1992 2024
-f 2024 1996 1974
-f 1954 1970 1992
-f 1992 1974 1954
-f 1934 1942 1970
-f 1970 1954 1934
-f 1720 1721 1942
-f 1942 1934 1720
-f 2063 2079 2087
-f 2087 2071 2063
-f 2051 2075 2079
-f 2079 2063 2051
-f 2041 2055 2075
-f 2075 2051 2041
-f 2029 2039 2055
-f 2055 2041 2029
-f 2013 2021 2039
-f 2039 2029 2013
-f 1991 1996 2021
-f 2021 2013 1991
-f 1972 1974 1996
-f 1996 1991 1972
-f 1950 1954 1974
-f 1974 1972 1950
-f 1932 1934 1954
-f 1954 1950 1932
-f 1701 1720 1934
-f 1934 1932 1701
-f 2115 2063 2071
-f 2071 2123 2115
-f 2101 2051 2063
-f 2063 2115 2101
-f 2081 2041 2051
-f 2051 2101 2081
-f 2057 2029 2041
-f 2041 2081 2057
-f 2033 2013 2029
-f 2029 2057 2033
-f 2009 1991 2013
-f 2013 2033 2009
-f 1984 1972 1991
-f 1991 2009 1984
-f 1964 1950 1972
-f 1972 1984 1964
-f 1938 1932 1950
-f 1950 1964 1938
-f 1698 1701 1932
-f 1932 1938 1698
-f 1888 1886 1686
-f 1888 1686 1662
-f 1888 1662 1640
-f 1888 1640 1616
-f 1888 1616 1592
-f 1888 1592 1574
-f 1888 1574 1546
-f 1888 1546 1526
-f 1888 1526 1518
-f 1888 1518 1512
-f 1674 1686 1886
-f 1886 1884 1674
-f 1634 1662 1686
-f 1686 1674 1634
-f 1586 1640 1662
-f 1662 1634 1586
-f 1528 1616 1640
-f 1640 1586 1528
-f 1480 1592 1616
-f 1616 1528 1480
-f 1422 1574 1592
-f 1592 1480 1422
-f 1396 1546 1574
-f 1574 1422 1396
-f 1373 1526 1546
-f 1546 1396 1373
-f 1365 1518 1526
-f 1526 1373 1365
-f 1361 1512 1518
-f 1518 1365 1361
-f 1666 1674 1884
-f 1884 1882 1666
-f 1622 1634 1674
-f 1674 1666 1622
-f 1557 1586 1634
-f 1634 1622 1557
-f 1490 1528 1586
-f 1586 1557 1490
-f 1418 1480 1528
-f 1528 1490 1418
-f 1379 1422 1480
-f 1480 1418 1379
-f 1343 1396 1422
-f 1422 1379 1343
-f 1322 1373 1396
-f 1396 1343 1322
-f 1312 1365 1373
-f 1373 1322 1312
-f 1309 1361 1365
-f 1365 1312 1309
-f 1664 1666 1882
-f 1882 1879 1664
-f 1620 1622 1666
-f 1666 1664 1620
-f 1554 1557 1622
-f 1622 1620 1554
-f 1488 1490 1557
-f 1557 1554 1488
-f 1416 1418 1490
-f 1490 1488 1416
-f 1377 1379 1418
-f 1418 1416 1377
-f 1341 1343 1379
-f 1379 1377 1341
-f 1320 1322 1343
-f 1343 1341 1320
-f 1310 1312 1322
-f 1322 1320 1310
-f 1306 1309 1312
-f 1312 1310 1306
-f 1670 1664 1879
-f 1879 1876 1670
-f 1628 1620 1664
-f 1664 1670 1628
-f 1580 1554 1620
-f 1620 1628 1580
-f 1516 1488 1554
-f 1554 1580 1516
-f 1454 1416 1488
-f 1488 1516 1454
-f 1408 1377 1416
-f 1416 1454 1408
-f 1381 1341 1377
-f 1377 1408 1381
-f 1363 1320 1341
-f 1341 1381 1363
-f 1337 1310 1320
-f 1320 1363 1337
-f 1333 1306 1310
-f 1310 1337 1333
-f 1678 1670 1876
-f 1876 1874 1678
-f 1644 1628 1670
-f 1670 1678 1644
-f 1604 1580 1628
-f 1628 1644 1604
-f 1562 1516 1580
-f 1580 1604 1562
-f 1514 1454 1516
-f 1516 1562 1514
-f 1476 1408 1454
-f 1454 1514 1476
-f 1436 1381 1408
-f 1408 1476 1436
-f 1412 1363 1381
-f 1381 1436 1412
-f 1402 1337 1363
-f 1363 1412 1402
-f 1399 1333 1337
-f 1337 1402 1399
-f 1680 1678 1874
-f 1874 1872 1680
-f 1652 1644 1678
-f 1678 1680 1652
-f 1630 1604 1644
-f 1644 1652 1630
-f 1598 1562 1604
-f 1604 1630 1598
-f 1578 1514 1562
-f 1562 1598 1578
-f 1538 1476 1514
-f 1514 1578 1538
-f 1510 1436 1476
-f 1476 1538 1510
-f 1497 1412 1436
-f 1436 1510 1497
-f 1483 1402 1412
-f 1412 1497 1483
-f 1479 1399 1402
-f 1402 1483 1479
-f 1688 1680 1872
-f 1872 1870 1688
-f 1668 1652 1680
-f 1680 1688 1668
-f 1648 1630 1652
-f 1652 1668 1648
-f 1626 1598 1630
-f 1630 1648 1626
-f 1603 1578 1598
-f 1598 1626 1603
-f 1585 1538 1578
-f 1578 1603 1585
-f 1569 1510 1538
-f 1538 1585 1569
-f 1549 1497 1510
-f 1510 1569 1549
-f 1545 1483 1497
-f 1497 1549 1545
-f 1537 1479 1483
-f 1483 1545 1537
-f 1690 1688 1870
-f 1870 1868 1690
-f 1672 1668 1688
-f 1688 1690 1672
-f 1650 1648 1668
-f 1668 1672 1650
-f 1633 1626 1648
-f 1648 1650 1633
-f 1611 1603 1626
-f 1626 1633 1611
-f 1595 1585 1603
-f 1603 1611 1595
-f 1583 1569 1585
-f 1585 1595 1583
-f 1573 1549 1569
-f 1569 1583 1573
-f 1561 1545 1549
-f 1549 1573 1561
-f 1553 1537 1545
-f 1545 1561 1553
-f 1684 1690 1868
-f 1868 1865 1684
-f 1658 1672 1690
-f 1690 1684 1658
-f 1638 1650 1672
-f 1672 1658 1638
-f 1615 1633 1650
-f 1650 1638 1615
-f 1591 1611 1633
-f 1633 1615 1591
-f 1567 1595 1611
-f 1611 1591 1567
-f 1543 1583 1595
-f 1595 1567 1543
-f 1523 1573 1583
-f 1583 1543 1523
-f 1509 1561 1573
-f 1573 1523 1509
-f 1501 1553 1561
-f 1561 1509 1501
-f 1888 1513 1519
-f 1888 1519 1527
-f 1888 1527 1547
-f 1888 1547 1575
-f 1888 1575 1593
-f 1888 1593 1617
-f 1888 1617 1641
-f 1888 1641 1663
-f 1888 1663 1687
-f 1888 1687 1894
-f 1366 1519 1513
-f 1513 1362 1366
-f 1374 1527 1519
-f 1519 1366 1374
-f 1397 1547 1527
-f 1527 1374 1397
-f 1423 1575 1547
-f 1547 1397 1423
-f 1481 1593 1575
-f 1575 1423 1481
-f 1529 1617 1593
-f 1593 1481 1529
-f 1587 1641 1617
-f 1617 1529 1587
-f 1635 1663 1641
-f 1641 1587 1635
-f 1675 1687 1663
-f 1663 1635 1675
-f 1895 1894 1687
-f 1687 1675 1895
-f 1313 1366 1362
-f 1362 1308 1313
-f 1323 1374 1366
-f 1366 1313 1323
-f 1344 1397 1374
-f 1374 1323 1344
-f 1380 1423 1397
-f 1397 1344 1380
-f 1419 1481 1423
-f 1423 1380 1419
-f 1491 1529 1481
-f 1481 1419 1491
-f 1556 1587 1529
-f 1529 1491 1556
-f 1623 1635 1587
-f 1587 1556 1623
-f 1667 1675 1635
-f 1635 1623 1667
-f 1890 1895 1675
-f 1675 1667 1890
-f 1311 1313 1308
-f 1308 1307 1311
-f 1321 1323 1313
-f 1313 1311 1321
-f 1342 1344 1323
-f 1323 1321 1342
-f 1378 1380 1344
-f 1344 1342 1378
-f 1417 1419 1380
-f 1380 1378 1417
-f 1489 1491 1419
-f 1419 1417 1489
-f 1555 1556 1491
-f 1491 1489 1555
-f 1621 1623 1556
-f 1556 1555 1621
-f 1665 1667 1623
-f 1623 1621 1665
-f 1881 1890 1667
-f 1667 1665 1881
-f 1338 1311 1307
-f 1307 1334 1338
-f 1364 1321 1311
-f 1311 1338 1364
-f 1382 1342 1321
-f 1321 1364 1382
-f 1409 1378 1342
-f 1342 1382 1409
-f 1455 1417 1378
-f 1378 1409 1455
-f 1517 1489 1417
-f 1417 1455 1517
-f 1581 1555 1489
-f 1489 1517 1581
-f 1629 1621 1555
-f 1555 1581 1629
-f 1671 1665 1621
-f 1621 1629 1671
-f 1893 1881 1665
-f 1665 1671 1893
-f 1403 1338 1334
-f 1334 1398 1403
-f 1413 1364 1338
-f 1338 1403 1413
-f 1437 1382 1364
-f 1364 1413 1437
-f 1477 1409 1382
-f 1382 1437 1477
-f 1515 1455 1409
-f 1409 1477 1515
-f 1563 1517 1455
-f 1455 1515 1563
-f 1605 1581 1517
-f 1517 1563 1605
-f 1645 1629 1581
-f 1581 1605 1645
-f 1679 1671 1629
-f 1629 1645 1679
-f 1900 1893 1671
-f 1671 1679 1900
-f 1482 1403 1398
-f 1398 1478 1482
-f 1496 1413 1403
-f 1403 1482 1496
-f 1511 1437 1413
-f 1413 1496 1511
-f 1539 1477 1437
-f 1437 1511 1539
-f 1579 1515 1477
-f 1477 1539 1579
-f 1599 1563 1515
-f 1515 1579 1599
-f 1631 1605 1563
-f 1563 1599 1631
-f 1653 1645 1605
-f 1605 1631 1653
-f 1681 1679 1645
-f 1645 1653 1681
-f 1902 1900 1679
-f 1679 1681 1902
-f 1544 1482 1478
-f 1478 1536 1544
-f 1548 1496 1482
-f 1482 1544 1548
-f 1568 1511 1496
-f 1496 1548 1568
-f 1584 1539 1511
-f 1511 1568 1584
-f 1602 1579 1539
-f 1539 1584 1602
-f 1627 1599 1579
-f 1579 1602 1627
-f 1649 1631 1599
-f 1599 1627 1649
-f 1669 1653 1631
-f 1631 1649 1669
-f 1689 1681 1653
-f 1653 1669 1689
-f 1921 1902 1681
-f 1681 1689 1921
-f 1560 1544 1536
-f 1536 1552 1560
-f 1572 1548 1544
-f 1544 1560 1572
-f 1582 1568 1548
-f 1548 1572 1582
-f 1594 1584 1568
-f 1568 1582 1594
-f 1610 1602 1584
-f 1584 1594 1610
-f 1632 1627 1602
-f 1602 1610 1632
-f 1651 1649 1627
-f 1627 1632 1651
-f 1673 1669 1649
-f 1649 1651 1673
-f 1691 1689 1669
-f 1669 1673 1691
-f 1922 1921 1689
-f 1689 1691 1922
-f 1508 1560 1552
-f 1552 1500 1508
-f 1522 1572 1560
-f 1560 1508 1522
-f 1542 1582 1572
-f 1572 1522 1542
-f 1566 1594 1582
-f 1582 1542 1566
-f 1590 1610 1594
-f 1594 1566 1590
-f 1614 1632 1610
-f 1610 1590 1614
-f 1639 1651 1632
-f 1632 1614 1639
-f 1659 1673 1651
-f 1651 1639 1659
-f 1685 1691 1673
-f 1673 1659 1685
-f 1928 1922 1691
-f 1691 1685 1928
-f 1888 1887 1937
-f 1888 1937 1961
-f 1888 1961 1983
-f 1888 1983 2007
-f 1888 2007 2031
-f 1888 2031 2049
-f 1888 2049 2077
-f 1888 2077 2097
-f 1888 2097 2105
-f 1888 2105 2111
-f 1949 1937 1887
-f 1887 1885 1949
-f 1989 1961 1937
-f 1937 1949 1989
-f 2037 1983 1961
-f 1961 1989 2037
-f 2095 2007 1983
-f 1983 2037 2095
-f 2143 2031 2007
-f 2007 2095 2143
-f 2201 2049 2031
-f 2031 2143 2201
-f 2227 2077 2049
-f 2049 2201 2227
-f 2250 2097 2077
-f 2077 2227 2250
-f 2258 2105 2097
-f 2097 2250 2258
-f 2262 2111 2105
-f 2105 2258 2262
-f 1957 1949 1885
-f 1885 1883 1957
-f 2001 1989 1949
-f 1949 1957 2001
-f 2066 2037 1989
-f 1989 2001 2066
-f 2133 2095 2037
-f 2037 2066 2133
-f 2205 2143 2095
-f 2095 2133 2205
-f 2244 2201 2143
-f 2143 2205 2244
-f 2280 2227 2201
-f 2201 2244 2280
-f 2301 2250 2227
-f 2227 2280 2301
-f 2311 2258 2250
-f 2250 2301 2311
-f 2314 2262 2258
-f 2258 2311 2314
-f 1959 1957 1883
-f 1883 1880 1959
-f 2003 2001 1957
-f 1957 1959 2003
-f 2069 2066 2001
-f 2001 2003 2069
-f 2135 2133 2066
-f 2066 2069 2135
-f 2207 2205 2133
-f 2133 2135 2207
-f 2246 2244 2205
-f 2205 2207 2246
-f 2282 2280 2244
-f 2244 2246 2282
-f 2303 2301 2280
-f 2280 2282 2303
-f 2313 2311 2301
-f 2301 2303 2313
-f 2317 2314 2311
-f 2311 2313 2317
-f 1953 1959 1880
-f 1880 1877 1953
-f 1995 2003 1959
-f 1959 1953 1995
-f 2043 2069 2003
-f 2003 1995 2043
-f 2107 2135 2069
-f 2069 2043 2107
-f 2169 2207 2135
-f 2135 2107 2169
-f 2215 2246 2207
-f 2207 2169 2215
-f 2242 2282 2246
-f 2246 2215 2242
-f 2260 2303 2282
-f 2282 2242 2260
-f 2286 2313 2303
-f 2303 2260 2286
-f 2290 2317 2313
-f 2313 2286 2290
-f 1945 1953 1877
-f 1877 1875 1945
-f 1979 1995 1953
-f 1953 1945 1979
-f 2019 2043 1995
-f 1995 1979 2019
-f 2061 2107 2043
-f 2043 2019 2061
-f 2109 2169 2107
-f 2107 2061 2109
-f 2147 2215 2169
-f 2169 2109 2147
-f 2187 2242 2215
-f 2215 2147 2187
-f 2211 2260 2242
-f 2242 2187 2211
-f 2221 2286 2260
-f 2260 2211 2221
-f 2224 2290 2286
-f 2286 2221 2224
-f 1943 1945 1875
-f 1875 1873 1943
-f 1971 1979 1945
-f 1945 1943 1971
-f 1993 2019 1979
-f 1979 1971 1993
-f 2025 2061 2019
-f 2019 1993 2025
-f 2045 2109 2061
-f 2061 2025 2045
-f 2085 2147 2109
-f 2109 2045 2085
-f 2113 2187 2147
-f 2147 2085 2113
-f 2126 2211 2187
-f 2187 2113 2126
-f 2140 2221 2211
-f 2211 2126 2140
-f 2144 2224 2221
-f 2221 2140 2144
-f 1935 1943 1873
-f 1873 1871 1935
-f 1955 1971 1943
-f 1943 1935 1955
-f 1975 1993 1971
-f 1971 1955 1975
-f 1997 2025 1993
-f 1993 1975 1997
-f 2020 2045 2025
-f 2025 1997 2020
-f 2038 2085 2045
-f 2045 2020 2038
-f 2054 2113 2085
-f 2085 2038 2054
-f 2074 2126 2113
-f 2113 2054 2074
-f 2078 2140 2126
-f 2126 2074 2078
-f 2086 2144 2140
-f 2140 2078 2086
-f 1933 1935 1871
-f 1871 1869 1933
-f 1951 1955 1935
-f 1935 1933 1951
-f 1973 1975 1955
-f 1955 1951 1973
-f 1990 1997 1975
-f 1975 1973 1990
-f 2012 2020 1997
-f 1997 1990 2012
-f 2028 2038 2020
-f 2020 2012 2028
-f 2040 2054 2038
-f 2038 2028 2040
-f 2050 2074 2054
-f 2054 2040 2050
-f 2062 2078 2074
-f 2074 2050 2062
-f 2070 2086 2078
-f 2078 2062 2070
-f 1939 1933 1869
-f 1869 1866 1939
-f 1965 1951 1933
-f 1933 1939 1965
-f 1985 1973 1951
-f 1951 1965 1985
-f 2008 1990 1973
-f 1973 1985 2008
-f 2032 2012 1990
-f 1990 2008 2032
-f 2056 2028 2012
-f 2012 2032 2056
-f 2080 2040 2028
-f 2028 2056 2080
-f 2100 2050 2040
-f 2040 2080 2100
-f 2114 2062 2050
-f 2050 2100 2114
-f 2122 2070 2062
-f 2062 2114 2122
-f 2232 2116 2124
-f 2124 2236 2232
-f 2218 2102 2116
-f 2116 2232 2218
-f 2199 2082 2102
-f 2102 2218 2199
-f 2150 2058 2082
-f 2082 2199 2150
-f 2120 2034 2058
-f 2058 2150 2120
-f 2064 2010 2034
-f 2034 2120 2064
-f 2023 1986 2010
-f 2010 2064 2023
-f 1980 1966 1986
-f 1986 2023 1980
-f 1946 1940 1966
-f 1966 1980 1946
-f 1862 1730 1940
-f 1940 1946 1862
-f 2332 2232 2236
-f 2236 2336 2332
-f 2322 2218 2232
-f 2232 2332 2322
-f 2306 2199 2218
-f 2218 2322 2306
-f 2275 2150 2199
-f 2199 2306 2275
-f 2234 2120 2150
-f 2150 2275 2234
-f 2170 2064 2120
-f 2120 2234 2170
-f 2093 2023 2064
-f 2064 2170 2093
-f 2016 1980 2023
-f 2023 2093 2016
-f 1968 1946 1980
-f 1980 2016 1968
-f 1858 1862 1946
-f 1946 1968 1858
-f 2409 2332 2336
-f 2336 2413 2409
-f 2400 2322 2332
-f 2332 2409 2400
-f 2376 2306 2322
-f 2322 2400 2376
-f 2349 2275 2306
-f 2306 2376 2349
-f 2324 2234 2275
-f 2275 2349 2324
-f 2271 2170 2234
-f 2234 2324 2271
-f 2185 2093 2170
-f 2170 2271 2185
-f 2072 2016 2093
-f 2093 2185 2072
-f 1976 1968 2016
-f 2016 2072 1976
-f 1729 1858 1968
-f 1968 1976 1729
-f 2488 2409 2413
-f 2413 2498 2488
-f 2470 2400 2409
-f 2409 2488 2470
-f 2444 2376 2400
-f 2400 2470 2444
-f 2418 2349 2376
-f 2376 2444 2418
-f 2384 2324 2349
-f 2349 2418 2384
-f 2338 2271 2324
-f 2324 2384 2338
-f 2269 2185 2271
-f 2271 2338 2269
-f 2138 2072 2185
-f 2185 2269 2138
-f 1998 1976 2072
-f 2072 2138 1998
-f 1722 1729 1976
-f 1976 1998 1722
-f 2559 2488 2498
-f 2498 2569 2559
-f 2549 2470 2488
-f 2488 2559 2549
-f 2531 2444 2470
-f 2470 2549 2531
-f 2492 2418 2444
-f 2444 2531 2492
-f 2436 2384 2418
-f 2418 2492 2436
-f 2394 2338 2384
-f 2384 2436 2394
-f 2326 2269 2338
-f 2338 2394 2326
-f 2212 2138 2269
-f 2269 2326 2212
-f 2026 1998 2138
-f 2138 2212 2026
-f 1850 1722 1998
-f 1998 2026 1850
-f 2653 2559 2569
-f 2569 2655 2653
-f 2631 2549 2559
-f 2559 2653 2631
-f 2593 2531 2549
-f 2549 2631 2593
-f 2551 2492 2531
-f 2531 2593 2551
-f 2510 2436 2492
-f 2492 2551 2510
-f 2432 2394 2436
-f 2436 2510 2432
-f 2366 2326 2394
-f 2394 2432 2366
-f 2263 2212 2326
-f 2326 2366 2263
-f 2052 2026 2212
-f 2212 2263 2052
-f 1726 1850 2026
-f 2026 2052 1726
-f 2720 2653 2655
-f 2655 2726 2720
-f 2697 2631 2653
-f 2653 2720 2697
-f 2662 2593 2631
-f 2631 2697 2662
-f 2607 2551 2593
-f 2593 2662 2607
-f 2547 2510 2551
-f 2551 2607 2547
-f 2484 2432 2510
-f 2510 2547 2484
-f 2405 2366 2432
-f 2432 2484 2405
-f 2308 2263 2366
-f 2366 2405 2308
-f 2090 2052 2263
-f 2263 2308 2090
-f 1719 1726 2052
-f 2052 2090 1719
-f 2787 2720 2726
-f 2726 2795 2787
-f 2759 2697 2720
-f 2720 2787 2759
-f 2713 2662 2697
-f 2697 2759 2713
-f 2657 2607 2662
-f 2662 2713 2657
-f 2589 2547 2607
-f 2607 2657 2589
-f 2525 2484 2547
-f 2547 2589 2525
-f 2422 2405 2484
-f 2484 2525 2422
-f 2330 2308 2405
-f 2405 2422 2330
-f 2118 2090 2308
-f 2308 2330 2118
-f 1700 1719 2090
-f 2090 2118 1700
-f 2834 2787 2795
-f 2795 2844 2834
-f 2798 2759 2787
-f 2787 2834 2798
-f 2750 2713 2759
-f 2759 2798 2750
-f 2690 2657 2713
-f 2713 2750 2690
-f 2624 2589 2657
-f 2657 2690 2624
-f 2536 2525 2589
-f 2589 2624 2536
-f 2441 2422 2525
-f 2525 2536 2441
-f 2340 2330 2422
-f 2422 2441 2340
-f 2128 2118 2330
-f 2330 2340 2128
-f 1825 1700 2118
-f 2118 2128 1825
-f 2847 2834 2844
-f 2844 2857 2847
-f 2821 2798 2834
-f 2834 2847 2821
-f 2765 2750 2798
-f 2798 2821 2765
-f 2703 2690 2750
-f 2750 2765 2703
-f 2637 2624 2690
-f 2690 2703 2637
-f 2543 2536 2624
-f 2624 2637 2543
-f 2446 2441 2536
-f 2536 2543 2446
-f 2344 2340 2441
-f 2441 2446 2344
-f 2136 2128 2340
-f 2340 2344 2136
-f 1713 1825 2128
-f 2128 2136 1713
-f 1676 1682 1864
-f 1864 1862 1676
-f 1642 1656 1682
-f 1682 1676 1642
-f 1601 1636 1656
-f 1656 1642 1601
-f 1558 1612 1636
-f 1636 1601 1558
-f 1502 1588 1612
-f 1612 1558 1502
-f 1472 1564 1588
-f 1588 1502 1472
-f 1425 1540 1564
-f 1564 1472 1425
-f 1404 1520 1540
-f 1540 1425 1404
-f 1390 1506 1520
-f 1520 1404 1390
-f 1387 1498 1506
-f 1506 1390 1387
-f 1654 1676 1862
-f 1862 1859 1654
-f 1606 1642 1676
-f 1676 1654 1606
-f 1531 1601 1642
-f 1642 1606 1531
-f 1452 1558 1601
-f 1601 1531 1452
-f 1388 1502 1558
-f 1558 1452 1388
-f 1347 1472 1502
-f 1502 1388 1347
-f 1316 1425 1472
-f 1472 1347 1316
-f 1300 1404 1425
-f 1425 1316 1300
-f 1290 1390 1404
-f 1404 1300 1290
-f 1286 1387 1390
-f 1390 1290 1286
-f 1646 1654 1859
-f 1859 1856 1646
-f 1550 1606 1654
-f 1654 1646 1550
-f 1439 1531 1606
-f 1606 1550 1439
-f 1351 1452 1531
-f 1531 1439 1351
-f 1298 1388 1452
-f 1452 1351 1298
-f 1275 1347 1388
-f 1388 1298 1275
-f 1246 1316 1347
-f 1347 1275 1246
-f 1222 1300 1316
-f 1316 1246 1222
-f 1215 1290 1300
-f 1300 1222 1215
-f 1211 1286 1290
-f 1290 1215 1211
-f 1624 1646 1856
-f 1856 1854 1624
-f 1484 1550 1646
-f 1646 1624 1484
-f 1353 1439 1550
-f 1550 1484 1353
-f 1284 1351 1439
-f 1439 1353 1284
-f 1238 1298 1351
-f 1351 1284 1238
-f 1204 1275 1298
-f 1298 1238 1204
-f 1178 1246 1275
-f 1275 1204 1178
-f 1152 1222 1246
-f 1246 1178 1152
-f 1134 1215 1222
-f 1222 1152 1134
-f 1124 1211 1215
-f 1215 1134 1124
-f 1596 1624 1854
-f 1854 1851 1596
-f 1410 1484 1624
-f 1624 1596 1410
-f 1296 1353 1484
-f 1484 1410 1296
-f 1228 1284 1353
-f 1353 1296 1228
-f 1186 1238 1284
-f 1284 1228 1186
-f 1130 1204 1238
-f 1238 1186 1130
-f 1091 1178 1204
-f 1204 1130 1091
-f 1073 1152 1178
-f 1178 1091 1073
-f 1063 1134 1152
-f 1152 1073 1063
-f 1053 1124 1134
-f 1134 1063 1053
-f 1570 1596 1851
-f 1851 1848 1570
-f 1359 1410 1596
-f 1596 1570 1359
-f 1256 1296 1410
-f 1410 1359 1256
-f 1190 1228 1296
-f 1296 1256 1190
-f 1112 1186 1228
-f 1228 1190 1112
-f 1071 1130 1186
-f 1186 1112 1071
-f 1029 1091 1130
-f 1130 1071 1029
-f 991 1073 1091
-f 1091 1029 991
-f 969 1063 1073
-f 1073 991 969
-f 967 1053 1063
-f 1063 969 967
-f 1532 1570 1848
-f 1848 1846 1532
-f 1314 1359 1570
-f 1570 1532 1314
-f 1219 1256 1359
-f 1359 1314 1219
-f 1138 1190 1256
-f 1256 1219 1138
-f 1075 1112 1190
-f 1190 1138 1075
-f 1015 1071 1112
-f 1112 1075 1015
-f 962 1029 1071
-f 1071 1015 962
-f 925 991 1029
-f 1029 962 925
-f 904 969 991
-f 991 925 904
-f 898 967 969
-f 969 904 898
-f 1504 1532 1846
-f 1846 1832 1504
-f 1292 1314 1532
-f 1532 1504 1292
-f 1200 1219 1314
-f 1314 1292 1200
-f 1097 1138 1219
-f 1219 1200 1097
-f 1033 1075 1138
-f 1138 1097 1033
-f 965 1015 1075
-f 1075 1033 965
-f 909 962 1015
-f 1015 965 909
-f 863 925 962
-f 962 909 863
-f 835 904 925
-f 925 863 835
-f 827 898 904
-f 904 835 827
-f 1494 1504 1832
-f 1832 1824 1494
-f 1282 1292 1504
-f 1504 1494 1282
-f 1183 1200 1292
-f 1292 1282 1183
-f 1088 1097 1200
-f 1200 1183 1088
-f 1000 1033 1097
-f 1097 1088 1000
-f 934 965 1033
-f 1033 1000 934
-f 874 909 965
-f 965 934 874
-f 826 863 909
-f 909 874 826
-f 790 835 863
-f 863 826 790
-f 780 827 835
-f 835 790 780
-f 1486 1494 1824
-f 1824 1814 1486
-f 1278 1282 1494
-f 1494 1486 1278
-f 1176 1183 1282
-f 1282 1278 1176
-f 1079 1088 1183
-f 1183 1176 1079
-f 985 1000 1088
-f 1088 1079 985
-f 919 934 1000
-f 1000 985 919
-f 857 874 934
-f 934 919 857
-f 801 826 874
-f 874 857 801
-f 775 790 826
-f 826 801 775
-f 765 780 790
-f 790 775 765
-f 1391 1507 1499
-f 1499 1387 1391
-f 1405 1521 1507
-f 1507 1391 1405
-f 1424 1541 1521
-f 1521 1405 1424
-f 1473 1565 1541
-f 1541 1424 1473
-f 1503 1589 1565
-f 1565 1473 1503
-f 1559 1613 1589
-f 1589 1503 1559
-f 1600 1637 1613
-f 1613 1559 1600
-f 1643 1657 1637
-f 1637 1600 1643
-f 1677 1683 1657
-f 1657 1643 1677
-f 1863 1892 1683
-f 1683 1677 1863
-f 1291 1391 1387
-f 1387 1287 1291
-f 1301 1405 1391
-f 1391 1291 1301
-f 1317 1424 1405
-f 1405 1301 1317
-f 1348 1473 1424
-f 1424 1317 1348
-f 1389 1503 1473
-f 1473 1348 1389
-f 1453 1559 1503
-f 1503 1389 1453
-f 1530 1600 1559
-f 1559 1453 1530
-f 1607 1643 1600
-f 1600 1530 1607
-f 1655 1677 1643
-f 1643 1607 1655
-f 1861 1863 1677
-f 1677 1655 1861
-f 1214 1291 1287
-f 1287 1210 1214
-f 1223 1301 1291
-f 1291 1214 1223
-f 1247 1317 1301
-f 1301 1223 1247
-f 1274 1348 1317
-f 1317 1247 1274
-f 1299 1389 1348
-f 1348 1274 1299
-f 1352 1453 1389
-f 1389 1299 1352
-f 1438 1530 1453
-f 1453 1352 1438
-f 1551 1607 1530
-f 1530 1438 1551
-f 1647 1655 1607
-f 1607 1551 1647
-f 1891 1861 1655
-f 1655 1647 1891
-f 1135 1214 1210
-f 1210 1125 1135
-f 1153 1223 1214
-f 1214 1135 1153
-f 1179 1247 1223
-f 1223 1153 1179
-f 1205 1274 1247
-f 1247 1179 1205
-f 1239 1299 1274
-f 1274 1205 1239
-f 1285 1352 1299
-f 1299 1239 1285
-f 1354 1438 1352
-f 1352 1285 1354
-f 1485 1551 1438
-f 1438 1354 1485
-f 1625 1647 1551
-f 1551 1485 1625
-f 1901 1891 1647
-f 1647 1625 1901
-f 1064 1135 1125
-f 1125 1054 1064
-f 1074 1153 1135
-f 1135 1064 1074
-f 1092 1179 1153
-f 1153 1074 1092
-f 1131 1205 1179
-f 1179 1092 1131
-f 1187 1239 1205
-f 1205 1131 1187
-f 1229 1285 1239
-f 1239 1187 1229
-f 1297 1354 1285
-f 1285 1229 1297
-f 1411 1485 1354
-f 1354 1297 1411
-f 1597 1625 1485
-f 1485 1411 1597
-f 1853 1901 1625
-f 1625 1597 1853
-f 970 1064 1054
-f 1054 968 970
-f 992 1074 1064
-f 1064 970 992
-f 1030 1092 1074
-f 1074 992 1030
-f 1072 1131 1092
-f 1092 1030 1072
-f 1113 1187 1131
-f 1131 1072 1113
-f 1191 1229 1187
-f 1187 1113 1191
-f 1257 1297 1229
-f 1229 1191 1257
-f 1360 1411 1297
-f 1297 1257 1360
-f 1571 1597 1411
-f 1411 1360 1571
-f 1899 1853 1597
-f 1597 1571 1899
-f 903 970 968
-f 968 897 903
-f 926 992 970
-f 970 903 926
-f 961 1030 992
-f 992 926 961
-f 1016 1072 1030
-f 1030 961 1016
-f 1076 1113 1072
-f 1072 1016 1076
-f 1139 1191 1113
-f 1113 1076 1139
-f 1218 1257 1191
-f 1191 1139 1218
-f 1315 1360 1257
-f 1257 1218 1315
-f 1533 1571 1360
-f 1360 1315 1533
-f 1920 1899 1571
-f 1571 1533 1920
-f 836 903 897
-f 897 828 836
-f 864 926 903
-f 903 836 864
-f 910 961 926
-f 926 864 910
-f 966 1016 961
-f 961 910 966
-f 1034 1076 1016
-f 1016 966 1034
-f 1098 1139 1076
-f 1076 1034 1098
-f 1201 1218 1139
-f 1139 1098 1201
-f 1293 1315 1218
-f 1218 1201 1293
-f 1505 1533 1315
-f 1315 1293 1505
-f 1924 1920 1533
-f 1533 1505 1924
-f 789 836 828
-f 828 779 789
-f 825 864 836
-f 836 789 825
-f 873 910 864
-f 864 825 873
-f 933 966 910
-f 910 873 933
-f 999 1034 966
-f 966 933 999
-f 1087 1098 1034
-f 1034 999 1087
-f 1182 1201 1098
-f 1098 1087 1182
-f 1283 1293 1201
-f 1201 1182 1283
-f 1495 1505 1293
-f 1293 1283 1495
-f 1826 1924 1505
-f 1505 1495 1826
-f 776 789 779
-f 779 766 776
-f 802 825 789
-f 789 776 802
-f 858 873 825
-f 825 802 858
-f 920 933 873
-f 873 858 920
-f 986 999 933
-f 933 920 986
-f 1080 1087 999
-f 999 986 1080
-f 1177 1182 1087
-f 1087 1080 1177
-f 1279 1283 1182
-f 1182 1177 1279
-f 1487 1495 1283
-f 1283 1279 1487
-f 1914 1826 1495
-f 1495 1487 1914
-f 1947 1941 1867
-f 1867 1863 1947
-f 1981 1967 1941
-f 1941 1947 1981
-f 2022 1987 1967
-f 1967 1981 2022
-f 2065 2011 1987
-f 1987 2022 2065
-f 2121 2035 2011
-f 2011 2065 2121
-f 2151 2059 2035
-f 2035 2121 2151
-f 2198 2083 2059
-f 2059 2151 2198
-f 2219 2103 2083
-f 2083 2198 2219
-f 2233 2117 2103
-f 2103 2219 2233
-f 2236 2125 2117
-f 2117 2233 2236
-f 1969 1947 1863
-f 1863 1860 1969
-f 2017 1981 1947
-f 1947 1969 2017
-f 2092 2022 1981
-f 1981 2017 2092
-f 2171 2065 2022
-f 2022 2092 2171
-f 2235 2121 2065
-f 2065 2171 2235
-f 2276 2151 2121
-f 2121 2235 2276
-f 2307 2198 2151
-f 2151 2276 2307
-f 2323 2219 2198
-f 2198 2307 2323
-f 2333 2233 2219
-f 2219 2323 2333
-f 2337 2236 2233
-f 2233 2333 2337
-f 1977 1969 1860
-f 1860 1857 1977
-f 2073 2017 1969
-f 1969 1977 2073
-f 2184 2092 2017
-f 2017 2073 2184
-f 2272 2171 2092
-f 2092 2184 2272
-f 2325 2235 2171
-f 2171 2272 2325
-f 2348 2276 2235
-f 2235 2325 2348
-f 2377 2307 2276
-f 2276 2348 2377
-f 2401 2323 2307
-f 2307 2377 2401
-f 2408 2333 2323
-f 2323 2401 2408
-f 2412 2337 2333
-f 2333 2408 2412
-f 1999 1977 1857
-f 1857 1855 1999
-f 2139 2073 1977
-f 1977 1999 2139
-f 2270 2184 2073
-f 2073 2139 2270
-f 2339 2272 2184
-f 2184 2270 2339
-f 2385 2325 2272
-f 2272 2339 2385
-f 2419 2348 2325
-f 2325 2385 2419
-f 2445 2377 2348
-f 2348 2419 2445
-f 2471 2401 2377
-f 2377 2445 2471
-f 2489 2408 2401
-f 2401 2471 2489
-f 2499 2412 2408
-f 2408 2489 2499
-f 2027 1999 1855
-f 1855 1852 2027
-f 2213 2139 1999
-f 1999 2027 2213
-f 2327 2270 2139
-f 2139 2213 2327
-f 2395 2339 2270
-f 2270 2327 2395
-f 2437 2385 2339
-f 2339 2395 2437
-f 2493 2419 2385
-f 2385 2437 2493
-f 2532 2445 2419
-f 2419 2493 2532
-f 2550 2471 2445
-f 2445 2532 2550
-f 2560 2489 2471
-f 2471 2550 2560
-f 2570 2499 2489
-f 2489 2560 2570
-f 2053 2027 1852
-f 1852 1849 2053
-f 2264 2213 2027
-f 2027 2053 2264
-f 2367 2327 2213
-f 2213 2264 2367
-f 2433 2395 2327
-f 2327 2367 2433
-f 2511 2437 2395
-f 2395 2433 2511
-f 2552 2493 2437
-f 2437 2511 2552
-f 2594 2532 2493
-f 2493 2552 2594
-f 2632 2550 2532
-f 2532 2594 2632
-f 2654 2560 2550
-f 2550 2632 2654
-f 2656 2570 2560
-f 2560 2654 2656
-f 2091 2053 1849
-f 1849 1847 2091
-f 2309 2264 2053
-f 2053 2091 2309
-f 2404 2367 2264
-f 2264 2309 2404
-f 2485 2433 2367
-f 2367 2404 2485
-f 2548 2511 2433
-f 2433 2485 2548
-f 2608 2552 2511
-f 2511 2548 2608
-f 2661 2594 2552
-f 2552 2608 2661
-f 2698 2632 2594
-f 2594 2661 2698
-f 2719 2654 2632
-f 2632 2698 2719
-f 2725 2656 2654
-f 2654 2719 2725
-f 2119 2091 1847
-f 1847 1833 2119
-f 2331 2309 2091
-f 2091 2119 2331
-f 2423 2404 2309
-f 2309 2331 2423
-f 2526 2485 2404
-f 2404 2423 2526
-f 2590 2548 2485
-f 2485 2526 2590
-f 2658 2608 2548
-f 2548 2590 2658
-f 2714 2661 2608
-f 2608 2658 2714
-f 2760 2698 2661
-f 2661 2714 2760
-f 2788 2719 2698
-f 2698 2760 2788
-f 2796 2725 2719
-f 2719 2788 2796
-f 2129 2119 1833
-f 1833 1827 2129
-f 2341 2331 2119
-f 2119 2129 2341
-f 2440 2423 2331
-f 2331 2341 2440
-f 2535 2526 2423
-f 2423 2440 2535
-f 2623 2590 2526
-f 2526 2535 2623
-f 2689 2658 2590
-f 2590 2623 2689
-f 2749 2714 2658
-f 2658 2689 2749
-f 2797 2760 2714
-f 2714 2749 2797
-f 2833 2788 2760
-f 2760 2797 2833
-f 2843 2796 2788
-f 2788 2833 2843
-f 2137 2129 1827
-f 1827 1815 2137
-f 2345 2341 2129
-f 2129 2137 2345
-f 2447 2440 2341
-f 2341 2345 2447
-f 2544 2535 2440
-f 2440 2447 2544
-f 2638 2623 2535
-f 2535 2544 2638
-f 2704 2689 2623
-f 2623 2638 2704
-f 2766 2749 2689
-f 2689 2704 2766
-f 2822 2797 2749
-f 2749 2766 2822
-f 2848 2833 2797
-f 2797 2822 2848
-f 2858 2843 2833
-f 2833 2848 2858
-f 1735 2334 2329
-f 1735 2329 2321
-f 1735 2321 2305
-f 1735 2305 2274
-f 1735 2274 2231
-f 1735 2231 2167
-f 1735 2167 2089
-f 1735 2089 2014
-f 1735 2014 1962
-f 1735 1962 1733
-f 2515 2329 2334
-f 2334 2524 2515
-f 2495 2321 2329
-f 2329 2515 2495
-f 2456 2305 2321
-f 2321 2495 2456
-f 2429 2274 2305
-f 2305 2456 2429
-f 2399 2231 2274
-f 2274 2429 2399
-f 2347 2167 2231
-f 2231 2399 2347
-f 2292 2089 2167
-f 2167 2347 2292
-f 2148 2014 2089
-f 2089 2292 2148
-f 2004 1962 2014
-f 2014 2148 2004
-f 1739 1733 1962
-f 1962 2004 1739
-f 2647 2515 2524
-f 2524 2649 2647
-f 2621 2495 2515
-f 2515 2647 2621
-f 2584 2456 2495
-f 2495 2621 2584
-f 2541 2429 2456
-f 2456 2584 2541
-f 2502 2399 2429
-f 2429 2541 2502
-f 2426 2347 2399
-f 2399 2502 2426
-f 2352 2292 2347
-f 2347 2426 2352
-f 2255 2148 2292
-f 2292 2352 2255
-f 2046 2004 2148
-f 2148 2255 2046
-f 1702 1739 2004
-f 2004 2046 1702
-f 2746 2647 2649
-f 2649 2757 2746
-f 2721 2621 2647
-f 2647 2746 2721
-f 2681 2584 2621
-f 2621 2721 2681
-f 2639 2541 2584
-f 2584 2681 2639
-f 2557 2502 2541
-f 2541 2639 2557
-f 2505 2426 2502
-f 2502 2557 2505
-f 2415 2352 2426
-f 2426 2505 2415
-f 2318 2255 2352
-f 2352 2415 2318
-f 2098 2046 2255
-f 2255 2318 2098
-f 1745 1702 2046
-f 2046 2098 1745
-f 2840 2746 2757
-f 2757 2849 2840
-f 2808 2721 2746
-f 2746 2840 2808
-f 2756 2681 2721
-f 2721 2808 2756
-f 2696 2639 2681
-f 2681 2756 2696
-f 2626 2557 2639
-f 2639 2696 2626
-f 2538 2505 2557
-f 2557 2626 2538
-f 2443 2415 2505
-f 2505 2538 2443
-f 2342 2318 2415
-f 2415 2443 2342
-f 2131 2098 2318
-f 2318 2342 2131
-f 1904 1745 2098
-f 2098 2131 1904
-f 2906 2840 2849
-f 2849 2925 2906
-f 2867 2808 2840
-f 2840 2906 2867
-f 2818 2756 2808
-f 2808 2867 2818
-f 2736 2696 2756
-f 2756 2818 2736
-f 2667 2626 2696
-f 2696 2736 2667
-f 2565 2538 2626
-f 2626 2667 2565
-f 2475 2443 2538
-f 2538 2565 2475
-f 2356 2342 2443
-f 2443 2475 2356
-f 2156 2131 2342
-f 2342 2356 2156
-f 1704 1904 2131
-f 2131 2156 1704
-f 2976 2906 2925
-f 2925 2987 2976
-f 2914 2867 2906
-f 2906 2976 2914
-f 2852 2818 2867
-f 2867 2914 2852
-f 2772 2736 2818
-f 2818 2852 2772
-f 2688 2667 2736
-f 2736 2772 2688
-f 2592 2565 2667
-f 2667 2688 2592
-f 2497 2475 2565
-f 2565 2592 2497
-f 2372 2356 2475
-f 2475 2497 2372
-f 2176 2156 2356
-f 2356 2372 2176
-f 1752 1704 2156
-f 2156 2176 1752
-f 2993 2976 2987
-f 2987 3011 2993
-f 2952 2914 2976
-f 2976 2993 2952
-f 2874 2852 2914
-f 2914 2952 2874
-f 2794 2772 2852
-f 2852 2874 2794
-f 2702 2688 2772
-f 2772 2794 2702
-f 2604 2592 2688
-f 2688 2702 2604
-f 2509 2497 2592
-f 2592 2604 2509
-f 2380 2372 2497
-f 2497 2509 2380
-f 2182 2176 2372
-f 2372 2380 2182
-f 1723 1752 2176
-f 2176 2182 1723
-f 3000 2993 3011
-f 3011 3020 3000
-f 2967 2952 2993
-f 2993 3000 2967
-f 2879 2874 2952
-f 2952 2967 2879
-f 2799 2794 2874
-f 2874 2879 2799
-f 2707 2702 2794
-f 2794 2799 2707
-f 2605 2604 2702
-f 2702 2707 2605
-f 2512 2509 2604
-f 2604 2605 2512
-f 2382 2380 2509
-f 2509 2512 2382
-f 2188 2182 2380
-f 2380 2382 2188
-f 1699 1723 2182
-f 2182 2188 1699
-f 3006 3000 3020
-f 3020 3022 3006
-f 2972 2967 3000
-f 3000 3006 2972
-f 2888 2879 2967
-f 2967 2972 2888
-f 2804 2799 2879
-f 2879 2888 2804
-f 2710 2707 2799
-f 2799 2804 2710
-f 2613 2605 2707
-f 2707 2710 2613
-f 2520 2512 2605
-f 2605 2613 2520
-f 2388 2382 2512
-f 2512 2520 2388
-f 2192 2188 2382
-f 2382 2388 2192
-f 1760 1699 2188
-f 2188 2192 1760
-f 1735 1737 1660
-f 1735 1660 1608
-f 1735 1608 1535
-f 1735 1535 1457
-f 1735 1457 1393
-f 1735 1393 1350
-f 1735 1350 1319
-f 1735 1319 1303
-f 1735 1303 1295
-f 1735 1295 1288
-f 1618 1660 1737
-f 1737 1739 1618
-f 1474 1608 1660
-f 1660 1618 1474
-f 1332 1535 1608
-f 1608 1474 1332
-f 1277 1457 1535
-f 1535 1332 1277
-f 1225 1393 1457
-f 1457 1277 1225
-f 1195 1350 1393
-f 1393 1225 1195
-f 1166 1319 1350
-f 1350 1195 1166
-f 1129 1303 1319
-f 1319 1166 1129
-f 1109 1295 1303
-f 1303 1129 1109
-f 1099 1288 1295
-f 1295 1109 1099
-f 1576 1618 1739
-f 1739 1741 1576
-f 1367 1474 1618
-f 1618 1576 1367
-f 1270 1332 1474
-f 1474 1367 1270
-f 1196 1277 1332
-f 1332 1270 1196
-f 1120 1225 1277
-f 1277 1196 1120
-f 1081 1195 1225
-f 1225 1120 1081
-f 1040 1166 1195
-f 1195 1081 1040
-f 1001 1129 1166
-f 1166 1040 1001
-f 975 1109 1129
-f 1129 1001 975
-f 973 1099 1109
-f 1109 975 973
-f 1524 1576 1741
-f 1741 1744 1524
-f 1304 1367 1576
-f 1576 1524 1304
-f 1209 1270 1367
-f 1367 1304 1209
-f 1119 1196 1270
-f 1270 1209 1119
-f 1065 1120 1196
-f 1196 1119 1065
-f 983 1081 1120
-f 1120 1065 983
-f 941 1040 1081
-f 1081 983 941
-f 901 1001 1040
-f 1040 941 901
-f 878 975 1001
-f 1001 901 878
-f 865 973 975
-f 975 878 865
-f 1493 1524 1744
-f 1744 1747 1493
-f 1280 1304 1524
-f 1524 1493 1280
-f 1181 1209 1304
-f 1304 1280 1181
-f 1086 1119 1209
-f 1209 1181 1086
-f 998 1065 1119
-f 1119 1086 998
-f 928 983 1065
-f 1065 998 928
-f 868 941 983
-f 983 928 868
-f 816 901 941
-f 941 868 816
-f 784 878 901
-f 901 816 784
-f 773 865 878
-f 878 784 773
-f 1466 1493 1747
-f 1747 1749 1466
-f 1266 1280 1493
-f 1493 1466 1266
-f 1149 1181 1280
-f 1280 1266 1149
-f 1057 1086 1181
-f 1181 1149 1057
-f 955 998 1086
-f 1086 1057 955
-f 888 928 998
-f 998 955 888
-f 806 868 928
-f 928 888 806
-f 755 816 868
-f 868 806 755
-f 718 784 816
-f 816 755 718
-f 697 773 784
-f 784 718 697
-f 1446 1466 1749
-f 1749 1753 1446
-f 1250 1266 1466
-f 1466 1446 1250
-f 1127 1149 1266
-f 1266 1250 1127
-f 1032 1057 1149
-f 1149 1127 1032
-f 936 955 1057
-f 1057 1032 936
-f 852 888 955
-f 955 936 852
-f 772 806 888
-f 888 852 772
-f 710 755 806
-f 806 772 710
-f 648 718 755
-f 755 710 648
-f 637 697 718
-f 718 648 637
-f 1440 1446 1753
-f 1753 1755 1440
-f 1242 1250 1446
-f 1446 1440 1242
-f 1115 1127 1250
-f 1250 1242 1115
-f 1020 1032 1127
-f 1127 1115 1020
-f 922 936 1032
-f 1032 1020 922
-f 830 852 936
-f 936 922 830
-f 750 772 852
-f 852 830 750
-f 672 710 772
-f 772 750 672
-f 631 648 710
-f 710 672 631
-f 613 637 648
-f 648 631 613
-f 1434 1440 1755
-f 1755 1757 1434
-f 1240 1242 1440
-f 1440 1434 1240
-f 1110 1115 1242
-f 1242 1240 1110
-f 1017 1020 1115
-f 1115 1110 1017
-f 915 922 1020
-f 1020 1017 915
-f 823 830 922
-f 922 915 823
-f 743 750 830
-f 830 823 743
-f 655 672 750
-f 750 743 655
-f 622 631 672
-f 672 655 622
-f 602 613 631
-f 631 622 602
-f 1428 1434 1757
-f 1757 1760 1428
-f 1232 1240 1434
-f 1434 1428 1232
-f 1105 1110 1240
-f 1240 1232 1105
-f 1010 1017 1110
-f 1110 1105 1010
-f 913 915 1017
-f 1017 1010 913
-f 821 823 915
-f 915 913 821
-f 736 743 823
-f 823 821 736
-f 652 655 743
-f 743 736 652
-f 619 622 655
-f 655 652 619
-f 601 602 622
-f 622 619 601
-f 1735 1289 1294
-f 1735 1294 1302
-f 1735 1302 1318
-f 1735 1318 1349
-f 1735 1349 1392
-f 1735 1392 1456
-f 1735 1456 1534
-f 1735 1534 1609
-f 1735 1609 1661
-f 1735 1661 1889
-f 1108 1294 1289
-f 1289 1099 1108
-f 1128 1302 1294
-f 1294 1108 1128
-f 1167 1318 1302
-f 1302 1128 1167
-f 1194 1349 1318
-f 1318 1167 1194
-f 1224 1392 1349
-f 1349 1194 1224
-f 1276 1456 1392
-f 1392 1224 1276
-f 1331 1534 1456
-f 1456 1276 1331
-f 1475 1609 1534
-f 1534 1331 1475
-f 1619 1661 1609
-f 1609 1475 1619
-f 1738 1889 1661
-f 1661 1619 1738
-f 976 1108 1099
-f 1099 974 976
-f 1002 1128 1108
-f 1108 976 1002
-f 1039 1167 1128
-f 1128 1002 1039
-f 1082 1194 1167
-f 1167 1039 1082
-f 1121 1224 1194
-f 1194 1082 1121
-f 1197 1276 1224
-f 1224 1121 1197
-f 1271 1331 1276
-f 1276 1197 1271
-f 1368 1475 1331
-f 1331 1271 1368
-f 1577 1619 1475
-f 1475 1368 1577
-f 1903 1738 1619
-f 1619 1577 1903
-f 877 976 974
-f 974 866 877
-f 902 1002 976
-f 976 877 902
-f 942 1039 1002
-f 1002 902 942
-f 984 1082 1039
-f 1039 942 984
-f 1066 1121 1082
-f 1082 984 1066
-f 1118 1197 1121
-f 1121 1066 1118
-f 1208 1271 1197
-f 1197 1118 1208
-f 1305 1368 1271
-f 1271 1208 1305
-f 1525 1577 1368
-f 1368 1305 1525
-f 1742 1903 1577
-f 1577 1525 1742
-f 783 877 866
-f 866 774 783
-f 815 902 877
-f 877 783 815
-f 867 942 902
-f 902 815 867
-f 927 984 942
-f 942 867 927
-f 997 1066 984
-f 984 927 997
-f 1085 1118 1066
-f 1066 997 1085
-f 1180 1208 1118
-f 1118 1085 1180
-f 1281 1305 1208
-f 1208 1180 1281
-f 1492 1525 1305
-f 1305 1281 1492
-f 1703 1742 1525
-f 1525 1492 1703
-f 717 783 774
-f 774 698 717
-f 756 815 783
-f 783 717 756
-f 805 867 815
-f 815 756 805
-f 887 927 867
-f 867 805 887
-f 956 997 927
-f 927 887 956
-f 1058 1085 997
-f 997 956 1058
-f 1148 1180 1085
-f 1085 1058 1148
-f 1267 1281 1180
-f 1180 1148 1267
-f 1467 1492 1281
-f 1281 1267 1467
-f 1905 1703 1492
-f 1492 1467 1905
-f 647 717 698
-f 698 636 647
-f 709 756 717
-f 717 647 709
-f 771 805 756
-f 756 709 771
-f 851 887 805
-f 805 771 851
-f 935 956 887
-f 887 851 935
-f 1031 1058 956
-f 956 935 1031
-f 1126 1148 1058
-f 1058 1031 1126
-f 1251 1267 1148
-f 1148 1126 1251
-f 1447 1467 1267
-f 1267 1251 1447
-f 1751 1905 1467
-f 1467 1447 1751
-f 630 647 636
-f 636 612 630
-f 671 709 647
-f 647 630 671
-f 749 771 709
-f 709 671 749
-f 829 851 771
-f 771 749 829
-f 921 935 851
-f 851 829 921
-f 1019 1031 935
-f 935 921 1019
-f 1114 1126 1031
-f 1031 1019 1114
-f 1243 1251 1126
-f 1126 1114 1243
-f 1441 1447 1251
-f 1251 1243 1441
-f 1896 1751 1447
-f 1447 1441 1896
-f 623 630 612
-f 612 603 623
-f 656 671 630
-f 630 623 656
-f 744 749 671
-f 671 656 744
-f 824 829 749
-f 749 744 824
-f 916 921 829
-f 829 824 916
-f 1018 1019 921
-f 921 916 1018
-f 1111 1114 1019
-f 1019 1018 1111
-f 1241 1243 1114
-f 1114 1111 1241
-f 1435 1441 1243
-f 1243 1241 1435
-f 1923 1896 1441
-f 1441 1435 1923
-f 617 623 603
-f 603 601 617
-f 650 656 623
-f 623 617 650
-f 734 744 656
-f 656 650 734
-f 818 824 744
-f 744 734 818
-f 912 916 824
-f 824 818 912
-f 1009 1018 916
-f 916 912 1009
-f 1102 1111 1018
-f 1018 1009 1102
-f 1235 1241 1111
-f 1111 1102 1235
-f 1431 1435 1241
-f 1241 1235 1431
-f 1759 1923 1435
-f 1435 1431 1759
-f 1735 1736 1963
-f 1735 1963 2015
-f 1735 2015 2088
-f 1735 2088 2166
-f 1735 2166 2230
-f 1735 2230 2273
-f 1735 2273 2304
-f 1735 2304 2320
-f 1735 2320 2328
-f 1735 2328 2335
-f 2005 1963 1736
-f 1736 1738 2005
-f 2149 2015 1963
-f 1963 2005 2149
-f 2291 2088 2015
-f 2015 2149 2291
-f 2346 2166 2088
-f 2088 2291 2346
-f 2398 2230 2166
-f 2166 2346 2398
-f 2428 2273 2230
-f 2230 2398 2428
-f 2457 2304 2273
-f 2273 2428 2457
-f 2494 2320 2304
-f 2304 2457 2494
-f 2514 2328 2320
-f 2320 2494 2514
-f 2524 2335 2328
-f 2328 2514 2524
-f 2047 2005 1738
-f 1738 1740 2047
-f 2256 2149 2005
-f 2005 2047 2256
-f 2353 2291 2149
-f 2149 2256 2353
-f 2427 2346 2291
-f 2291 2353 2427
-f 2503 2398 2346
-f 2346 2427 2503
-f 2542 2428 2398
-f 2398 2503 2542
-f 2583 2457 2428
-f 2428 2542 2583
-f 2622 2494 2457
-f 2457 2583 2622
-f 2648 2514 2494
-f 2494 2622 2648
-f 2650 2524 2514
-f 2514 2648 2650
-f 2099 2047 1740
-f 1740 1743 2099
-f 2319 2256 2047
-f 2047 2099 2319
-f 2414 2353 2256
-f 2256 2319 2414
-f 2504 2427 2353
-f 2353 2414 2504
-f 2558 2503 2427
-f 2427 2504 2558
-f 2640 2542 2503
-f 2503 2558 2640
-f 2682 2583 2542
-f 2542 2640 2682
-f 2722 2622 2583
-f 2583 2682 2722
-f 2745 2648 2622
-f 2622 2722 2745
-f 2758 2650 2648
-f 2648 2745 2758
-f 2130 2099 1743
-f 1743 1746 2130
-f 2343 2319 2099
-f 2099 2130 2343
-f 2442 2414 2319
-f 2319 2343 2442
-f 2537 2504 2414
-f 2414 2442 2537
-f 2625 2558 2504
-f 2504 2537 2625
-f 2695 2640 2558
-f 2558 2625 2695
-f 2755 2682 2640
-f 2640 2695 2755
-f 2807 2722 2682
-f 2682 2755 2807
-f 2839 2745 2722
-f 2722 2807 2839
-f 2850 2758 2745
-f 2745 2839 2850
-f 2157 2130 1746
-f 1746 1748 2157
-f 2357 2343 2130
-f 2130 2157 2357
-f 2474 2442 2343
-f 2343 2357 2474
-f 2566 2537 2442
-f 2442 2474 2566
-f 2668 2625 2537
-f 2537 2566 2668
-f 2735 2695 2625
-f 2625 2668 2735
-f 2817 2755 2695
-f 2695 2735 2817
-f 2868 2807 2755
-f 2755 2817 2868
-f 2905 2839 2807
-f 2807 2868 2905
-f 2926 2850 2839
-f 2839 2905 2926
-f 2177 2157 1748
-f 1748 1750 2177
-f 2373 2357 2157
-f 2157 2177 2373
-f 2496 2474 2357
-f 2357 2373 2496
-f 2591 2566 2474
-f 2474 2496 2591
-f 2687 2668 2566
-f 2566 2591 2687
-f 2771 2735 2668
-f 2668 2687 2771
-f 2851 2817 2735
-f 2735 2771 2851
-f 2913 2868 2817
-f 2817 2851 2913
-f 2975 2905 2868
-f 2868 2913 2975
-f 2986 2926 2905
-f 2905 2975 2986
-f 2183 2177 1750
-f 1750 1754 2183
-f 2381 2373 2177
-f 2177 2183 2381
-f 2508 2496 2373
-f 2373 2381 2508
-f 2603 2591 2496
-f 2496 2508 2603
-f 2701 2687 2591
-f 2591 2603 2701
-f 2793 2771 2687
-f 2687 2701 2793
-f 2873 2851 2771
-f 2771 2793 2873
-f 2951 2913 2851
-f 2851 2873 2951
-f 2992 2975 2913
-f 2913 2951 2992
-f 3010 2986 2975
-f 2975 2992 3010
-f 2189 2183 1754
-f 1754 1756 2189
-f 2383 2381 2183
-f 2183 2189 2383
-f 2513 2508 2381
-f 2381 2383 2513
-f 2606 2603 2508
-f 2508 2513 2606
-f 2708 2701 2603
-f 2603 2606 2708
-f 2800 2793 2701
-f 2701 2708 2800
-f 2880 2873 2793
-f 2793 2800 2880
-f 2968 2951 2873
-f 2873 2880 2968
-f 3001 2992 2951
-f 2951 2968 3001
-f 3021 3010 2992
-f 2992 3001 3021
-f 2195 2189 1756
-f 1756 1759 2195
-f 2390 2383 2189
-f 2189 2195 2390
-f 2517 2513 2383
-f 2383 2390 2517
-f 2612 2606 2513
-f 2513 2517 2612
-f 2709 2708 2606
-f 2606 2612 2709
-f 2801 2800 2708
-f 2708 2709 2801
-f 2886 2880 2800
-f 2800 2801 2886
-f 2970 2968 2880
-f 2880 2886 2970
-f 3004 3001 2968
-f 2968 2970 3004
-f 3022 3021 3001
-f 3001 3004 3022
diff --git a/software/Print3r/models/teddy.obj b/software/Print3r/models/teddy.obj
deleted file mode 100644
index 57ede687..00000000
--- a/software/Print3r/models/teddy.obj
+++ /dev/null
@@ -1,4790 +0,0 @@
-v -4.75738 8.49991 8.28592
-v -4.55816 11.4788 7.74909
-v -4.37277 13.9925 6.2828
-v -5.70826 13.6563 6.26488
-v -4.22943 15.6584 4.11027
-v -4.14648 15.5999 -0.973337
-v -5.89138 15.1606 -0.996753
-v -4.2195 13.8844 -3.11048
-v -5.55499 13.5482 -3.12841
-v -4.3579 11.3375 -4.52382
-v -4.54062 8.34704 -4.99819
-v -6.35434 10.256 7.73386
-v -7.69167 11.733 6.25465
-v -8.56579 12.7062 4.07349
-v -8.84361 13.0274 1.52244
-v -8.48283 12.6477 -1.01012
-v -7.5384 11.6249 -3.13864
-v -6.15408 10.1147 -4.53906
-v -8.97552 6.43001 6.29472
-v -8.77853 5.01807 6.31419
-v -10.2432 5.77752 4.12585
-v -9.98584 3.93274 4.15128
-v -10.6592 5.52786 1.57912
-v -10.3807 3.53107 1.60664
-v -10.1603 5.71902 -0.957758
-v -9.90289 3.87424 -0.932328
-v -8.82225 6.32192 -3.09856
-v -8.62526 4.90998 -3.0791
-v -6.38315 6.06753 7.78159
-v -7.74491 3.99382 6.34284
-v -8.63535 2.59448 4.18872
-v -8.9189 2.08256 1.64716
-v -8.5524 2.53598 -0.894892
-v -7.59164 3.88572 -3.05044
-v -6.18289 5.92629 -4.49133
-v -4.94011 5.5094 7.81156
-v -5.07851 2.96254 6.39822
-v -5.15153 1.24705 4.26107
-v -5.14804 0.624109 1.72548
-v -5.06858 1.18855 -0.82254
-v -4.92524 2.85444 -2.99507
-v -4.73985 5.36817 -4.46136
-v -7.0706 8.92177 7.73752
-v -9.01515 9.26777 6.26142
-v -10.295 9.48523 4.08234
-v -10.7153 9.54105 1.53202
-v -10.212 9.42673 -1.00127
-v -8.86188 9.15967 -3.13186
-v -6.87034 8.78053 -4.53539
-v 3.06689 7.44818 8.1781
-v 4.41256 5.15163 7.73953
-v 5.52882 6.07891 7.74708
-v 5.56925 3.1935 6.39422
-v 7.63182 4.9069 6.40816
-v 6.36086 1.87191 4.34698
-v 9.05574 4.11057 4.36519
-v 6.66688 1.38805 1.90947
-v 9.5838 3.81116 1.92918
-v 6.44072 1.81559 -0.547205
-v 9.1356 4.05425 -0.528994
-v 5.71681 3.08944 -2.64905
-v 7.77938 4.80283 -2.63511
-v 4.60536 5.01566 -4.07607
-v 5.72161 5.94294 -4.06852
-v 3.27557 7.30101 -4.61102
-v 5.50737 7.6147 7.72905
-v 7.59219 7.74466 6.37486
-v 9.00396 7.81828 4.32167
-v 9.52775 7.82435 1.88209
-v 9.08382 7.76196 -0.572506
-v 7.73975 7.64059 -2.66841
-v 5.70017 7.47873 -4.08655
-v 4.24481 2.57376 6.37974
-v 4.6304 1.06218 4.32806
-v 4.79385 0.511608 1.889
-v 4.71026 1.00586 -0.566123
-v 4.39237 2.4697 -2.66353
-v 1.56309 2.21691 -2.70678
-v 2.35738 4.54345 -4.10731
-v 5.3624 8.37733 7.71791
-v 7.32433 9.15382 6.35427
-v 8.65399 9.65944 4.29478
-v 9.14894 9.81721 1.85297
-v 8.73385 9.60312 -0.599405
-v 7.47189 9.04975 -2.689
-v 5.5552 8.24136 -4.09769
-v 5.02716 9.09409 7.70419
-v 6.70488 10.4782 6.32892
-v 7.84464 11.3899 4.26166
-v 8.27291 11.6902 1.81712
-v 7.9245 11.3335 -0.632524
-v 6.85244 10.3742 -2.71435
-v 5.21996 8.95812 -4.11141
-v 3.98509 10.2057 7.67439
-v 4.77938 12.5323 6.27386
-v 5.32885 14.0736 4.18972
-v 5.4087 14.0173 -0.704459
-v 4.92694 12.4282 -2.7694
-v 4.17788 10.0698 -4.1412
-v 1.43857 11.2904 7.99724
-v 1.22297 8.23418 8.54689
-v 1.63826 13.8694 6.49567
-v 1.79161 15.5785 4.27079
-v 1.87656 15.5186 -0.935478
-v 1.79523 13.7587 -3.12426
-v 1.64367 11.1457 -4.57181
-v 1.44496 8.07762 -5.05775
-v 1.22935 5.02143 -4.5081
-v 0.109369 11.5173 8.08861
-v 0.260966 8.39879 8.6545
-v -0.044623 16.484 1.62624
-v 0.318235 11.37 -4.71169
-v 0.48704 8.23935 -5.20045
-v 0.717506 0.806139 4.47118
-v 0.749946 2.4892 -3.10016
-v -1.13035 11.5006 8.13536
-v -1.74668 8.37122 8.69435
-v -3.79653 8.23863 8.48928
-v -0.590454 14.1412 6.59582
-v -0.209199 15.8912 4.31012
-v -0.121782 15.8295 -1.04724
-v -0.428928 14.0273 -3.30329
-v -0.919302 11.3517 -4.79846
-v -1.51825 8.21012 -5.30511
-v -3.57375 8.08151 -5.16403
-v -3.14315 0.751817 4.43647
-v -2.67448 2.44013 -3.20659
-v -3.40434 5.00201 -4.60597
-v -2.13458 5.08079 -4.74612
-v 3.10607 0.36081 1.86319
-v 2.01025 0.665233 3.46159
-v 0.728609 0.709777 4.08052
-v -1.27911 0.713773 4.19302
-v -2.4527 0.646962 3.97884
-v -3.16426 0.572725 3.70493
-v -4.45952 0.631882 2.51377
-v -4.85509 0.544053 1.73118
-v -4.94168 0.630623 1.46448
-v -4.99502 1.0372 -0.246242
-v -4.73528 1.10603 -0.838825
-v -3.67731 1.85411 -2.13205
-v -2.77592 1.97451 -2.59843
-v -2.0077 2.11522 -2.7512
-v -0.284175 2.16168 -2.72592
-v 0.760976 2.13345 -2.63729
-v 1.39634 1.8936 -2.29471
-v 2.51344 1.25355 -1.24982
-v 2.90047 0.885059 -0.688787
-v 3.1935 0.488349 1.32496
-v 3.83935 -0.805325 4.58296
-v 2.00029 -0.824144 5.45809
-v -0.869574 -0.948624 5.60322
-v -3.55014 -1.2731 4.8905
-v -5.39527 -1.27405 3.1765
-v -1.94658 0.998399 -4.33709
-v 2.00733 1.2043 -4.15243
-v 2.92803 0.903234 -3.65708
-v 9.82595 -8.19113 2.72638
-v 7.64818 -6.93235 6.48913
-v 4.84526 -6.13281 8.005
-v 0.361171 -5.01059 8.4029
-v -3.96892 -4.26932 7.40681
-v -6.91388 -3.39355 4.74932
-v -0.949578 -1.32975 -7.55666
-v 10.0569 -7.94343 1.47952
-v 10.2071 -10.3571 2.79878
-v 7.61595 -9.21649 6.92362
-v 4.42178 -8.65619 8.55787
-v -0.641765 -7.93569 8.93227
-v -5.47279 -7.61868 7.76927
-v -8.7732 -6.99782 4.78869
-v -9.83652 -7.07128 2.81003
-v -4.26344 -4.15053 -8.31429
-v -2.2802 -4.06586 -8.73671
-v 6.25629 -5.83678 -7.72208
-v 10.4502 -10.0603 1.42311
-v 10.1841 -12.4521 2.59144
-v 7.40739 -11.5505 6.73944
-v -1.07517 -11.069 8.67438
-v -5.96691 -11.227 7.4371
-v -9.32223 -10.9302 4.37455
-v -10.364 -11.112 2.35613
-v -10.5818 -10.8783 1.66786
-v -10.6979 -9.81779 -2.75388
-v -10.0272 -9.66673 -4.28938
-v -7.22975 -7.84599 -7.64571
-v -4.89419 -7.63186 -8.8633
-v -2.89632 -7.35156 -9.26823
-v 4.25954 -7.60605 -9.0104
-v 5.87931 -8.29567 -8.13353
-v 8.70924 -10.0734 -5.44796
-v 9.67635 -11.0689 -4.00322
-v 10.4167 -12.1307 1.19887
-v 10.0895 -14.4941 2.32402
-v -1.11324 -13.1148 8.37714
-v -9.31946 -12.9744 4.09894
-v -10.3562 -13.155 2.09057
-v -10.5728 -12.9224 1.40573
-v -10.6882 -11.8671 -2.99404
-v -10.0209 -11.717 -4.52194
-v -7.23691 -9.90601 -7.8617
-v -4.91294 -9.69358 -9.07332
-v -2.92492 -9.41523 -9.4763
-v 4.19535 -9.67042 -9.22
-v 10.321 -14.1744 0.938357
-v -10.6247 -13.9039 -3.19465
-v -9.97391 -13.7246 -4.67838
-v -7.33994 -11.822 -7.91513
-v -5.08362 -11.4958 -9.08055
-v -3.16253 -11.1221 -9.46079
-v 9.8982 -15.0515 0.769409
-v -10.0904 -14.7445 -3.20405
-v -9.4711 -14.576 -4.61638
-v -6.95922 -12.7741 -7.69776
-v -4.81125 -12.4712 -8.80781
-v -2.98184 -12.1221 -9.17046
-v -1.27805 -16.1844 6.71326
-v -9.54759 -15.5747 -3.18775
-v -8.96903 -15.4142 -4.50675
-v -6.62996 -13.7181 -7.38393
-v -4.62428 -13.424 -8.41959
-v -2.91689 -13.0884 -8.75724
-v -8.06873 -16.9821 -3.17874
-v -7.54861 -16.8065 -4.36302
-v -5.52178 -15.1527 -6.94087
-v -3.72828 -14.7762 -7.86041
-v -2.21008 -14.3786 -8.15337
-v -4.82157 -15.6691 -6.5723
-v -3.16841 -15.3106 -7.41945
-v -1.76986 -14.9342 -7.68865
-v -3.33284 -15.8714 -6.5609
-v -2.14617 -15.592 -6.79205
-v -7.06631 -17.0586 -4.24813
-v -5.82705 -16.7092 -5.12276
-v -4.75525 -16.185 -6.0021
-v -3.86775 -16.2455 -6.07221
-v -3.32466 -15.9573 -6.44984
-v -3.09409 -15.9621 -6.44236
-v -2.14977 -15.7519 -6.65138
-v -1.64671 -15.868 -6.56379
-v -0.105109 -15.9518 -6.4224
-v -2.2743 -17.7076 4.65422
-v -7.81608 -17.6062 -1.26796
-v -8.37523 -16.8563 -2.61072
-v -8.06944 -17.0008 -3.01084
-v -8.05699 -16.991 -3.16328
-v -8.05326 -16.9898 -3.17889
-v -7.3571 -17.0759 -3.95333
-v 2.41752 -18.5301 -1.49186
-v -6.96729 -17.2164 -3.80403
-v -4.66643 -17.2302 -4.72548
-v -1.06655 -18.8826 -0.00741184
-v -3.13164 -16.658 -5.68162
-v 1.96389 -18.0074 -3.31457
-v 0.221782 -18.5558 -2.03776
-v -2.81702 -18.6062 -2.32675
-v -0.481172 -16.3361 -6.11221
-v -1.55786 -18.2 3.58568
-v 0.272667 -17.8234 -4.01958
-v -3.08719 -17.9962 -3.91307
-v -1.55511 -18.6849 -1.77704
-v -2.40318 -18.8407 -1.07766
-v -2.801 -18.9854 -0.110608
-v -1.38095 -17.1394 -5.1761
-v -1.44724 -18.3031 -3.20154
-v 2.63897 6.1351 7.95529
-v 2.2415 6.52603 8.13076
-v 1.16574 7.35057 8.40694
-v 0.478433 7.47777 8.4854
-v -1.00641 7.51494 8.52513
-v -1.94848 7.31274 8.52364
-v -3.10822 6.81115 8.34621
-v -3.67003 6.14021 8.16263
-v -3.89517 5.22479 7.96594
-v -3.9036 4.7106 7.68634
-v -3.63053 3.16202 6.85597
-v -3.3914 2.65522 6.61963
-v -3.17161 2.36461 6.34011
-v -2.91497 2.09072 6.11252
-v -1.47501 1.49186 5.34954
-v -0.648239 1.47793 5.32492
-v 0.666655 1.52282 5.35938
-v 1.08281 1.59893 5.44738
-v 2.24838 1.99487 5.81618
-v 2.76341 2.44141 6.35709
-v 3.22414 3.60691 7.03159
-v 3.14859 4.88612 7.72196
-v 3.01294 5.69633 7.86877
-v 2.2052 6.28678 8.45224
-v 1.13716 7.11992 8.69955
-v -1.02469 7.29639 8.80526
-v -1.96335 7.09926 8.80657
-v -3.11946 6.60007 8.6408
-v -3.68112 5.92959 8.47579
-v -3.90868 5.01401 8.30595
-v -3.65094 2.92811 7.26233
-v -3.41443 2.41592 7.04268
-v -2.94109 1.83742 6.55607
-v -1.50798 1.21309 5.81901
-v 0.623994 1.23484 5.83492
-v 2.19915 1.71092 6.2809
-v 2.71211 2.16871 6.80783
-v 3.17381 3.34599 7.4466
-v 3.10213 4.63922 8.09611
-v 2.97024 5.45025 8.21819
-v 0.937956 5.77072 9.80431
-v 0.296637 6.35098 9.68917
-v -1.06291 6.55265 9.6228
-v -1.6649 6.47094 9.63976
-v -2.41474 6.17872 9.63116
-v -2.79699 5.76825 9.69004
-v -2.9794 5.20426 9.82267
-v -2.89133 3.72071 9.77564
-v -2.76104 3.36026 9.7917
-v -2.47878 2.88352 9.68015
-v -1.5873 2.28244 9.47233
-v -0.239985 2.22783 9.55589
-v 0.767781 2.56641 9.74771
-v 1.10213 2.95129 9.95104
-v 1.43493 3.78138 10.0291
-v 1.43594 4.69886 10.0629
-v 1.38746 5.20214 9.91659
-v 0.220628 5.43151 10.4831
-v -0.211049 5.8154 10.4491
-v -1.11504 5.93895 10.4276
-v -1.51334 5.87778 10.4375
-v -2.00788 5.67783 10.4178
-v -2.25702 5.39919 10.4325
-v -2.37161 5.0165 10.4846
-v -2.29948 4.04132 10.3566
-v -2.01868 3.49919 10.2363
-v -1.42339 3.12507 10.0541
-v -0.528769 3.09735 10.0967
-v 0.137774 3.31864 10.2386
-v 0.357399 3.56286 10.3956
-v 0.570804 4.10905 10.4988
-v 0.563019 4.71239 10.5808
-v 0.524973 5.05355 10.5173
-v -0.926686 3.93024 10.6759
-v 6.55398 13.5239 1.76797
-v 5.46971 14.2671 0.351879
-v 3.79463 14.9153 -0.000997424
-v 3.22951 15.1785 0.0496842
-v 1.87585 15.8786 0.527197
-v 1.45341 16.0884 1.08913
-v 1.37622 16.2425 1.6522
-v 1.41464 16.0988 2.24668
-v 1.82405 15.803 3.25928
-v 2.68577 15.3446 3.66849
-v 4.66328 14.4889 3.68011
-v 5.3746 14.1816 3.68242
-v 6.63791 13.1611 2.65707
-v 7.30438 13.9627 1.79605
-v 6.27645 14.7225 0.267931
-v 4.25863 15.7361 -0.209935
-v 3.63369 16.0727 -0.15054
-v 2.14165 16.9568 0.397597
-v 1.67574 17.221 1.03887
-v 1.59866 17.399 1.68087
-v 1.63318 17.2304 2.35726
-v 2.07967 16.8625 3.5088
-v 3.02914 16.282 3.97204
-v 6.00867 14.7807 3.98031
-v 7.37626 13.5408 2.80698
-v 7.62385 18.1897 1.89923
-v 6.54958 18.2986 0.56169
-v 4.60843 18.2157 0.124363
-v 3.99531 18.2125 0.167129
-v 2.49325 18.276 0.617373
-v 2.02344 18.2988 1.16372
-v 1.88356 18.4178 1.71247
-v 1.97139 18.322 2.30047
-v 2.44782 18.2585 3.30317
-v 3.40124 18.2254 3.71745
-v 6.27794 18.3265 3.76197
-v 7.84098 17.9263 2.78283
-v 6.90047 19.0397 1.90062
-v 6.04837 19.1606 0.836163
-v 4.50109 19.1527 0.488545
-v 4.01311 19.1682 0.522843
-v 2.81984 19.2621 0.882106
-v 2.44685 19.2932 1.3174
-v 2.33922 19.3909 1.75466
-v 2.40649 19.311 2.22267
-v 2.78407 19.2445 3.02081
-v 3.54193 19.1892 3.35026
-v 5.8341 19.1847 3.38473
-v 7.06579 18.822 2.60364
-v 6.21395 19.8874 1.91849
-v 5.65797 19.9193 1.22765
-v 4.65864 19.8353 1.00156
-v 4.34246 19.8208 1.02349
-v 3.56627 19.8228 1.25547
-v 3.32331 19.8255 1.53735
-v 3.29565 19.8379 2.1241
-v 3.54242 19.8164 2.64189
-v 4.03474 19.8199 2.85601
-v 5.51635 19.9323 2.87953
-v 6.3312 19.7573 2.37501
-v 4.18157 20.3118 1.88735
-v -2.58306 16.091 2.65485
-v -2.94553 16.2995 1.58103
-v -3.49391 16.1588 1.13726
-v -4.14889 16.0292 0.77394
-v -5.27386 15.6877 0.522317
-v -5.9751 15.4942 0.443762
-v -7.15823 14.6199 1.386
-v -7.17212 14.6482 1.53106
-v -7.00148 14.4255 3.20758
-v -6.80753 14.5827 3.34219
-v -5.98386 15.2974 3.709
-v -4.49802 15.6716 3.72825
-v -4.21436 15.7655 3.62701
-v -2.59426 16.0212 2.96948
-v -2.34862 16.9783 2.66933
-v -2.82784 17.1819 1.40039
-v -4.22087 16.6875 0.455503
-v -6.29961 15.7788 0.0843872
-v -7.54425 14.5528 1.21206
-v -7.56239 14.5823 1.38533
-v -7.32352 14.3118 3.30397
-v -6.22077 15.5043 3.96742
-v -4.52457 16.1748 3.97168
-v -2.34542 16.8903 3.0429
-v -3.01288 18.8235 2.54077
-v -3.50457 19.0292 1.24491
-v -4.9252 18.516 0.280331
-v -7.04332 17.5749 -0.0978523
-v -8.30637 16.3142 1.05432
-v -8.07792 16.0681 3.19106
-v -6.95838 17.2929 3.86872
-v -5.22981 17.9884 3.87227
-v -3.0088 18.7334 2.92234
-v -3.41289 19.7473 2.38718
-v -3.79589 19.9859 1.21049
-v -5.11829 19.7359 0.323344
-v -7.13414 19.2235 -0.0441719
-v -8.46645 18.3191 0.98391
-v -8.33636 18.0982 2.91231
-v -7.16604 19.0207 3.52728
-v -5.52726 19.37 3.55378
-v -3.42932 19.6727 2.73144
-v -4.10458 20.8934 1.19076
-v -5.24744 20.6272 0.424129
-v -6.98002 20.1039 0.111395
-v -8.09716 19.2622 1.00788
-v -7.96684 19.069 2.6834
-v -6.98379 19.9143 3.21642
-v -5.57386 20.2822 3.23366
-v -3.76702 20.6306 2.51063
-v -5.99411 20.8336 1.53989
-v -6.56552 20.6337 1.15261
-v -7.41877 20.2657 1.00029
-v -7.93136 19.7663 1.46214
-v -7.84192 19.6675 2.31912
-v -7.38792 20.1538 2.59092
-v -6.69177 20.425 2.59293
-v -5.79748 20.7134 2.21285
-v -7.75956 20.2563 1.94475
-v 4.48925 -0.397565 1.67891
-v 4.57894 -0.882098 3.27228
-v 5.27839 -2.27325 4.02403
-v 6.62658 -4.02433 4.06797
-v 7.87742 -5.27254 2.85548
-v 8.22375 -5.4852 2.27964
-v 8.57684 -5.65355 1.49826
-v 6.9201 -0.0256538 0.20717
-v 6.15406 0.402319 1.66312
-v 6.16107 -0.154891 3.60397
-v 6.7973 -1.69642 4.38487
-v 7.77466 -3.3153 4.5424
-v 8.07509 -3.67347 4.39685
-v 9.26668 -5.10215 3.07468
-v 9.94617 -5.56135 1.61311
-v 9.41036 -0.307409 -2.05757
-v 8.79848 0.353463 -1.14807
-v 7.21724 0.790581 1.26676
-v 7.07029 0.716171 1.68495
-v 10.2365 0.0688409 -2.1062
-v 9.50096 0.683983 -1.18244
-v 7.74608 0.96038 1.28048
-v 7.59074 0.867861 1.71164
-v 9.90186 0.897039 -0.833129
-v 8.25287 1.11061 1.43852
-v 8.10856 1.02133 1.83734
-v 8.29903 0.251361 4.66989
-v -6.36897 -2.08303 3.09681
-v -5.69707 -1.35701 2.56433
-v -5.57289 -0.658732 1.83414
-v -10.1489 -6.09284 -2.26788
-v -10.0235 -6.57983 -0.0838391
-v -9.95684 -6.46862 0.504061
-v -9.46798 -6.09282 2.09362
-v -9.10984 -5.67683 2.87062
-v -8.26308 -4.87005 3.72731
-v -7.45137 -3.37247 3.78015
-v -7.16428 -3.06783 3.67282
-v -6.67091 -0.662902 2.58258
-v -6.50936 -0.0829995 1.98202
-v -11.2538 -4.85307 -2.10646
-v -11.2033 -5.36352 0.0954123
-v -10.6177 -4.93125 2.17868
-v -10.2386 -4.55644 2.91991
-v -9.36367 -3.84182 3.73211
-v -8.48087 -2.46548 3.77105
-v -8.92779 -0.335116 2.33319
-v -8.76011 0.146913 1.81859
-v -8.78474 0.770169 -0.221074
-v -10.1688 -0.658255 -2.58451
-v -11.7086 -2.32491 -2.56433
-v -12.2362 -2.83833 -2.38518
-v -13.1129 -3.63074 -1.61759
-v -13.0839 -4.06319 0.260004
-v -12.5438 -3.72669 2.02999
-v -12.1932 -3.42937 2.65788
-v -11.3999 -2.87291 3.34162
-v -10.5661 -1.75596 3.36453
-v -10.9723 0.631453 2.3975
-v -10.8013 1.1406 1.83161
-v -10.8212 1.66155 0.00288689
-v -10.7461 1.33495 -1.13531
-v -11.6032 0.799209 -1.95499
-v -12.1555 0.351906 -2.20646
-v -13.6342 -1.17553 -2.18182
-v -14.1392 -1.64476 -2.01205
-v -14.9757 -2.36719 -1.28973
-v -14.9527 -2.77136 0.469803
-v -14.4345 -2.46653 2.12641
-v -14.0978 -2.19519 2.71349
-v -13.3407 -1.69077 3.35144
-v -12.5351 -0.662741 3.36961
-v -12.6167 2.19046 2.46841
-v -12.4681 2.59725 2.03055
-v -12.4837 3.12599 0.297094
-v -12.413 2.83047 -0.735134
-v -13.1867 2.34002 -1.47922
-v -13.6849 1.93135 -1.70776
-v -15.0174 0.537896 -1.68679
-v -15.4728 0.109514 -1.53329
-v -16.2279 -0.550468 -0.87897
-v -16.206 -0.917258 0.716651
-v -15.739 -0.638289 2.21944
-v -15.4356 -0.390463 2.75215
-v -14.7522 0.0710721 3.33135
-v -14.0274 1.00785 3.34862
-v -13.4888 3.11345 2.33796
-v -13.3071 3.42523 1.96002
-v -13.2698 3.86014 0.48542
-v -13.2826 3.59795 -0.389068
-v -14.0239 3.31552 -1.00019
-v -14.5113 3.0575 -1.18034
-v -15.8511 2.12023 -1.12333
-v -17.0215 1.41992 -0.404004
-v -17.0296 1.11811 0.952161
-v -16.562 1.27901 2.21493
-v -15.599 1.70969 3.13181
-v -14.8399 2.36841 3.12359
-v -13.9133 3.73789 2.07651
-v -13.7092 3.90976 1.77293
-v -13.6158 4.20632 0.624829
-v -13.7316 4.01734 -0.0456754
-v -14.3675 4.01993 -0.487899
-v -14.7976 3.97045 -0.606147
-v -15.0572 3.90165 -0.62649
-v -16.0229 3.67253 -0.500558
-v -16.4176 3.59725 -0.369986
-v -17.0348 3.50046 0.106818
-v -17.0743 3.29107 1.1601
-v -16.6449 3.28072 2.11708
-v -16.3642 3.31053 2.44668
-v -15.7964 3.32386 2.78544
-v -15.0653 3.58473 2.74197
-v -14.248 4.23078 1.80164
-v -14.0916 4.33262 1.58225
-v -14.012 4.53037 0.761832
-v -14.1192 4.40557 0.286213
-v -14.5735 4.4646 -0.0216396
-v -14.8833 4.46884 -0.100772
-v -15.7752 4.37124 -0.0102543
-v -16.0595 4.35469 0.0876166
-v -16.4988 4.34437 0.434824
-v -16.5335 4.203 1.18668
-v -16.2197 4.15892 1.86371
-v -15.6082 4.11329 2.33008
-v -15.0682 4.23032 2.28962
-v -15.9916 5.14779 1.11682
-v 10.6535 -0.287442 -2.38225
-v 10.5153 0.415482 -1.57533
-v 10.3469 0.894247 -0.640308
-v 10.1346 1.01274 0.475619
-v 9.88308 1.10515 1.7915
-v 9.69893 0.844946 2.71238
-v 9.33596 0.337692 4.52825
-v 9.08499 -1.17756 5.63304
-v 9.03461 -2.56465 5.73982
-v 9.51797 -4.31722 5.12965
-v 9.9375 -5.15482 3.94526
-v 10.1474 -5.47249 3.25563
-v 10.489 -5.76828 1.92136
-v 10.557 -5.79106 1.62117
-v 10.639 -5.68674 1.13277
-v 11.9973 -0.268931 -2.16815
-v 11.8638 0.457681 -1.33087
-v 11.6963 0.952322 -0.361661
-v 11.2215 1.16887 2.15601
-v 10.6491 0.373136 4.98643
-v 10.3723 -1.19507 6.12547
-v 10.3036 -2.6301 6.23188
-v 10.782 -4.4476 5.59469
-v 11.4173 -5.64501 3.65125
-v 11.8355 -5.9747 1.95844
-v 12.2301 -5.30485 -0.523642
-v 12.2942 -4.5346 -1.52329
-v 12.1835 -2.25059 -3.05643
-v 12.0874 -1.80598 -2.93556
-v 13.9572 -1.05232 -1.97531
-v 13.8364 -0.2831 -1.08139
-v 13.6739 0.239951 -0.0488139
-v 13.1815 0.465805 2.62666
-v 12.5597 -0.382192 5.62789
-v 12.2275 -2.04677 6.82773
-v 12.1173 -3.56872 6.93161
-v 12.5759 -5.50606 6.24222
-v 13.2144 -6.78088 4.16964
-v 13.6457 -7.13071 2.36929
-v 14.0763 -6.41394 -0.262485
-v 14.1621 -5.5916 -1.31896
-v 14.1008 -3.15462 -2.93161
-v 15.2963 -2.37617 -1.27917
-v 15.2619 -1.71736 -0.483102
-v 15.1714 -1.27162 0.429207
-v 14.7808 -1.0909 2.77069
-v 14.1901 -1.83818 5.37543
-v 13.7703 -3.28035 6.3905
-v 13.5478 -4.59416 6.45105
-v 13.7791 -6.29929 5.80659
-v 14.2127 -7.41529 3.96813
-v 14.5458 -7.71697 2.38764
-v 14.9621 -7.07538 0.103984
-v 15.0984 -6.34659 -0.801108
-v 15.2385 -4.1925 -2.15696
-v 16.2406 -3.8503 -0.47505
-v 16.3083 -3.36177 0.172286
-v 16.3055 -3.035 0.90512
-v 16.0481 -2.92233 2.75786
-v 15.5154 -3.51171 4.79124
-v 15.0088 -4.60883 5.55006
-v 14.6633 -5.60024 5.55943
-v 14.6115 -6.93099 4.9953
-v 14.7835 -7.7914 3.50789
-v 14.9873 -8.0159 2.25058
-v 15.3736 -7.49633 0.468936
-v 15.5672 -6.91874 -0.221758
-v 15.9477 -5.22139 -1.22188
-v 16.7955 -5.47703 0.304608
-v 16.9407 -5.19506 0.774473
-v 17.0089 -5.01218 1.29822
-v 16.878 -4.97963 2.59659
-v 16.4311 -5.37348 3.99579
-v 15.8915 -6.04891 4.48626
-v 15.4717 -6.64709 4.4569
-v 15.178 -7.49938 4.00698
-v 15.1136 -8.03382 2.93119
-v 15.1939 -8.1604 2.04281
-v 15.5321 -7.79802 0.818895
-v 15.764 -7.41426 0.360111
-v 16.3306 -6.30174 -0.268282
-v 16.8373 -6.37432 0.678351
-v 16.9739 -6.18606 1.03742
-v 17.0446 -6.06653 1.43575
-v 16.9581 -6.05941 2.41707
-v 16.5981 -6.34649 3.46837
-v 16.1379 -6.8164 3.82907
-v 15.7707 -7.2274 3.79816
-v 15.4731 -7.83051 3.44345
-v 15.3708 -8.20161 2.62121
-v 15.4139 -8.28384 1.94764
-v 15.6909 -8.01474 1.02891
-v 15.8952 -7.73726 0.688791
-v 16.4129 -6.93913 0.233048
-v 17.0743 -7.10653 2.04129
-v 7.34296 -13.1902 6.50867
-v 5.91079 -12.3487 7.32778
-v 4.08845 -11.9719 8.25934
-v 2.32839 -12.5529 8.27078
-v 1.85444 -13.2464 8.19529
-v 1.13496 -14.2265 7.77354
-v 0.856109 -15.8474 6.89498
-v 8.70611 -15.016 6.87116
-v 8.22512 -14.5234 7.9584
-v 6.69016 -13.6781 9.10954
-v 4.72019 -13.3159 10.247
-v 2.62295 -13.7927 10.1508
-v 2.01817 -14.4835 9.88869
-v 1.11002 -15.3695 9.17281
-v 0.636617 -16.8784 7.77461
-v 0.75201 -17.4806 6.43341
-v 9.11638 -18.3209 6.87457
-v 9.50146 -17.5945 6.97487
-v 9.43912 -15.9139 8.305
-v 8.85565 -15.1436 9.24869
-v 7.13062 -14.1264 10.1607
-v 5.00841 -13.6458 11.2142
-v 2.87891 -14.3975 11.2923
-v 2.33444 -15.2377 11.2513
-v 1.50657 -16.4485 10.8196
-v 1.21992 -18.4396 9.89118
-v 1.44059 -19.4406 8.73144
-v 2.00535 -20.2057 7.86012
-v 2.92835 -20.7018 6.553
-v 3.51329 -20.8754 5.80802
-v 4.90867 -20.7855 5.08494
-v 5.32743 -20.7163 5.03796
-v 5.72898 -20.6413 5.0824
-v 7.11086 -20.173 5.5667
-v 7.50689 -19.9746 5.80125
-v 8.86898 -18.7036 6.51928
-v 9.19698 -18.532 7.76905
-v 9.55847 -17.8557 7.8679
-v 9.50503 -16.2963 9.12182
-v 8.96256 -15.5825 10.0084
-v 7.35507 -14.6348 10.8674
-v 5.37533 -14.188 11.8547
-v 3.38531 -14.8844 11.9224
-v 2.87472 -15.667 11.878
-v 2.09849 -16.7918 11.4663
-v 1.82533 -18.643 10.5852
-v 2.02847 -19.5696 9.49529
-v 2.55349 -20.2791 8.67627
-v 3.41366 -20.7352 7.45234
-v 3.95916 -20.8934 6.75555
-v 5.26197 -20.8081 6.08103
-v 5.65308 -20.7443 6.03762
-v 6.02815 -20.6758 6.0796
-v 7.31953 -20.2459 6.53493
-v 7.6898 -20.0635 6.75527
-v 8.96493 -18.8859 7.43463
-v 9.81741 -18.6588 8.66122
-v 10.2449 -17.9746 8.86704
-v 10.2752 -16.5025 10.441
-v 9.73164 -15.8465 11.4981
-v 8.05644 -14.8763 12.5682
-v 5.95192 -14.4375 13.7013
-v 3.77198 -15.075 13.6806
-v 3.17795 -15.872 13.5177
-v 2.2792 -16.9622 12.9129
-v 1.88027 -18.7829 11.6941
-v 2.04709 -19.6151 10.3901
-v 2.57207 -20.2757 9.40587
-v 3.47268 -20.6244 8.02631
-v 4.05126 -20.718 7.25598
-v 5.45809 -20.5993 6.54148
-v 5.88236 -20.5472 6.50237
-v 6.28953 -20.5021 6.5551
-v 7.70204 -20.1878 7.09742
-v 8.11031 -20.0483 7.35761
-v 8.25899 -19.9517 7.48511
-v 9.54807 -18.9713 8.25246
-v 9.58057 -18.9569 9.05401
-v 9.96952 -18.3458 9.24909
-v 10.0051 -17.042 10.6882
-v 9.51895 -16.463 11.6502
-v 8.01482 -15.5952 12.6287
-v 6.12098 -15.2046 13.6564
-v 4.15315 -15.7669 13.6292
-v 3.61354 -16.4795 13.4713
-v 2.79767 -17.4484 12.9111
-v 2.42815 -19.0693 11.7871
-v 2.57375 -19.8014 10.6003
-v 3.04308 -20.3854 9.70385
-v 3.8525 -20.6848 8.45562
-v 4.37322 -20.7613 7.76005
-v 5.64145 -20.6517 7.11759
-v 6.02405 -20.6065 7.08297
-v 6.3912 -20.5688 7.13102
-v 7.66584 -20.3009 7.62376
-v 8.03454 -20.1812 7.86008
-v 8.16906 -20.0967 7.97629
-v 9.3361 -19.2313 8.68132
-v 9.16118 -17.9974 10.2502
-v 9.19505 -17.117 11.2743
-v 8.86106 -16.7285 11.9538
-v 7.82098 -16.1324 12.6503
-v 6.50661 -15.8664 13.3726
-v 5.13411 -16.2436 13.3443
-v 4.75392 -16.7325 13.2219
-v 4.17977 -17.3906 12.8153
-v 3.91152 -18.4949 12.0047
-v 4.00758 -18.9836 11.1663
-v 4.32987 -19.3768 10.5323
-v 4.89056 -19.568 9.65874
-v 5.25209 -19.6122 9.17352
-v 6.65683 -19.4807 8.73884
-v 7.89676 -19.1798 9.3344
-v 8.71449 -18.5986 9.83974
-v 6.64402 -18.7074 10.7009
-v -2.7598 -13.1675 7.96074
-v -3.4691 -12.1985 7.92087
-v -4.87975 -11.4074 7.68177
-v -5.80737 -11.289 7.468
-v -5.96726 -11.2781 7.42983
-v -6.64102 -11.1674 6.82182
-v -7.93342 -11.9029 5.52652
-v -8.47724 -13.0491 4.86764
-v -2.717 -16.3949 6.24832
-v -2.54372 -15.4002 6.82977
-v -2.29336 -14.0157 7.62177
-v -3.04888 -13.4592 9.21565
-v -3.76748 -12.4633 9.14836
-v -5.20626 -11.6499 8.8856
-v -6.31952 -11.5165 8.6285
-v -7.00931 -11.416 8.0074
-v -8.32452 -12.1629 6.73106
-v -8.91404 -13.3864 6.07149
-v -8.93624 -14.1109 5.64083
-v -3.03806 -16.8136 7.56161
-v -2.57962 -14.341 8.89267
-v -3.24346 -13.5306 10.835
-v -3.92455 -12.4866 10.4164
-v -5.40134 -11.6197 9.89744
-v -6.59156 -11.4632 9.63007
-v -7.36053 -11.5208 8.99618
-v -8.91596 -12.6001 8.05111
-v -9.69769 -14.0017 7.87677
-v -9.81594 -14.8817 7.72171
-v -10.0166 -16.5107 8.01671
-v -9.40699 -18.1108 7.8723
-v -8.24748 -19.5917 7.7336
-v -7.31257 -20.2074 7.80809
-v -5.98394 -20.4492 8.17118
-v -5.17774 -19.6177 9.30431
-v -3.64583 -17.4907 10.4527
-v -2.84537 -14.5801 10.8295
-v -3.54228 -13.4549 11.8096
-v -4.21392 -12.4257 11.4018
-v -5.66877 -11.5715 10.894
-v -6.84075 -11.4176 10.6306
-v -7.59743 -11.4723 10.0057
-v -9.12705 -12.5324 9.06897
-v -9.89496 -13.9126 8.89019
-v -10.0102 -14.7786 8.73328
-v -10.206 -16.3842 9.01595
-v -9.60367 -17.9583 8.86665
-v -8.46004 -19.4144 8.72389
-v -7.53877 -20.0199 8.79497
-v -6.23046 -20.2581 9.15224
-v -5.43841 -19.4437 10.2724
-v -3.93337 -17.3529 11.4142
-v -3.149 -14.4877 11.7995
-v -3.59656 -13.035 13.5552
-v -4.36284 -11.8849 13.2427
-v -5.97709 -10.9383 12.7791
-v -7.25975 -10.7756 12.4887
-v -8.07597 -10.774 11.7843
-v -9.68946 -11.8445 10.5858
-v -10.4734 -13.3432 10.1801
-v -10.5637 -14.2642 9.88523
-v -10.7218 -16.0524 9.96129
-v -10.0006 -17.717 9.59114
-v -8.69218 -19.2354 9.25694
-v -7.66306 -19.8694 9.26955
-v -6.2298 -20.132 9.65313
-v -5.41467 -19.3793 11.0011
-v -3.86887 -17.2202 12.5683
-v -3.12706 -14.1397 13.4076
-v -4.13339 -13.6667 13.8504
-v -4.83369 -12.6222 13.5908
-v -6.30076 -11.7635 13.187
-v -7.46319 -11.617 12.9233
-v -8.19881 -11.6037 12.284
-v -9.65267 -12.5564 11.167
-v -10.3529 -13.9095 10.7627
-v -10.4283 -14.7377 10.4743
-v -10.5611 -16.3604 10.502
-v -9.89648 -17.8558 10.1312
-v -8.70062 -19.216 9.79826
-v -7.76426 -19.7847 9.79869
-v -6.46503 -20.0229 10.145
-v -5.7351 -19.3669 11.386
-v -4.35209 -17.4374 12.8602
-v -3.70086 -14.6614 13.6931
-v -4.91278 -14.1321 14.0506
-v -5.49384 -13.2785 13.8794
-v -6.69692 -12.5784 13.578
-v -7.64451 -12.4606 13.3622
-v -8.24201 -12.4309 12.8364
-v -9.40828 -13.1741 11.8783
-v -9.96142 -14.2658 11.487
-v -10.0119 -14.9285 11.2164
-v -10.102 -16.2519 11.1689
-v -9.54123 -17.446 10.8074
-v -8.54925 -18.5259 10.486
-v -7.77963 -18.9785 10.468
-v -6.72001 -19.173 10.7481
-v -6.13968 -18.6841 11.791
-v -5.04276 -17.1614 13.0822
-v -4.5481 -14.9304 13.8829
-v -5.7059 -14.6758 13.6914
-v -6.12426 -14.0593 13.5622
-v -6.99242 -13.5534 13.3406
-v -7.677 -13.4681 13.1848
-v -8.10808 -13.449 12.8062
-v -8.95412 -13.9909 12.1198
-v -9.3562 -14.7814 11.8456
-v -9.39417 -15.262 11.655
-v -9.46181 -16.2182 11.6304
-v -9.05933 -17.0845 11.3773
-v -8.34505 -17.8689 11.1519
-v -7.78992 -18.1974 11.1415
-v -7.02448 -18.3379 11.3441
-v -6.60321 -17.9782 12.0934
-v -5.80653 -16.871 13.014
-v -5.44413 -15.2543 13.5757
-v -7.61104 -14.4841 13.0272
-v -2.36336 -9.27381 -9.43989
-v -0.857446 -7.68471 -9.2209
-v 1.1529 -7.85642 -9.15852
-v 1.54786 -8.2889 -9.18625
-v 2.12935 -9.59637 -9.29436
-v 2.26857 -10.644 -9.23577
-v 2.25022 -11.0267 -9.2308
-v 2.23927 -11.2545 -9.16711
-v 1.9765 -12.0524 -8.96194
-v 1.43696 -12.7215 -8.69051
-v 1.1865 -13.0077 -8.58188
-v -1.97388 -12.1079 -9.12807
-v -2.01864 -11.962 -9.16984
-v -2.27164 -11.1064 -9.42293
-v -2.48343 -10.2983 -9.44414
-v -2.74235 -8.71723 -10.2178
-v -0.968673 -6.83641 -10.1894
-v 1.39184 -7.03215 -10.0625
-v 1.85433 -7.54125 -10.0221
-v 2.5331 -9.08247 -9.93657
-v 2.66783 -10.7388 -9.63833
-v 2.6531 -10.9942 -9.52884
-v 2.33804 -11.8909 -9.16934
-v 1.40048 -12.9422 -8.58887
-v -1.06022 -13.3963 -8.47276
-v -1.73711 -13.0139 -8.75024
-v -2.30162 -11.9707 -9.40827
-v -2.64307 -10.8493 -9.9116
-v -2.888 -9.91082 -10.0649
-v -2.37497 -8.28297 -11.9537
-v -0.879504 -6.8486 -11.2672
-v 1.11645 -7.00475 -11.3198
-v 1.50851 -7.39556 -11.4986
-v 2.08559 -8.5767 -12.0453
-v 2.21133 -9.93494 -12.4593
-v 1.95073 -10.9869 -12.5375
-v 1.18125 -12.0158 -12.4745
-v -0.890045 -12.4433 -12.4849
-v -1.4712 -12.0608 -12.5262
-v -1.97157 -11.0335 -12.6041
-v -2.2784 -10.0029 -12.5427
-v -2.49131 -9.2421 -12.2912
-v -1.8619 -7.7257 -12.5409
-v -0.772848 -6.83707 -11.8227
-v 0.669533 -6.92442 -11.9181
-v 0.950917 -7.16305 -12.1201
-v 1.36183 -7.88691 -12.726
-v 1.44901 -8.76163 -13.2642
-v 1.26168 -9.48531 -13.506
-v 0.70872 -10.2217 -13.6372
-v -0.787859 -10.5319 -13.6907
-v -1.2095 -10.2603 -13.6413
-v -1.57475 -9.53026 -13.5017
-v -1.79785 -8.82194 -13.2669
-v -1.94936 -8.33646 -12.9495
-v -1.47495 -7.43161 -12.9047
-v -0.692286 -6.81428 -12.3671
-v 0.342475 -6.87314 -12.4415
-v 0.544019 -7.03825 -12.5939
-v 0.837798 -7.53959 -13.05
-v 0.899551 -8.15126 -13.4611
-v 0.764982 -8.66332 -13.6548
-v 0.368344 -9.18794 -13.7685
-v -0.705431 -9.40987 -13.812
-v -1.00801 -9.21685 -13.7678
-v -1.27019 -8.6977 -13.6459
-v -1.43012 -8.19674 -13.4568
-v -1.53834 -7.85787 -13.2149
-v -0.358819 -8.16598 -14.0506
-v -2.5032 -18.3093 3.42843
-v -2.72296 -17.9243 4.31298
-v -2.77037 -17.7981 4.52864
-v -3.17051 -16.9932 5.54093
-v -3.70045 -17.66 5.78613
-v -4.04795 -18.1936 5.96706
-v -4.35338 -18.6194 5.96883
-v -5.75755 -19.3271 5.65487
-v -3.10401 -18.9815 0.118243
-v -2.87316 -18.9613 0.919021
-v -2.43034 -18.9319 1.51088
-v -2.43755 -18.7311 2.16225
-v -2.45555 -18.6407 2.49948
-v -2.8819 -18.594 2.60579
-v -3.3477 -17.9951 4.22083
-v -4.73169 -18.5409 5.3324
-v -3.05025 -18.8868 1.32695
-v -4.20451 -18.5861 2.46404
-v 0.710033 -18.6592 -1.13716
-v 2.05913 -18.5918 -0.991563
-v 1.1849 -18.6772 -0.388354
-v 2.0053 -18.5954 -0.0572764
-v 6.39237 -19.2056 4.52445
-v 5.64925 -19.492 4.31942
-v 5.11194 -19.7103 4.19143
-v 4.94849 -19.6813 4.14407
-v 4.80878 -19.6293 4.11309
-v 2.31056 -18.5814 0.00696266
-v 2.31729 -18.5894 -0.199142
-v 2.43539 -18.5631 -0.843749
-v 2.44597 -18.5293 -1.4531
-v 2.45303 -18.5229 -1.48664
-v 2.49745 -18.5069 -1.51347
-v 5.1406 -18.077 0.480865
-v 4.07834 -18.3617 0.515857
-v 5.22713 -18.2215 2.5594
-v 5.81359 -17.8825 0.0851822
-v 3.00872 -18.5057 -0.0576055
-v 3.14933 -18.3627 -1.35805
-v 4.38525 -18.2252 -0.367964
-v 5.92121 -18.5314 3.73028
-v 4.34849 -18.3148 1.56501
-v 4.91719 -19.2931 3.9138
-v 5.37922 -18.0257 1.43056
-v 6.05171 -17.8258 1.75273
-v 5.97412 -17.8562 0.703995
-v 6.69838 -17.9455 3.8116
-v 6.21127 -17.8071 2.81881
-v -3.18127 -18.5547 -2.43093
-v -3.67717 -18.7671 -1.69418
-v -3.73708 -18.9004 -1.14441
-v -3.79848 -18.9199 -0.96519
-v -4.00371 -18.9244 -0.291902
-v -4.38725 -18.8175 1.00334
-v -4.56981 -18.6552 1.98117
-v -4.45477 -18.5806 2.4171
-v -4.61064 -18.5087 2.72066
-v -4.84134 -18.3394 3.59287
-v -5.04337 -18.3805 4.2763
-v -5.37729 -18.5271 4.81816
-v -6.32656 -18.9699 5.20353
-v -6.32757 -18.9726 5.201
-v -7.4415 -18.7064 5.42364
-v -7.80517 -17.6252 -1.22005
-v -7.80636 -17.6167 -1.25609
-v -7.78643 -17.6216 -1.28054
-v -7.08846 -17.7627 -2.27
-v -6.73389 -17.8435 -2.48148
-v -5.9734 -17.8601 -3.11616
-v -4.79512 -17.9834 -3.41273
-v -3.7544 -18.2241 -3.20044
-v -3.17943 -18.5076 -2.56594
-v -4.42543 -18.518 -2.23666
-v -6.06803 -18.5928 -0.0746953
-v -4.16776 -18.8596 -1.09056
-v -5.71127 -18.2094 -2.41264
-v -7.01376 -17.9698 -1.5307
-v -4.61365 -18.8628 -0.206156
-v -5.23479 -18.7167 1.11695
-v -7.44639 -17.9894 0.111755
-v -5.2859 -18.4952 2.47464
-v -6.35056 -18.4536 4.46211
-v -5.40649 -18.6302 -1.24815
-v -6.45558 -18.3957 1.31282
-v -4.07559 0.81435 -3.37321
-v -3.01328 0.917503 -3.98176
-v -2.64792 0.82237 -4.31244
-v -2.39854 0.502634 -4.88434
-v -2.43018 -0.562366 -6.31426
-v -1.81383 -1.28142 -7.33229
-v -2.7711 -2.45145 -7.83354
-v -3.89518 -3.07393 -7.81547
-v -4.38702 -3.44545 -7.83122
-v -5.07478 -2.52121 -6.56103
-v -3.59595 -0.128111 -4.91497
-v -3.01339 -1.61036 -7.06429
-v -11.9076 -3.05627 -2.44729
-v -11.4642 -2.59777 -2.63262
-v -11.3807 -2.50191 -2.66664
-v -10.9963 -2.45589 -2.73772
-v -9.54351 -1.92122 -3.00943
-v -9.02267 -1.69639 -3.10809
-v -6.46369 -1.96419 -4.76823
-v -5.91052 -2.75405 -6.16624
-v -5.69149 -3.01245 -6.68104
-v -5.69787 -3.48755 -7.19219
-v -5.7222 -3.6944 -7.32863
-v -5.78445 -4.13586 -7.49004
-v -6.33436 -5.09181 -7.45393
-v -7.1773 -6.32121 -7.1754
-v -8.30267 -6.81799 -5.85339
-v -9.49625 -6.19219 -3.83241
-v -9.72031 -5.83697 -3.05128
-v -9.88143 -5.50292 -2.78206
-v -10.2048 -5.25703 -2.54214
-v -11.0132 -4.37264 -2.38157
-v -10.3347 -3.28058 -2.84892
-v -8.89488 -3.64838 -3.78764
-v -7.39682 -5.1829 -6.51363
-v -7.09365 -2.91284 -5.2027
-v -8.5698 -5.68259 -5.16851
-v -6.25062 -3.7202 -6.81526
-v -7.74301 -4.1912 -5.61262
-v -8.70142 0.594052 -0.920757
-v -6.79699 0.703026 -0.316032
-v -5.87053 -0.099028 0.846976
-v -5.60934 -0.442833 1.28366
-v -5.60657 0.0888788 0.489344
-v -5.53102 0.293355 -0.0556779
-v -5.31261 0.422834 -0.443193
-v -5.21918 0.483345 -0.703625
-v -5.07961 0.530771 -1.05358
-v -5.02496 0.527718 -1.32527
-v -4.68414 0.55934 -2.41843
-v -4.43626 0.629863 -2.94323
-v -4.35969 0.506213 -3.32543
-v -3.97593 -0.133254 -4.57193
-v -4.01385 -0.263501 -4.71016
-v -5.49839 -1.61652 -5.14622
-v -7.7959 -1.95632 -3.82751
-v -8.28439 -1.74111 -3.39577
-v -8.50943 -1.55299 -3.23275
-v -9.24276 -1.10848 -2.90643
-v -9.51959 -0.734962 -2.68105
-v -9.94518 -0.509204 -2.52
-v -10.1194 0.130665 -2.12199
-v -9.9866 0.49603 -1.75844
-v -9.70319 0.877582 -1.27132
-v -9.08794 -0.0765847 -2.05766
-v -5.11385 -0.535856 -4.05713
-v -8.4666 -1.17976 -3.08942
-v -7.39512 0.204022 -1.26135
-v -4.87962 0.368914 -2.61413
-v -6.89682 -1.50643 -4.04277
-v -5.79997 0.354131 -0.842497
-v -6.80961 -0.358092 -2.51956
-v 11.1959 -3.85244 -1.97657
-v 11.5897 -4.46941 -1.60203
-v 11.635 -4.7573 -1.27203
-v 11.6143 -5.1247 -0.762655
-v 10.7871 -5.25766 0.0620276
-v 10.3689 -5.41321 0.683658
-v 9.82201 -5.34246 0.995192
-v 8.79574 -5.3899 1.07006
-v 8.63593 -5.55682 1.00629
-v 8.90097 -6.14035 0.232997
-v 4.1773 0.108464 -1.12358
-v 4.91844 -0.390622 0.436485
-v 4.91401 -0.456217 0.794712
-v 5.59278 -0.347554 0.546112
-v 6.82164 -0.114435 0.152843
-v 6.90477 -0.107049 0.092802
-v 7.95237 -0.263191 -0.902691
-v 6.83938 -2.92594 -6.38791
-v 7.06427 -3.82385 -6.47767
-v 8.75915 -6.01866 -0.508243
-v 9.00918 -6.51361 -0.8432
-v 9.6344 -7.67087 -1.17538
-v 9.91865 -8.29697 -1.41246
-v 9.9463 -8.98907 -2.42912
-v 9.71947 -9.7746 -3.8076
-v 9.26766 -9.31935 -4.56685
-v 8.84103 -8.93539 -5.16779
-v 8.30721 -7.8594 -5.61632
-v 9.68052 -9.04919 -3.54201
-v 9.71911 -8.32666 -2.45901
-v 9.03965 -8.0465 -4.1884
-v 9.05844 -6.98945 -2.35701
-v 8.69724 -0.416741 -1.47101
-v 8.93851 -0.484356 -1.70123
-v 9.193 -0.537614 -1.94412
-v 9.35822 -0.492823 -2.0412
-v 9.4429 -0.502044 -2.0943
-v 9.55262 -0.580751 -2.17612
-v 9.79774 -0.816638 -2.37472
-v 10.8493 -0.994233 -2.72748
-v 10.9286 -1.36502 -2.82725
-v 8.45234 -2.85819 -5.54703
-v 7.56359 -2.82224 -6.05728
-v 6.92526 -2.86857 -6.34005
-v 6.91333 -2.8751 -6.34783
-v 6.88812 -2.83535 -6.32688
-v 9.88231 -1.31778 -2.69931
-v 8.0728 -2.33546 -5.59427
-v 9.13902 -1.70408 -3.72959
-v 9.01551 -2.02018 -4.50899
-v 9.24112 -0.891202 -2.21326
-v 8.62813 -2.33031 -5.18904
-v 9.10216 -1.45939 -2.86325
-v 9.18097 -2.28716 -4.62239
-v 9.34959 -2.23342 -4.19029
-v 9.43874 -2.02307 -3.84721
-v 9.52262 -1.84962 -3.43672
-v 9.88858 -1.37055 -2.7356
-v 9.97292 -1.37318 -2.71743
-v 10.6578 -1.38478 -2.78418
-v 11.4262 -2.25161 -3.07977
-v 11.1491 -3.83057 -1.95336
-v 11.1613 -3.85052 -1.94696
-v 9.86232 -4.75237 0.238385
-v 9.54842 -4.94278 0.477411
-v 8.94152 -5.09735 0.654812
-v 8.53747 -5.22139 0.599743
-v 8.54208 -5.28375 0.192401
-v 8.59503 -5.52132 -0.210122
-v 8.63704 -5.63352 -0.625862
-v 8.67569 -5.7476 -0.761045
-v 8.78515 -5.91158 -1.3542
-v 8.8186 -5.997 -1.90537
-v 8.8466 -6.27868 -2.65807
-v 8.79388 -6.83838 -3.55363
-v 8.5458 -7.08197 -4.84782
-v 8.3055 -7.20489 -5.44861
-v 8.03506 -7.17013 -5.8263
-v 7.58687 -7.06429 -6.31421
-v 7.09222 -6.22165 -6.76013
-v 6.99566 -5.90388 -6.80994
-v 7.11769 -5.44676 -6.57199
-v 7.22574 -4.81445 -6.39822
-v 7.54531 -4.33099 -6.05524
-v 8.17145 -3.53496 -5.58414
-v 8.2829 -3.23598 -5.56374
-v 8.47891 -3.01988 -5.48988
-v 8.71172 -2.8384 -5.34014
-v 8.91588 -2.58714 -4.90522
-v 9.22905 -3.21626 -3.32277
-v 10.4072 -1.86699 -2.8685
-v 10.1464 -3.71109 -1.40823
-v 8.76579 -4.34929 -3.37235
-v 8.34496 -5.61151 -4.79166
-v 7.54086 -6.30524 -6.22704
-v 9.67781 -2.66327 -3.1221
-v 8.76442 -5.78391 -1.78126
-v 8.4693 -3.3148 -5.34054
-v 8.21386 -6.51046 -5.31223
-v 7.77806 -5.35658 -5.75691
-v 8.67782 -5.71098 -3.67877
-v 8.28761 -4.59537 -4.98945
-v 1.93589 -3.13639 -8.07559
-v 2.96972 -2.55539 -7.6485
-v 6.46168 -2.94844 -6.57555
-v 6.48287 -3.24998 -6.73225
-v 6.65251 -3.83651 -6.81666
-v 6.63047 -4.17491 -6.90402
-v 6.53577 -4.92629 -7.12199
-v 6.22202 -5.42954 -7.64814
-v 5.94225 -5.55822 -7.88632
-v 4.47588 -5.97224 -8.66282
-v 3.33678 -5.05508 -8.73225
-v 2.55473 -4.56142 -8.637
-v 2.14119 -3.75666 -8.33357
-v 2.93428 -3.48044 -8.15491
-v 4.72946 -4.99415 -8.39975
-v 4.02671 -2.4857 -7.40436
-v 6.03496 -2.76729 -6.59791
-v 5.79391 -4.84085 -7.7926
-v 3.77326 -4.36602 -8.44775
-v 3.58482 -2.80425 -7.76507
-v 6.08131 -4.03111 -7.22385
-v 4.94066 -4.30357 -8.12438
-v 4.30976 -3.3525 -7.85572
-v -6.69873 -18.1695 2.15848
-v -6.65123 -18.1303 2.61053
-v -6.65005 -18.1919 3.74706
-v -6.59452 -18.248 4.31753
-v -6.60953 -18.2719 4.46994
-v -7.52774 -18.1787 5.15636
-v -8.2386 -17.7983 5.57224
-v -8.99798 -16.0422 5.7175
-v -9.10489 -15.5564 5.6305
-v -8.94158 -14.8465 5.34916
-v -8.85115 -14.3736 5.28458
-v -8.76601 -14.0843 5.16017
-v -9.04013 -13.5063 4.185
-v -9.28124 -13.461 3.89239
-v -10.0332 -13.8429 2.5724
-v -10.2986 -14.034 2.00737
-v -10.4451 -14.0702 1.67098
-v -10.5103 -14.2304 1.23307
-v -10.4303 -14.8195 0.335175
-v -10.3283 -15.0238 -0.154214
-v -10.0309 -15.414 -0.568392
-v -9.81732 -15.7004 -0.680132
-v -9.46997 -16.1514 -0.614495
-v -9.0282 -16.6431 -0.617155
-v -8.59994 -17.1118 -0.389686
-v -8.29905 -17.4767 -0.173699
-v -7.83682 -17.7464 0.305225
-v -7.64837 -17.8425 0.522578
-v -7.12772 -18.0109 1.51616
-v -7.68025 -17.739 4.84566
-v -8.9023 -16.2534 2.43343
-v -7.10701 -17.8596 3.49777
-v -8.83115 -14.9454 4.63058
-v -7.33821 -17.7338 2.37078
-v -8.09006 -16.8863 3.76566
-v -8.23971 -17.3632 0.770131
-v -10.0971 -15.0126 1.4035
-v -8.58815 -16.421 5.16807
-v -9.00825 -16.7204 -0.00615466
-v -9.57552 -14.4795 3.00892
-v -9.33159 -16.2984 1.06898
-v -9.91096 -15.6249 0.0619866
-v 8.3814 -14.9799 6.27751
-v 8.46067 -15.464 5.98351
-v 8.76236 -16.8125 5.91722
-v 8.70327 -17.2075 5.77145
-v 8.45453 -17.6074 5.5089
-v 8.27515 -17.6796 5.34943
-v 7.74341 -18.0918 5.02783
-v 7.04471 -17.7767 4.3167
-v 6.81557 -17.816 3.82756
-v 6.796 -17.8101 3.7521
-v 6.78658 -17.7709 3.57246
-v 6.50413 -17.6945 2.80191
-v 6.61547 -17.6212 2.42455
-v 6.55059 -17.6512 1.96829
-v 6.8621 -17.6354 0.895469
-v 9.67798 -15.38 0.757261
-v 9.7305 -15.27 1.1189
-v 9.61029 -15.0268 2.19635
-v 9.51283 -14.6511 2.81565
-v 8.91128 -14.6703 3.53605
-v 8.01937 -14.2508 5.07888
-v 8.05359 -14.5364 5.5558
-v 8.29367 -15.2241 4.59372
-v 8.37049 -16.2972 2.59206
-v 8.33549 -16.8987 5.24999
-v 7.12357 -17.4404 3.25876
-v 8.85546 -15.2579 3.21689
-v 7.27742 -17.307 1.73947
-v 7.88345 -16.6415 3.88891
-v 3.2997 -20.3881 5.53909
-v 2.77006 -20.1195 6.00748
-v 2.39592 -19.7411 6.15724
-v 1.79724 -19.2007 6.60655
-v 0.903801 -17.5652 6.32278
-v 0.819213 -17.5132 6.3599
-v 0.816415 -17.3996 6.34521
-v 0.872976 -16.4585 6.16572
-v 0.773509 -16.3777 6.13872
-v -0.547262 -17.0551 5.50003
-v -0.973561 -17.5299 4.92954
-v -1.05401 -17.6253 4.77218
-v -1.12574 -17.9811 3.99315
-v -1.2152 -18.0645 3.81685
-v -1.35549 -18.194 3.5383
-v -1.28091 -18.2905 3.2334
-v -1.65231 -18.7287 2.03541
-v -1.52133 -18.7724 1.73952
-v -0.878568 -18.7952 0.622388
-v -0.801691 -18.8344 0.243165
-v -0.266011 -18.7777 0.116888
-v 0.487302 -18.7202 -0.0958914
-v 1.16724 -18.6452 -0.0797194
-v 1.797 -18.5832 0.119665
-v 1.98215 -18.5648 0.221307
-v 2.17779 -18.5519 0.285758
-v 2.36027 -18.5359 0.353912
-v 2.64294 -18.497 0.496052
-v 3.05615 -18.4491 0.756121
-v 3.32277 -18.4161 1.03429
-v 3.70831 -18.378 1.44073
-v 4.03184 -18.3639 1.75021
-v 4.23198 -18.3538 1.87329
-v 4.80725 -18.4013 2.6475
-v 4.70108 -19.2392 3.8415
-v 4.78113 -19.2989 3.9132
-v 4.65522 -19.4986 4.06368
-v 4.49572 -19.6828 4.27025
-v 4.07878 -19.8736 4.63943
-v 3.47393 -20.4479 5.41196
-v 1.77681 -18.6705 5.9658
-v -0.575064 -17.5636 4.78117
-v 0.0633911 -18.6297 0.802927
-v 2.4431 -18.5662 3.27254
-v 2.57915 -19.5432 5.59542
-v -0.585391 -18.574 1.66449
-v 1.23958 -18.587 0.367539
-v 2.84539 -18.4516 1.85583
-v 0.440148 -18.1498 3.5708
-v 3.82994 -18.6094 2.74043
-v 3.79623 -19.2412 4.06544
-v 2.05778 -18.5895 4.72207
-v -0.884839 -18.471 2.4305
-v 2.39938 -18.4968 0.690339
-v 1.4227 -18.4429 1.57717
-v -0.63572 -18.0995 3.62193
-v 0.573386 -17.8004 4.4211
-v 0.359991 -18.3453 2.53648
-v 1.20802 -18.2981 3.52746
-v 3.25102 -19.7958 5.08352
-v 1.62741 -18.4094 2.59641
-v 1.82982 1.1026 -4.29731
-v 2.14285 1.08445 -4.22759
-v 2.95076 0.877488 -3.66644
-v 2.98549 0.855517 -3.62364
-v 3.79793 0.319393 -2.71542
-v 4.12368 0.282059 -1.92775
-v 4.30384 0.0401254 -1.24999
-v 4.56875 -0.177317 -0.761825
-v 4.57058 -0.210269 -0.490365
-v 4.89702 -0.312656 -0.269487
-v 5.22304 -0.380424 0.181221
-v 5.68299 -0.366576 0.289866
-v 6.37003 -0.304144 0.00581551
-v 6.71185 -0.27473 -0.0149846
-v 7.05235 -0.330692 -0.290053
-v 7.89141 -0.313382 -0.890815
-v 7.93923 -0.314016 -0.920161
-v 7.9657 -0.340564 -0.959427
-v 8.22883 -0.450128 -1.21454
-v 8.43247 -0.515643 -1.37359
-v 8.61363 -0.580544 -1.54939
-v 8.73145 -0.656186 -1.6903
-v 8.76697 -0.720041 -1.76831
-v 8.7721 -0.849813 -1.89958
-v 8.75988 -1.10623 -2.26907
-v 8.87818 -1.4298 -2.80345
-v 8.8987 -1.47803 -2.92125
-v 8.92778 -1.64986 -3.58093
-v 8.85436 -1.68043 -3.74827
-v 8.68271 -1.82822 -4.30442
-v 8.55286 -1.90061 -4.57388
-v 8.26347 -2.03901 -5.01986
-v 8.01731 -2.2227 -5.49377
-v 7.84969 -2.24671 -5.59245
-v 7.42064 -2.56668 -5.97796
-v 6.97867 -2.68023 -6.205
-v 6.81232 -2.73732 -6.28186
-v 6.75379 -2.73715 -6.29925
-v 6.63527 -2.72835 -6.33767
-v 6.34126 -2.72592 -6.45932
-v 6.03572 -2.73712 -6.5759
-v 6.01617 -2.72636 -6.57869
-v 5.85948 -2.65841 -6.62155
-v 4.92149 -2.58451 -7.04933
-v 4.49181 -2.33052 -7.08995
-v 4.09961 -2.24 -7.16576
-v 3.52239 -2.00392 -7.02253
-v 2.86916 -1.16863 -6.488
-v 1.76171 0.735625 -4.68584
-v 1.66487 1.01053 -4.4289
-v 2.15187 0.158104 -5.18725
-v 2.7369 -0.0569637 -5.14276
-v 6.18456 -1.18102 -3.30694
-v 5.51754 -0.387007 -0.138093
-v 4.18287 -2.10341 -7.03172
-v 2.31117 -0.186015 -5.544
-v 2.24825 0.599224 -4.61691
-v 2.90344 0.52885 -4.1564
-v 3.42107 -1.02994 -6.21281
-v 6.59803 -1.59551 -5.07391
-v 4.43659 -0.538406 -4.23958
-v 5.33731 -0.6382 -1.96014
-v 7.06308 -1.19329 -1.89896
-v 7.55481 -1.52389 -3.50817
-v 2.74482 -0.569676 -5.86585
-v 3.65393 -1.55781 -6.66293
-v 7.64678 -1.90613 -5.13208
-v 7.18798 -2.17926 -5.72268
-v 6.47164 -2.47556 -6.22422
-v 6.33516 -1.27943 -4.08912
-v 4.30484 -1.22518 -6.06884
-v 3.50179 0.238598 -3.80412
-v 3.62937 -0.242691 -4.69546
-v 5.39263 -0.904666 -3.71166
-v 5.96089 -0.496581 -0.683191
-v 4.75553 -0.22563 -1.33388
-v 4.34791 -0.0232664 -2.25096
-v 5.76271 -0.971029 -2.68868
-v 8.28118 -0.886212 -1.76605
-v 7.38063 -0.591522 -0.964355
-v 6.30434 -0.995099 -1.77953
-v 6.56702 -1.26224 -2.60364
-v 8.45614 -1.47729 -3.02895
-v 7.37405 -1.39978 -2.67078
-v 8.17515 -1.72683 -4.25106
-v 6.86143 -1.38757 -3.41782
-v 7.19747 -1.53097 -4.23492
-v 5.28917 -2.12563 -6.51375
-v 5.4313 -1.34405 -5.44274
-v 4.37997 -1.92762 -6.79422
-v 4.43515 -0.779744 -5.1061
-v 3.86242 0.132564 -3.08555
-v 3.57339 -0.635712 -5.56185
-v 4.83279 -0.281533 -0.577737
-v 4.43921 -0.353131 -3.29897
-v 5.78873 -1.18099 -4.62828
-v 5.10968 -0.934761 -4.6543
-v 5.05985 -0.638208 -2.77254
-v 1.26048 -14.7571 -7.51923
-v 1.61391 -14.1222 -8.00175
-v 1.87284 -13.359 -8.42784
-v 2.11706 -12.859 -8.64877
-v 2.28411 -12.2549 -8.88643
-v 2.32232 -12.0841 -8.94502
-v 2.51235 -11.4023 -9.139
-v 2.64389 -11.2484 -9.17194
-v 2.6727 -11.0391 -9.21257
-v 2.75291 -10.7802 -9.22671
-v 3.10031 -10.3756 -9.23304
-v 4.02232 -9.79451 -9.22524
-v 4.19319 -9.74414 -9.21358
-v 4.49815 -9.97961 -9.06529
-v 5.90631 -9.90898 -8.27079
-v 7.10811 -10.9218 -7.30582
-v 8.2148 -11.3082 -6.29425
-v 8.7225 -11.0683 -5.63808
-v 9.23151 -11.7321 -4.93348
-v 9.622 -12.0219 -4.1483
-v 9.98076 -12.7315 -2.72422
-v 10.1977 -12.891 -0.97509
-v 10.1355 -14.1377 -0.176482
-v 9.787 -15.0687 0.180417
-v 9.6046 -15.4187 0.405968
-v 9.52341 -15.5428 0.486773
-v 9.3482 -15.726 0.605403
-v 9.18502 -15.861 0.750823
-v 8.94719 -16.0392 0.935572
-v 8.58174 -16.3696 1.06587
-v 8.10979 -16.7976 0.826284
-v 7.32337 -17.3813 0.673521
-v 7.03393 -17.5597 0.626916
-v 6.77719 -17.6594 0.335673
-v 6.23446 -17.8087 0.188258
-v 5.86473 -17.8769 0.032473
-v 5.81028 -17.8893 -0.0104367
-v 5.4056 -17.9996 -0.252929
-v 5.11535 -18.0645 -0.483824
-v 4.76998 -18.1185 -0.880798
-v 4.0931 -18.1705 -1.5634
-v 3.41899 -18.1839 -1.97881
-v 2.1625 -17.9792 -3.28478
-v 2.06931 -17.9565 -3.39523
-v 2.05876 -17.887 -3.56022
-v 1.25829 -17.4163 -4.55147
-v 1.05062 -16.7645 -5.43113
-v 0.679545 -16.3491 -5.91016
-v 0.60457 -16.211 -6.06796
-v 0.549024 -16.0492 -6.24893
-v 0.4998 -15.8555 -6.44711
-v 0.652087 -15.1767 -7.01164
-v 1.0161 -15.0351 -7.21567
-v 1.08058 -16.0998 -6.20413
-v 5.37179 -12.6779 -8.19881
-v 8.94052 -15.9579 -1.65372
-v 2.63421 -17.0526 -5.07103
-v 1.4188 -15.3119 -7.01011
-v 8.01085 -12.2902 -6.46064
-v 4.20867 -14.6544 -7.51708
-v 3.85656 -10.857 -9.0447
-v 3.34972 -12.4482 -8.71611
-v 5.7626 -11.141 -8.30145
-v 7.76815 -17.0312 -0.633836
-v 9.63139 -14.2495 -3.36863
-v 9.14863 -15.8788 0.309822
-v 9.71828 -14.9 -0.858731
-v 2.7183 -17.8794 -3.4075
-v 6.69445 -12.7828 -7.40435
-v 8.68633 -11.8452 -5.76163
-v 7.27725 -15.5686 -4.79375
-v 2.93507 -16.0795 -6.3643
-v 3.08804 -13.7476 -8.18434
-v 2.73452 -14.9041 -7.42998
-v 4.76409 -13.8018 -7.92785
-v 6.06211 -17.8126 -0.550002
-v 9.90044 -13.8497 -2.23479
-v 9.27031 -15.0742 -2.83079
-v 9.66072 -13.4775 -3.72397
-v 8.11617 -14.5399 -5.19457
-v 8.29662 -15.3594 -4.04683
-v 5.58873 -17.3002 -3.7367
-v 5.74754 -15.2857 -6.2188
-v 5.85778 -13.6544 -7.5684
-v 8.8628 -13.0972 -5.24432
-v 7.6291 -13.7026 -6.29806
-v 8.13551 -16.3413 -2.70127
-v 9.13848 -14.3695 -4.15261
-v 4.40254 -17.2081 -4.49678
-v 4.26564 -17.9077 -2.68561
-v 5.86252 -17.6355 -2.49267
-v 6.48562 -16.5955 -4.15049
-v 6.93278 -14.8793 -5.85708
-v 5.30878 -14.5859 -7.1558
-v 4.33214 -15.6151 -6.57886
-v 7.49304 -16.145 -3.85419
-v 3.89555 -16.6003 -5.65267
-v 7.1955 -17.2256 -2.10135
-v 5.50509 -16.7471 -4.66901
-v 6.13653 -15.9249 -5.25062
-v 6.29974 -17.1925 -3.43905
-v 6.44628 -14.1865 -6.82055
-v 5.00347 -16.345 -5.4749
-v 6.98854 -16.9314 -3.18964
-f 3 4 2
-f 8 9 7
-f 8 7 6
-f 10 9 8
-f 14 13 4
-f 7 16 15
-f 9 17 16
-f 9 16 7
-f 21 22 20
-f 21 20 19
-f 23 24 22
-f 23 22 21
-f 25 26 23
-f 26 24 23
-f 27 28 25
-f 28 26 25
-f 20 30 29
-f 22 31 30
-f 22 30 20
-f 24 32 31
-f 24 31 22
-f 26 33 24
-f 33 32 24
-f 28 34 26
-f 34 33 26
-f 35 34 28
-f 1 29 36
-f 30 37 36
-f 30 36 29
-f 31 38 37
-f 31 37 30
-f 32 39 38
-f 32 38 31
-f 33 40 32
-f 40 39 32
-f 34 41 33
-f 41 40 33
-f 35 42 34
-f 42 41 34
-f 42 35 11
-f 45 21 19
-f 45 19 44
-f 46 23 21
-f 46 21 45
-f 47 25 46
-f 25 23 46
-f 48 27 47
-f 27 25 47
-f 1 12 43
-f 13 44 12
-f 44 43 12
-f 14 45 13
-f 45 44 13
-f 15 46 14
-f 46 45 14
-f 16 47 46
-f 16 46 15
-f 17 48 47
-f 17 47 16
-f 18 49 48
-f 18 48 17
-f 49 18 11
-f 50 51 52
-f 53 54 52
-f 53 52 51
-f 55 56 54
-f 55 54 53
-f 57 58 56
-f 57 56 55
-f 59 60 57
-f 60 58 57
-f 61 62 59
-f 62 60 59
-f 63 64 61
-f 64 62 61
-f 64 63 65
-f 50 52 66
-f 54 67 52
-f 67 66 52
-f 56 68 54
-f 68 67 54
-f 58 69 56
-f 69 68 56
-f 60 70 69
-f 60 69 58
-f 62 71 70
-f 62 70 60
-f 64 72 71
-f 64 71 62
-f 72 64 65
-f 74 55 73
-f 55 53 73
-f 75 57 74
-f 57 55 74
-f 76 59 57
-f 76 57 75
-f 77 61 59
-f 77 59 76
-f 78 77 76
-f 79 77 78
-f 50 66 80
-f 67 81 80
-f 67 80 66
-f 68 82 81
-f 68 81 67
-f 69 83 82
-f 69 82 68
-f 70 84 69
-f 84 83 69
-f 71 85 70
-f 85 84 70
-f 72 86 71
-f 86 85 71
-f 86 72 65
-f 50 80 87
-f 81 88 87
-f 81 87 80
-f 82 89 88
-f 82 88 81
-f 83 90 89
-f 83 89 82
-f 84 91 83
-f 91 90 83
-f 85 92 84
-f 92 91 84
-f 86 93 85
-f 93 92 85
-f 93 86 65
-f 50 87 94
-f 88 95 94
-f 88 94 87
-f 89 96 95
-f 89 95 88
-f 90 96 89
-f 91 97 90
-f 92 98 91
-f 98 97 91
-f 93 99 92
-f 99 98 92
-f 99 93 65
-f 94 100 101
-f 94 101 50
-f 95 102 100
-f 95 100 94
-f 96 103 102
-f 96 102 95
-f 98 105 97
-f 105 104 97
-f 99 106 98
-f 106 105 98
-f 65 107 99
-f 107 106 99
-f 107 65 108
-f 65 79 108
-f 100 109 110
-f 100 110 101
-f 102 109 100
-f 106 112 105
-f 107 113 106
-f 113 112 106
-f 128 129 127
-f 125 124 129
-f 125 129 128
-f 36 118 1
-f 42 128 41
-f 11 125 42
-f 125 128 42
-f 129 115 127
-f 109 116 110
-f 116 117 110
-f 119 116 109
-f 112 123 122
-f 113 124 123
-f 113 123 112
-f 1 2 12
-f 4 13 2
-f 13 12 2
-f 10 17 9
-f 18 10 11
-f 10 18 17
-f 1 43 29
-f 19 20 29
-f 44 19 29
-f 44 29 43
-f 35 27 48
-f 35 28 27
-f 35 49 11
-f 49 35 48
-f 73 53 51
-f 63 61 77
-f 79 63 77
-f 63 79 65
-f 108 79 78
-f 108 78 115
-f 129 108 115
-f 113 107 108
-f 124 113 108
-f 124 108 129
-f 39 126 38
-f 128 127 41
-f 41 127 40
-f 116 2 117
-f 2 118 117
-f 2 1 118
-f 119 3 116
-f 3 2 116
-f 120 5 119
-f 5 3 119
-f 122 6 121
-f 122 8 6
-f 123 8 122
-f 123 10 8
-f 124 10 123
-f 124 125 10
-f 125 11 10
-f 102 119 109
-f 103 119 102
-f 103 120 119
-f 105 122 104
-f 112 122 105
-f 122 121 104
-f 75 74 114
-f 134 126 135
-f 137 39 138
-f 142 127 143
-f 130 131 150
-f 151 150 131
-f 131 132 151
-f 152 151 132
-f 132 133 152
-f 133 134 152
-f 153 152 134
-f 134 135 153
-f 154 153 135
-f 135 136 154
-f 136 137 154
-f 142 143 155
-f 143 144 155
-f 156 155 144
-f 144 145 156
-f 145 146 156
-f 157 156 146
-f 146 147 157
-f 150 151 160
-f 160 159 150
-f 151 152 161
-f 161 160 151
-f 152 153 162
-f 162 161 152
-f 153 154 163
-f 163 162 153
-f 165 158 176
-f 166 176 158
-f 158 159 167
-f 167 166 158
-f 159 160 168
-f 168 167 159
-f 160 161 168
-f 169 168 161
-f 161 162 169
-f 170 169 162
-f 162 163 170
-f 171 170 163
-f 176 166 193
-f 177 193 166
-f 166 167 178
-f 178 177 166
-f 169 170 179
-f 180 179 170
-f 170 171 180
-f 171 172 181
-f 182 181 172
-f 183 182 172
-f 173 174 188
-f 188 187 173
-f 189 188 174
-f 190 189 175
-f 193 192 176
-f 193 177 205
-f 194 205 177
-f 181 182 196
-f 197 196 182
-f 182 183 198
-f 198 197 182
-f 183 184 199
-f 199 198 183
-f 184 185 199
-f 200 199 185
-f 185 186 201
-f 201 200 185
-f 186 187 202
-f 202 201 186
-f 187 188 203
-f 203 202 187
-f 189 190 204
-f 205 194 211
-f 198 199 206
-f 199 200 207
-f 207 206 199
-f 200 201 208
-f 208 207 200
-f 201 202 209
-f 209 208 201
-f 202 203 210
-f 210 209 202
-f 206 207 212
-f 213 212 207
-f 207 208 214
-f 214 213 207
-f 208 209 214
-f 215 214 209
-f 209 210 216
-f 216 215 209
-f 212 213 218
-f 219 218 213
-f 213 214 220
-f 220 219 213
-f 214 215 221
-f 221 220 214
-f 215 216 222
-f 222 221 215
-f 218 219 223
-f 224 223 219
-f 219 220 225
-f 225 224 219
-f 220 221 225
-f 226 225 221
-f 221 222 226
-f 227 226 222
-f 225 226 228
-f 229 228 226
-f 226 227 229
-f 230 229 227
-f 228 229 231
-f 229 230 232
-f 232 231 229
-f 130 75 131
-f 114 132 131
-f 75 114 131
-f 132 114 133
-f 126 134 133
-f 114 126 133
-f 135 126 136
-f 39 137 136
-f 126 39 136
-f 138 39 139
-f 40 140 139
-f 39 40 139
-f 140 40 141
-f 127 142 141
-f 40 127 141
-f 143 127 144
-f 115 145 144
-f 127 115 144
-f 78 146 145
-f 145 115 78
-f 146 78 147
-f 76 148 147
-f 78 76 147
-f 75 130 149
-f 148 76 149
-f 76 75 149
-f 184 183 172
-f 234 228 235
-f 236 231 237
-f 237 231 238
-f 239 232 240
-f 240 232 241
-f 245 223 246
-f 246 223 247
-f 248 250 247
-f 247 250 246
-f 246 250 245
-f 236 251 235
-f 250 234 251
-f 235 251 234
-f 239 253 238
-f 238 253 237
-f 237 253 236
-f 251 236 253
-f 254 249 255
-f 257 240 241
-f 255 259 254
-f 253 260 251
-f 261 255 252
-f 252 262 261
-f 262 256 261
-f 252 263 262
-f 264 260 253
-f 257 264 240
-f 240 264 239
-f 253 239 264
-f 264 265 260
-f 261 256 265
-f 260 265 256
-f 265 264 259
-f 261 265 255
-f 259 255 265
-f 225 228 234
-f 228 231 236
-f 235 228 236
-f 232 239 238
-f 238 231 232
-f 241 232 230
-f 223 245 244
-f 218 223 244
-f 224 248 247
-f 247 223 224
-f 248 224 233
-f 234 250 233
-f 233 224 234
-f 224 225 234
-f 233 250 248
-f 266 50 267
-f 270 117 271
-f 272 118 273
-f 281 114 282
-f 282 114 283
-f 285 73 286
-f 288 266 305
-f 289 305 266
-f 266 267 289
-f 290 289 267
-f 267 268 290
-f 268 269 290
-f 291 290 269
-f 269 270 291
-f 270 271 291
-f 292 291 271
-f 271 272 292
-f 293 292 272
-f 272 273 293
-f 294 293 273
-f 273 274 294
-f 295 294 274
-f 274 275 295
-f 296 295 275
-f 275 276 296
-f 276 277 296
-f 297 296 277
-f 277 278 297
-f 298 297 278
-f 278 279 298
-f 299 298 279
-f 279 280 299
-f 280 281 299
-f 300 299 281
-f 281 282 300
-f 282 283 300
-f 301 300 283
-f 283 284 301
-f 284 285 301
-f 302 301 285
-f 303 302 285
-f 285 286 303
-f 304 303 286
-f 286 287 304
-f 287 288 304
-f 305 304 288
-f 305 289 322
-f 306 322 289
-f 289 290 306
-f 307 306 290
-f 290 291 307
-f 308 307 291
-f 291 292 308
-f 309 308 292
-f 292 293 310
-f 310 309 292
-f 293 294 311
-f 311 310 293
-f 294 295 312
-f 312 311 294
-f 295 296 313
-f 313 312 295
-f 296 297 314
-f 314 313 296
-f 297 298 315
-f 315 314 297
-f 298 299 316
-f 316 315 298
-f 299 300 317
-f 317 316 299
-f 300 301 317
-f 318 317 301
-f 301 302 318
-f 319 318 302
-f 302 303 319
-f 320 319 303
-f 303 304 320
-f 321 320 304
-f 304 305 321
-f 322 321 305
-f 322 306 338
-f 323 338 306
-f 306 307 323
-f 324 323 307
-f 307 308 324
-f 325 324 308
-f 308 309 325
-f 326 325 309
-f 309 310 327
-f 327 326 309
-f 310 311 327
-f 328 327 311
-f 311 312 328
-f 329 328 312
-f 312 313 330
-f 330 329 312
-f 314 315 331
-f 315 316 332
-f 332 331 315
-f 316 317 333
-f 333 332 316
-f 317 318 334
-f 334 333 317
-f 318 319 334
-f 335 334 319
-f 319 320 335
-f 336 335 320
-f 320 321 336
-f 337 336 321
-f 321 322 338
-f 338 337 321
-f 338 323 339
-f 323 324 339
-f 324 325 339
-f 325 326 339
-f 326 327 339
-f 327 328 339
-f 328 329 339
-f 329 330 339
-f 331 332 339
-f 332 333 339
-f 333 334 339
-f 334 335 339
-f 335 336 339
-f 336 337 339
-f 337 338 339
-f 50 101 268
-f 267 50 268
-f 101 110 269
-f 268 101 269
-f 110 117 270
-f 269 110 270
-f 118 272 271
-f 271 117 118
-f 36 274 273
-f 273 118 36
-f 36 37 275
-f 274 36 275
-f 37 277 276
-f 275 37 276
-f 37 38 278
-f 277 37 278
-f 38 126 279
-f 278 38 279
-f 279 126 280
-f 114 281 280
-f 126 114 280
-f 114 74 284
-f 283 114 284
-f 73 285 284
-f 284 74 73
-f 51 287 286
-f 286 73 51
-f 287 51 288
-f 50 266 288
-f 51 50 288
-f 313 314 330
-f 331 330 314
-f 330 331 339
-f 343 104 344
-f 348 103 349
-f 352 340 364
-f 353 364 340
-f 354 353 340
-f 341 342 355
-f 356 355 342
-f 342 343 356
-f 343 344 356
-f 357 356 344
-f 344 345 357
-f 358 357 345
-f 345 346 358
-f 359 358 346
-f 360 359 346
-f 346 347 360
-f 361 360 347
-f 347 348 361
-f 362 361 348
-f 348 349 362
-f 349 350 362
-f 363 362 350
-f 350 351 363
-f 351 352 363
-f 364 363 352
-f 364 353 376
-f 365 376 353
-f 353 354 365
-f 366 365 354
-f 355 356 367
-f 368 367 356
-f 356 357 368
-f 369 368 357
-f 357 358 369
-f 370 369 358
-f 358 359 370
-f 371 370 359
-f 359 360 372
-f 372 371 359
-f 360 361 373
-f 373 372 360
-f 361 362 374
-f 374 373 361
-f 362 363 375
-f 375 374 362
-f 363 364 376
-f 376 375 363
-f 376 365 388
-f 377 388 365
-f 365 366 377
-f 378 377 366
-f 367 368 379
-f 380 379 368
-f 368 369 381
-f 381 380 368
-f 369 370 382
-f 382 381 369
-f 370 371 382
-f 383 382 371
-f 371 372 384
-f 384 383 371
-f 372 373 385
-f 385 384 372
-f 373 374 385
-f 386 385 374
-f 374 375 387
-f 387 386 374
-f 375 376 388
-f 388 387 375
-f 388 377 399
-f 389 399 377
-f 377 378 389
-f 390 389 378
-f 379 380 392
-f 392 391 379
-f 380 381 393
-f 393 392 380
-f 381 382 394
-f 394 393 381
-f 382 383 394
-f 384 385 395
-f 396 395 385
-f 385 386 396
-f 397 396 386
-f 386 387 397
-f 398 397 387
-f 387 388 399
-f 399 398 387
-f 399 389 400
-f 389 390 400
-f 391 392 400
-f 392 393 400
-f 393 394 400
-f 395 396 400
-f 396 397 400
-f 397 398 400
-f 398 399 400
-f 340 90 97
-f 341 97 342
-f 104 343 342
-f 97 104 342
-f 121 345 344
-f 344 104 121
-f 111 346 345
-f 345 121 111
-f 111 120 347
-f 346 111 347
-f 120 103 348
-f 347 120 348
-f 349 103 96
-f 350 349 96
-f 96 351 350
-f 351 96 352
-f 90 340 352
-f 96 90 352
-f 340 341 354
-f 341 340 97
-f 355 354 341
-f 354 355 366
-f 367 366 355
-f 366 367 378
-f 379 378 367
-f 378 379 391
-f 391 390 378
-f 390 391 400
-f 383 384 394
-f 395 394 384
-f 394 395 400
-f 404 6 405
-f 412 5 413
-f 414 401 424
-f 415 424 401
-f 401 402 415
-f 416 415 402
-f 402 403 416
-f 417 416 403
-f 403 404 417
-f 404 405 417
-f 418 417 405
-f 405 406 418
-f 406 407 418
-f 419 418 407
-f 420 419 407
-f 407 408 420
-f 421 420 408
-f 410 411 422
-f 423 422 411
-f 411 412 423
-f 412 413 423
-f 413 414 423
-f 424 423 414
-f 424 415 433
-f 425 433 415
-f 415 416 425
-f 426 425 416
-f 416 417 426
-f 427 426 417
-f 417 418 428
-f 428 427 417
-f 418 419 429
-f 429 428 418
-f 419 420 429
-f 420 421 430
-f 422 423 432
-f 432 431 422
-f 423 424 433
-f 433 432 423
-f 433 425 442
-f 434 442 425
-f 425 426 434
-f 435 434 426
-f 426 427 436
-f 436 435 426
-f 427 428 437
-f 437 436 427
-f 428 429 438
-f 438 437 428
-f 431 432 440
-f 441 440 432
-f 432 433 441
-f 442 441 433
-f 442 434 450
-f 435 436 443
-f 444 443 436
-f 436 437 445
-f 445 444 436
-f 437 438 446
-f 446 445 437
-f 440 441 448
-f 449 448 441
-f 441 442 449
-f 450 449 442
-f 443 444 451
-f 452 451 444
-f 444 445 452
-f 453 452 445
-f 445 446 453
-f 454 453 446
-f 448 449 457
-f 457 456 448
-f 449 450 458
-f 458 457 449
-f 451 452 459
-f 452 453 459
-f 453 454 459
-f 456 457 459
-f 457 458 459
-f 111 402 401
-f 401 120 111
-f 121 403 402
-f 402 111 121
-f 6 404 403
-f 403 121 6
-f 7 406 405
-f 405 6 7
-f 406 7 407
-f 15 408 407
-f 7 15 407
-f 410 409 14
-f 413 5 414
-f 120 401 414
-f 5 120 414
-f 408 409 421
-f 408 15 409
-f 409 15 14
-f 5 411 3
-f 411 5 412
-f 411 4 3
-f 411 14 4
-f 14 411 410
-f 409 410 421
-f 422 421 410
-f 430 429 420
-f 429 430 439
-f 421 422 430
-f 431 430 422
-f 439 438 429
-f 438 439 447
-f 430 431 439
-f 440 439 431
-f 434 435 450
-f 443 450 435
-f 447 446 438
-f 446 447 455
-f 439 440 447
-f 448 447 440
-f 447 448 456
-f 450 443 458
-f 451 458 443
-f 458 451 459
-f 455 454 446
-f 454 455 459
-f 456 455 447
-f 455 456 459
-f 461 462 469
-f 470 469 462
-f 472 471 463
-f 463 464 472
-f 473 472 464
-f 464 465 473
-f 465 466 473
-f 474 473 466
-f 467 468 477
-f 477 476 467
-f 478 477 468
-f 475 476 480
-f 480 479 475
-f 476 477 481
-f 481 480 476
-f 477 478 482
-f 482 481 477
-f 480 481 484
-f 484 483 480
-f 481 482 485
-f 485 484 481
-f 486 485 482
-f 149 130 460
-f 130 150 461
-f 460 130 461
-f 461 150 462
-f 463 159 464
-f 158 465 464
-f 159 158 464
-f 158 165 466
-f 465 158 466
-f 462 463 470
-f 463 462 150
-f 471 470 463
-f 150 159 463
-f 460 461 468
-f 469 468 461
-f 468 469 478
-f 478 486 482
-f 486 478 469
-f 469 470 486
-f 487 154 488
-f 487 488 498
-f 490 491 501
-f 491 492 501
-f 502 501 492
-f 492 493 502
-f 493 494 502
-f 503 502 494
-f 504 503 494
-f 494 495 504
-f 495 496 504
-f 505 504 496
-f 496 497 505
-f 498 499 507
-f 507 506 498
-f 501 502 514
-f 514 513 501
-f 502 503 515
-f 515 514 502
-f 503 504 516
-f 516 515 503
-f 504 505 517
-f 517 516 504
-f 506 507 518
-f 520 519 508
-f 521 520 508
-f 523 522 509
-f 510 511 524
-f 525 524 511
-f 513 514 528
-f 528 527 513
-f 514 515 529
-f 529 528 514
-f 515 516 530
-f 530 529 515
-f 516 517 531
-f 531 530 516
-f 520 521 535
-f 535 534 520
-f 521 522 535
-f 536 535 522
-f 522 523 536
-f 537 536 523
-f 524 525 539
-f 539 538 524
-f 527 528 541
-f 542 541 528
-f 528 529 542
-f 543 542 529
-f 529 530 544
-f 544 543 529
-f 530 531 544
-f 545 544 531
-f 532 533 546
-f 547 546 533
-f 534 535 549
-f 549 548 534
-f 535 536 549
-f 550 549 536
-f 536 537 551
-f 551 550 536
-f 541 542 554
-f 555 554 542
-f 542 543 555
-f 543 544 556
-f 544 545 556
-f 557 556 545
-f 546 547 558
-f 559 558 547
-f 548 549 561
-f 561 560 548
-f 549 550 562
-f 562 561 549
-f 550 551 563
-f 563 562 550
-f 564 563 551
-f 566 565 552
-f 554 555 568
-f 569 568 555
-f 571 570 556
-f 556 557 571
-f 572 571 557
-f 558 559 573
-f 574 573 559
-f 560 561 576
-f 576 575 560
-f 561 562 576
-f 577 576 562
-f 562 563 578
-f 578 577 562
-f 564 565 579
-f 565 566 580
-f 580 579 565
-f 568 569 582
-f 583 582 569
-f 569 570 583
-f 571 572 584
-f 585 584 572
-f 573 574 586
-f 575 576 586
-f 576 577 586
-f 577 578 586
-f 579 580 586
-f 582 583 586
-f 584 585 586
-f 137 138 489
-f 490 184 491
-f 172 492 491
-f 184 172 491
-f 172 494 493
-f 492 172 493
-f 171 495 494
-f 494 172 171
-f 163 496 495
-f 495 171 163
-f 496 163 497
-f 487 497 163
-f 163 154 487
-f 488 489 498
-f 488 154 489
-f 154 137 489
-f 499 498 489
-f 490 185 184
-f 501 500 490
-f 500 501 513
-f 497 487 505
-f 498 505 487
-f 505 498 506
-f 507 508 519
-f 512 511 500
-f 511 512 525
-f 513 512 500
-f 512 513 527
-f 506 517 505
-f 517 506 518
-f 519 518 507
-f 518 519 533
-f 533 532 518
-f 509 510 523
-f 524 523 510
-f 523 524 538
-f 526 525 512
-f 525 526 539
-f 527 526 512
-f 526 527 541
-f 518 531 517
-f 531 518 532
-f 519 520 533
-f 534 533 520
-f 538 537 523
-f 537 538 552
-f 540 539 526
-f 541 540 526
-f 540 541 554
-f 532 545 531
-f 533 534 547
-f 548 547 534
-f 552 551 537
-f 551 552 565
-f 565 564 551
-f 538 539 552
-f 539 540 552
-f 553 552 540
-f 554 553 540
-f 553 554 568
-f 556 555 543
-f 555 556 570
-f 570 569 555
-f 545 532 557
-f 546 557 532
-f 547 548 559
-f 560 559 548
-f 567 566 552
-f 552 553 567
-f 568 567 553
-f 567 568 582
-f 557 546 572
-f 558 572 546
-f 559 560 574
-f 575 574 560
-f 574 575 586
-f 563 564 578
-f 579 578 564
-f 578 579 586
-f 566 567 581
-f 581 580 566
-f 580 581 586
-f 582 581 567
-f 581 582 586
-f 570 571 583
-f 584 583 571
-f 583 584 586
-f 572 558 585
-f 573 585 558
-f 585 573 586
-f 588 483 589
-f 589 483 590
-f 592 486 593
-f 593 486 594
-f 597 473 598
-f 599 474 600
-f 600 474 601
-f 480 483 588
-f 590 483 484
-f 484 485 591
-f 485 486 592
-f 591 485 592
-f 594 486 470
-f 472 473 597
-f 596 472 597
-f 474 599 598
-f 598 473 474
-f 479 480 588
-f 587 479 588
-f 484 591 590
-f 596 471 472
-f 595 471 596
-f 595 470 471
-f 470 595 594
-f 587 588 602
-f 603 602 588
-f 588 589 603
-f 604 603 589
-f 589 590 604
-f 605 604 590
-f 590 591 605
-f 591 592 605
-f 606 605 592
-f 592 593 606
-f 593 594 606
-f 607 606 594
-f 594 595 607
-f 608 607 595
-f 595 596 608
-f 609 608 596
-f 596 597 609
-f 610 609 597
-f 597 598 610
-f 598 599 610
-f 611 610 599
-f 599 600 611
-f 600 601 611
-f 612 611 601
-f 615 602 616
-f 602 603 617
-f 617 616 602
-f 603 604 618
-f 618 617 603
-f 604 605 619
-f 619 618 604
-f 605 606 619
-f 620 619 606
-f 606 607 620
-f 621 620 607
-f 607 608 621
-f 622 621 608
-f 608 609 622
-f 623 622 609
-f 609 610 623
-f 624 623 610
-f 610 611 624
-f 625 624 611
-f 611 612 626
-f 626 625 611
-f 612 613 627
-f 627 626 612
-f 613 614 628
-f 628 627 613
-f 616 617 630
-f 630 629 616
-f 617 618 631
-f 631 630 617
-f 618 619 632
-f 632 631 618
-f 619 620 632
-f 633 632 620
-f 620 621 633
-f 634 633 621
-f 621 622 634
-f 635 634 622
-f 622 623 635
-f 636 635 623
-f 623 624 636
-f 637 636 624
-f 624 625 637
-f 638 637 625
-f 625 626 639
-f 639 638 625
-f 626 627 640
-f 640 639 626
-f 627 628 641
-f 641 640 627
-f 629 630 643
-f 643 642 629
-f 630 631 644
-f 644 643 630
-f 631 632 645
-f 645 644 631
-f 632 633 646
-f 646 645 632
-f 633 634 646
-f 647 646 634
-f 634 635 647
-f 648 647 635
-f 635 636 648
-f 649 648 636
-f 636 637 649
-f 650 649 637
-f 637 638 650
-f 651 650 638
-f 638 639 652
-f 652 651 638
-f 639 640 653
-f 653 652 639
-f 640 641 654
-f 654 653 640
-f 642 643 656
-f 656 655 642
-f 643 644 657
-f 657 656 643
-f 644 645 658
-f 658 657 644
-f 645 646 659
-f 659 658 645
-f 646 647 659
-f 660 659 647
-f 647 648 660
-f 661 660 648
-f 648 649 661
-f 662 661 649
-f 649 650 662
-f 663 662 650
-f 650 651 663
-f 664 663 651
-f 651 652 665
-f 665 664 651
-f 652 653 666
-f 666 665 652
-f 653 654 667
-f 667 666 653
-f 655 656 669
-f 669 668 655
-f 656 657 670
-f 670 669 656
-f 657 658 671
-f 671 670 657
-f 658 659 672
-f 672 671 658
-f 659 660 672
-f 673 672 660
-f 660 661 673
-f 674 673 661
-f 661 662 674
-f 675 674 662
-f 662 663 675
-f 676 675 663
-f 663 664 676
-f 677 676 664
-f 664 665 678
-f 678 677 664
-f 665 666 679
-f 679 678 665
-f 666 667 680
-f 680 679 666
-f 668 669 681
-f 669 670 681
-f 670 671 681
-f 671 672 681
-f 672 673 681
-f 673 674 681
-f 674 675 681
-f 675 676 681
-f 676 677 681
-f 677 678 681
-f 678 679 681
-f 679 680 681
-f 616 628 615
-f 628 616 629
-f 614 615 628
-f 629 641 628
-f 641 629 642
-f 642 654 641
-f 654 642 655
-f 655 667 654
-f 667 655 668
-f 668 680 667
-f 680 668 681
-f 682 178 683
-f 686 195 687
-f 691 690 682
-f 682 683 691
-f 684 685 693
-f 685 686 693
-f 694 693 686
-f 686 687 694
-f 695 694 687
-f 697 696 688
-f 700 699 689
-f 689 690 700
-f 701 700 690
-f 690 691 702
-f 702 701 690
-f 691 692 702
-f 703 702 692
-f 693 694 704
-f 705 704 694
-f 694 695 706
-f 706 705 694
-f 695 696 707
-f 707 706 695
-f 696 697 708
-f 708 707 696
-f 709 708 697
-f 717 698 737
-f 718 737 698
-f 698 699 719
-f 719 718 698
-f 699 700 719
-f 720 719 700
-f 700 701 720
-f 721 720 701
-f 701 702 722
-f 722 721 701
-f 702 703 723
-f 723 722 702
-f 704 705 724
-f 725 724 705
-f 705 706 726
-f 726 725 705
-f 706 707 727
-f 727 726 706
-f 707 708 728
-f 728 727 707
-f 708 709 729
-f 729 728 708
-f 709 710 730
-f 730 729 709
-f 710 711 731
-f 731 730 710
-f 712 713 732
-f 733 732 713
-f 713 714 733
-f 734 733 714
-f 714 715 734
-f 735 734 715
-f 715 716 735
-f 736 735 716
-f 737 718 758
-f 738 758 718
-f 718 719 738
-f 739 738 719
-f 719 720 739
-f 740 739 720
-f 720 721 740
-f 741 740 721
-f 721 722 741
-f 742 741 722
-f 722 723 742
-f 743 742 723
-f 724 725 745
-f 745 744 724
-f 725 726 746
-f 746 745 725
-f 726 727 747
-f 747 746 726
-f 727 728 748
-f 748 747 727
-f 728 729 749
-f 749 748 728
-f 729 730 750
-f 750 749 729
-f 730 731 751
-f 751 750 730
-f 732 733 752
-f 753 752 733
-f 733 734 753
-f 754 753 734
-f 734 735 754
-f 755 754 735
-f 735 736 755
-f 756 755 736
-f 758 757 737
-f 758 738 779
-f 759 779 738
-f 738 739 760
-f 760 759 738
-f 739 740 761
-f 761 760 739
-f 740 741 762
-f 762 761 740
-f 741 742 763
-f 763 762 741
-f 742 743 764
-f 764 763 742
-f 744 745 765
-f 766 765 745
-f 745 746 766
-f 767 766 746
-f 746 747 767
-f 768 767 747
-f 747 748 768
-f 769 768 748
-f 748 749 769
-f 770 769 749
-f 749 750 771
-f 771 770 749
-f 750 751 772
-f 772 771 750
-f 752 753 773
-f 774 773 753
-f 753 754 774
-f 775 774 754
-f 754 755 775
-f 776 775 755
-f 755 756 776
-f 777 776 756
-f 756 757 777
-f 778 777 757
-f 757 758 779
-f 779 778 757
-f 779 759 795
-f 760 761 780
-f 781 780 761
-f 761 762 781
-f 782 781 762
-f 762 763 782
-f 783 782 763
-f 763 764 784
-f 784 783 763
-f 765 766 786
-f 786 785 765
-f 766 767 787
-f 787 786 766
-f 767 768 788
-f 788 787 767
-f 768 769 789
-f 789 788 768
-f 769 770 790
-f 790 789 769
-f 770 771 791
-f 791 790 770
-f 771 772 792
-f 792 791 771
-f 775 776 793
-f 778 779 794
-f 795 794 779
-f 780 781 796
-f 781 782 796
-f 782 783 796
-f 783 784 796
-f 785 786 796
-f 786 787 796
-f 787 788 796
-f 788 789 796
-f 789 790 796
-f 790 791 796
-f 791 792 796
-f 794 795 796
-f 195 686 685
-f 687 195 217
-f 682 177 178
-f 682 194 177
-f 690 689 682
-f 683 684 691
-f 692 691 684
-f 167 168 684
-f 168 169 684
-f 684 178 167
-f 683 178 684
-f 179 684 169
-f 684 179 195
-f 684 195 685
-f 687 688 695
-f 688 687 217
-f 696 695 688
-f 693 692 684
-f 692 693 704
-f 704 703 692
-f 703 704 724
-f 711 712 732
-f 724 723 703
-f 723 724 744
-f 732 731 711
-f 731 732 752
-f 716 717 736
-f 737 736 717
-f 736 737 757
-f 757 756 736
-f 744 743 723
-f 743 744 765
-f 752 751 731
-f 751 752 773
-f 765 764 743
-f 764 765 785
-f 773 772 751
-f 759 760 795
-f 780 795 760
-f 795 780 796
-f 785 784 764
-f 784 785 796
-f 772 773 792
-f 793 792 773
-f 773 774 793
-f 774 775 793
-f 792 793 796
-f 794 793 776
-f 793 794 796
-f 776 777 794
-f 777 778 794
-f 797 195 798
-f 800 180 801
-f 807 797 817
-f 808 817 797
-f 809 808 797
-f 797 798 809
-f 810 809 798
-f 798 799 810
-f 799 800 810
-f 811 810 800
-f 800 801 811
-f 812 811 801
-f 814 813 803
-f 803 804 814
-f 815 814 804
-f 817 808 833
-f 818 833 808
-f 808 809 819
-f 819 818 808
-f 809 810 820
-f 820 819 809
-f 810 811 820
-f 821 820 811
-f 811 812 822
-f 822 821 811
-f 813 814 823
-f 824 823 814
-f 814 815 824
-f 825 824 815
-f 832 831 816
-f 833 818 849
-f 834 849 818
-f 818 819 835
-f 835 834 818
-f 819 820 836
-f 836 835 819
-f 820 821 836
-f 837 836 821
-f 821 822 838
-f 838 837 821
-f 823 824 840
-f 840 839 823
-f 824 825 841
-f 841 840 824
-f 825 826 841
-f 842 841 826
-f 826 827 843
-f 843 842 826
-f 827 828 844
-f 844 843 827
-f 828 829 845
-f 845 844 828
-f 829 830 846
-f 846 845 829
-f 830 831 846
-f 847 846 831
-f 831 832 847
-f 848 847 832
-f 849 834 865
-f 850 865 834
-f 834 835 851
-f 851 850 834
-f 835 836 852
-f 852 851 835
-f 836 837 852
-f 853 852 837
-f 839 840 856
-f 856 855 839
-f 840 841 857
-f 857 856 840
-f 841 842 858
-f 858 857 841
-f 842 843 859
-f 859 858 842
-f 843 844 860
-f 860 859 843
-f 844 845 861
-f 861 860 844
-f 845 846 861
-f 862 861 846
-f 846 847 862
-f 863 862 847
-f 847 848 863
-f 864 863 848
-f 865 850 866
-f 866 881 865
-f 850 851 867
-f 867 866 850
-f 851 852 868
-f 868 867 851
-f 852 853 868
-f 869 868 853
-f 870 869 853
-f 855 856 871
-f 872 871 856
-f 856 857 872
-f 873 872 857
-f 857 858 873
-f 874 873 858
-f 858 859 874
-f 875 874 859
-f 859 860 876
-f 876 875 859
-f 860 861 877
-f 877 876 860
-f 861 862 878
-f 878 877 861
-f 862 863 878
-f 879 878 863
-f 863 864 880
-f 880 879 863
-f 881 866 897
-f 882 897 866
-f 866 867 883
-f 883 882 866
-f 867 868 883
-f 884 883 868
-f 868 869 884
-f 885 884 869
-f 871 872 887
-f 888 887 872
-f 872 873 889
-f 889 888 872
-f 873 874 889
-f 890 889 874
-f 874 875 891
-f 891 890 874
-f 875 876 892
-f 892 891 875
-f 876 877 893
-f 893 892 876
-f 877 878 894
-f 894 893 877
-f 878 879 894
-f 895 894 879
-f 879 880 895
-f 896 895 880
-f 897 882 898
-f 898 913 897
-f 882 883 899
-f 899 898 882
-f 883 884 899
-f 900 899 884
-f 884 885 900
-f 901 900 885
-f 902 901 885
-f 887 888 903
-f 904 903 888
-f 888 889 904
-f 905 904 889
-f 889 890 905
-f 906 905 890
-f 890 891 907
-f 907 906 890
-f 891 892 908
-f 908 907 891
-f 892 893 909
-f 909 908 892
-f 893 894 910
-f 910 909 893
-f 894 895 910
-f 911 910 895
-f 895 896 911
-f 912 911 896
-f 913 898 914
-f 898 899 914
-f 899 900 914
-f 900 901 914
-f 901 902 914
-f 903 904 914
-f 904 905 914
-f 905 906 914
-f 906 907 914
-f 907 908 914
-f 908 909 914
-f 909 910 914
-f 910 911 914
-f 911 912 914
-f 798 195 179
-f 180 800 799
-f 799 798 179
-f 179 180 799
-f 171 181 802
-f 181 196 804
-f 803 181 804
-f 806 217 807
-f 195 797 807
-f 217 195 807
-f 802 180 171
-f 801 180 802
-f 802 803 813
-f 802 181 803
-f 805 217 806
-f 801 802 812
-f 813 812 802
-f 812 813 823
-f 805 806 816
-f 806 807 816
-f 817 816 807
-f 823 822 812
-f 822 823 839
-f 816 817 832
-f 833 832 817
-f 839 838 822
-f 838 839 855
-f 855 854 838
-f 832 833 848
-f 849 848 833
-f 837 838 854
-f 854 853 837
-f 853 854 870
-f 848 849 864
-f 865 864 849
-f 864 865 881
-f 854 855 870
-f 871 870 855
-f 870 871 887
-f 887 886 870
-f 881 880 864
-f 880 881 897
-f 869 870 886
-f 886 885 869
-f 885 886 902
-f 897 896 880
-f 896 897 913
-f 886 887 902
-f 903 902 887
-f 902 903 914
-f 913 912 896
-f 912 913 914
-f 926 216 927
-f 915 916 930
-f 931 930 916
-f 932 931 916
-f 916 917 932
-f 933 932 917
-f 917 918 933
-f 934 933 918
-f 918 919 934
-f 935 934 919
-f 919 920 935
-f 936 935 920
-f 920 921 936
-f 921 922 936
-f 937 936 922
-f 922 923 937
-f 938 937 923
-f 923 924 938
-f 924 925 938
-f 939 938 925
-f 926 927 941
-f 927 928 941
-f 942 941 928
-f 928 929 942
-f 943 942 929
-f 943 930 956
-f 944 956 930
-f 930 931 944
-f 945 944 931
-f 931 932 946
-f 946 945 931
-f 932 933 947
-f 947 946 932
-f 933 934 948
-f 948 947 933
-f 934 935 949
-f 949 948 934
-f 936 937 950
-f 937 938 951
-f 951 950 937
-f 938 939 952
-f 952 951 938
-f 939 940 952
-f 953 952 940
-f 940 941 953
-f 954 953 941
-f 941 942 954
-f 955 954 942
-f 942 943 955
-f 956 955 943
-f 956 944 969
-f 957 969 944
-f 944 945 957
-f 958 957 945
-f 945 946 959
-f 959 958 945
-f 946 947 960
-f 960 959 946
-f 947 948 961
-f 961 960 947
-f 948 949 962
-f 962 961 948
-f 950 951 964
-f 964 963 950
-f 951 952 965
-f 965 964 951
-f 952 953 965
-f 966 965 953
-f 953 954 966
-f 967 966 954
-f 954 955 967
-f 968 967 955
-f 955 956 968
-f 969 968 956
-f 969 957 982
-f 970 982 957
-f 957 958 970
-f 971 970 958
-f 958 959 972
-f 972 971 958
-f 959 960 973
-f 973 972 959
-f 960 961 974
-f 974 973 960
-f 961 962 975
-f 975 974 961
-f 963 964 977
-f 977 976 963
-f 964 965 978
-f 978 977 964
-f 965 966 978
-f 979 978 966
-f 966 967 979
-f 980 979 967
-f 967 968 980
-f 981 980 968
-f 968 969 981
-f 982 981 969
-f 982 970 983
-f 970 971 983
-f 971 972 983
-f 972 973 983
-f 973 974 983
-f 974 975 983
-f 976 977 983
-f 977 978 983
-f 978 979 983
-f 979 980 983
-f 980 981 983
-f 981 982 983
-f 915 203 188
-f 916 915 188
-f 188 189 916
-f 917 916 189
-f 189 918 917
-f 189 204 919
-f 918 189 919
-f 216 210 928
-f 927 216 928
-f 928 210 929
-f 210 203 929
-f 203 915 929
-f 929 915 943
-f 930 943 915
-f 222 216 926
-f 941 940 926
-f 939 925 227
-f 940 222 926
-f 227 222 940
-f 940 939 227
-f 935 936 949
-f 950 949 936
-f 949 950 963
-f 963 962 949
-f 962 963 976
-f 976 975 962
-f 975 976 983
-f 985 242 986
-f 987 805 988
-f 992 263 993
-f 995 996 997
-f 984 997 996
-f 985 998 984
-f 997 984 998
-f 998 985 986
-f 989 999 988
-f 988 999 987
-f 998 987 999
-f 994 995 1000
-f 997 1000 995
-f 993 1000 992
-f 998 1001 997
-f 1000 997 1001
-f 258 242 985
-f 984 258 985
-f 816 989 988
-f 988 805 816
-f 831 830 990
-f 830 829 991
-f 993 263 252
-f 258 984 996
-f 995 258 996
-f 987 217 805
-f 986 987 998
-f 986 242 987
-f 242 217 987
-f 990 999 989
-f 989 816 990
-f 816 831 990
-f 990 991 999
-f 990 830 991
-f 994 1000 993
-f 252 994 993
-f 1003 1004 1002
-f 1003 1005 1004
-f 252 255 1002
-f 249 1003 1002
-f 1002 255 249
-f 1008 713 1009
-f 1011 1005 1012
-f 1014 249 1015
-f 1015 249 1016
-f 1013 1021 1012
-f 1012 1021 1011
-f 1016 1022 1015
-f 1015 1022 1014
-f 1021 1013 1022
-f 1022 1023 1021
-f 1018 1021 1023
-f 1018 1023 1017
-f 1006 1007 1024
-f 1025 1018 1017
-f 1009 1010 1026
-f 1026 1019 1024
-f 1009 1026 1008
-f 1024 1007 1026
-f 1017 1027 1025
-f 1027 1019 1025
-f 1028 1019 1027
-f 1029 1017 1020
-f 1017 1029 1027
-f 1028 1027 1029
-f 1024 1031 1030
-f 1028 1031 1019
-f 1031 1024 1019
-f 714 1007 1006
-f 1006 715 714
-f 712 1010 1009
-f 1009 713 712
-f 1003 1013 1012
-f 1012 1005 1003
-f 1016 249 254
-f 716 715 1006
-f 1024 1030 1006
-f 1008 714 713
-f 1007 714 1008
-f 1008 1026 1007
-f 1014 1022 1013
-f 1013 1003 1014
-f 1003 249 1014
-f 1032 256 1033
-f 1036 1000 1037
-f 1038 1001 1039
-f 1039 1001 1040
-f 1042 999 1043
-f 1043 999 1044
-f 1047 243 1048
-f 1048 243 1049
-f 1051 250 1052
-f 1032 1054 1055
-f 1053 1054 1056
-f 1033 1056 1032
-f 1054 1032 1056
-f 1035 1058 1034
-f 1034 1058 1033
-f 1056 1033 1058
-f 1059 1051 1052
-f 1056 1059 1053
-f 1052 1053 1059
-f 1049 1060 1048
-f 1048 1060 1047
-f 1059 1060 1051
-f 1050 1051 1060
-f 1061 1036 1037
-f 1038 1062 1037
-f 1037 1062 1061
-f 1057 1061 1062
-f 1057 1063 1060
-f 1060 1063 1047
-f 1039 1064 1038
-f 1062 1038 1064
-f 1064 1039 1040
-f 1040 1041 1064
-f 1065 1044 1045
-f 1044 1065 1043
-f 1042 1043 1065
-f 1064 1041 1065
-f 1042 1065 1041
-f 1066 1060 1059
-f 1058 1066 1056
-f 1059 1056 1066
-f 1066 1058 1061
-f 1061 1057 1066
-f 1060 1066 1057
-f 1063 1057 1067
-f 1062 1067 1057
-f 1067 1062 1064
-f 262 1034 1033
-f 1033 256 262
-f 262 263 1035
-f 1034 262 1035
-f 992 1000 1036
-f 1000 1001 1038
-f 1037 1000 1038
-f 1001 998 1041
-f 1040 1001 1041
-f 998 999 1042
-f 1041 998 1042
-f 991 1045 1044
-f 1044 999 991
-f 1045 991 829
-f 1049 243 244
-f 250 1051 1050
-f 1050 245 250
-f 251 1053 1052
-f 1052 250 251
-f 260 1054 1053
-f 1053 251 260
-f 1054 260 1055
-f 256 1032 1055
-f 260 256 1055
-f 263 992 1036
-f 1058 1036 1061
-f 1035 263 1036
-f 1036 1058 1035
-f 1046 829 828
-f 1045 1046 1065
-f 1045 829 1046
-f 1050 1060 1049
-f 244 1050 1049
-f 1050 244 245
-f 1068 142 1069
-f 1070 155 1071
-f 1075 173 1076
-f 1077 1075 1076
-f 1071 1078 1070
-f 1069 1070 1078
-f 1069 1078 1068
-f 1071 1072 1078
-f 1079 1073 1074
-f 1077 1079 1075
-f 1074 1075 1079
-f 1079 1077 1078
-f 1078 1072 1079
-f 1073 1079 1072
-f 141 142 1068
-f 155 1070 1069
-f 1069 142 155
-f 1071 155 164
-f 1072 1071 164
-f 164 1073 1072
-f 164 174 1074
-f 1073 164 1074
-f 174 173 1075
-f 1074 174 1075
-f 1081 510 1082
-f 1082 510 1083
-f 1087 1077 1088
-f 1090 173 1091
-f 1096 490 1097
-f 1097 490 1098
-f 1080 1081 1099
-f 1097 1098 1100
-f 1098 1099 1100
-f 1083 1100 1082
-f 1082 1100 1081
-f 1099 1081 1100
-f 1085 1101 1084
-f 1100 1084 1101
-f 1095 1096 1101
-f 1096 1097 1101
-f 1100 1101 1097
-f 1102 1092 1093
-f 1087 1103 1086
-f 1101 1104 1095
-f 1091 1092 1105
-f 1102 1105 1092
-f 1091 1105 1090
-f 1089 1090 1105
-f 1089 1105 1088
-f 1103 1087 1105
-f 1088 1105 1087
-f 1105 1106 1103
-f 1104 1101 1106
-f 1103 1106 1101
-f 1104 1106 1102
-f 1106 1105 1102
-f 510 1081 1080
-f 1080 511 510
-f 1083 510 509
-f 1077 1087 1086
-f 1077 1076 1089
-f 1088 1077 1089
-f 1076 173 1090
-f 1089 1076 1090
-f 173 187 1092
-f 1091 173 1092
-f 187 186 1093
-f 1092 187 1093
-f 1094 186 185
-f 490 1096 1095
-f 1095 185 490
-f 500 1099 1098
-f 1098 490 500
-f 1084 1100 1083
-f 509 1084 1083
-f 1094 1102 1093
-f 1093 186 1094
-f 1102 1094 1104
-f 1104 1094 1095
-f 1095 1094 185
-f 1099 500 1080
-f 500 511 1080
-f 1108 499 1109
-f 1112 139 1113
-f 1113 139 1114
-f 1115 140 1116
-f 1116 140 1117
-f 1118 1068 1119
-f 1120 1078 1121
-f 1123 1101 1124
-f 1127 509 1128
-f 1108 1109 1111
-f 1109 1110 1111
-f 1108 1111 1112
-f 1130 1132 1129
-f 1129 1132 1128
-f 1127 1128 1132
-f 1121 1133 1120
-f 1119 1120 1133
-f 1134 1123 1124
-f 1124 1125 1134
-f 1126 1127 1134
-f 1132 1134 1127
-f 1132 1107 1135
-f 1136 1116 1117
-f 1133 1136 1119
-f 1118 1119 1136
-f 1134 1137 1123
-f 1133 1122 1137
-f 1115 1116 1138
-f 1136 1138 1116
-f 1115 1138 1114
-f 1114 1138 1113
-f 1113 1138 1112
-f 1108 1112 1138
-f 1134 1139 1137
-f 1136 1133 1139
-f 1137 1139 1133
-f 1139 1134 1132
-f 1136 1139 1138
-f 1132 1135 1139
-f 1138 1139 1135
-f 507 499 1108
-f 499 489 1110
-f 1109 499 1110
-f 138 1111 1110
-f 1110 489 138
-f 139 1112 1111
-f 1111 138 139
-f 140 1115 1114
-f 1114 139 140
-f 1117 140 141
-f 1068 1078 1120
-f 1119 1068 1120
-f 1122 1077 1086
-f 1085 1125 1124
-f 1124 1101 1085
-f 1085 1084 1126
-f 1084 509 1127
-f 1126 1084 1127
-f 509 522 1129
-f 1128 509 1129
-f 522 521 1130
-f 1129 522 1130
-f 508 1107 1131
-f 521 508 1131
-f 508 507 1108
-f 1135 1108 1138
-f 1107 508 1108
-f 1108 1135 1107
-f 1117 1118 1136
-f 141 1118 1117
-f 1118 141 1068
-f 1122 1133 1121
-f 1121 1078 1122
-f 1078 1077 1122
-f 1086 1137 1122
-f 1123 1103 1101
-f 1103 1123 1086
-f 1123 1137 1086
-f 1125 1126 1134
-f 1125 1085 1126
-f 1130 1131 1132
-f 1130 521 1131
-f 1107 1132 1131
-f 1141 613 1142
-f 1144 601 1145
-f 1147 466 1148
-f 1140 1141 1144
-f 1141 1142 1144
-f 1142 1143 1144
-f 1140 1144 1145
-f 613 1141 1140
-f 1140 614 613
-f 612 601 1144
-f 1143 612 1144
-f 601 474 1146
-f 1145 601 1146
-f 474 466 1147
-f 1146 474 1147
-f 466 165 1149
-f 1148 466 1149
-f 1140 1145 1146
-f 1142 613 1143
-f 613 612 1143
-f 1154 467 1155
-f 1151 1152 1153
-f 149 460 1152
-f 1151 149 1152
-f 468 1153 1152
-f 1152 460 468
-f 467 476 1156
-f 1155 467 1156
-f 1153 468 1154
-f 468 467 1154
-f 1159 1149 1160
-f 1161 165 1162
-f 1165 191 1166
-f 1165 1168 1164
-f 1168 1163 1164
-f 1169 1161 1162
-f 1162 1163 1169
-f 1168 1169 1163
-f 1168 1170 1169
-f 1166 1167 1170
-f 1166 1170 1165
-f 1168 1165 1170
-f 1161 1171 1160
-f 1171 1161 1169
-f 1169 1170 1171
-f 1149 165 1161
-f 1160 1149 1161
-f 176 1163 1162
-f 1162 165 176
-f 192 1164 1163
-f 1163 176 192
-f 192 191 1165
-f 1164 192 1165
-f 191 190 1167
-f 1166 191 1167
-f 1173 475 1174
-f 1174 475 1175
-f 1175 475 1176
-f 1176 475 1177
-f 1177 475 1178
-f 1183 1157 1184
-f 1184 1157 1185
-f 1183 1184 1185
-f 1181 1182 1187
-f 1176 1177 1190
-f 1186 1190 1178
-f 1177 1178 1190
-f 1176 1190 1175
-f 1175 1190 1174
-f 1187 1191 1181
-f 1186 1192 1190
-f 476 475 1173
-f 1172 476 1173
-f 1178 475 479
-f 587 602 1179
-f 615 1180 1179
-f 1179 602 615
-f 1158 1157 1183
-f 1182 1158 1183
-f 1179 479 587
-f 479 1179 1178
-f 1178 1179 1186
-f 1193 1189 1194
-f 1195 1188 1196
-f 1197 1186 1198
-f 1201 1140 1202
-f 1206 1148 1207
-f 1209 1159 1210
-f 1212 1171 1213
-f 1214 1170 1215
-f 1216 1167 1217
-f 1219 175 1220
-f 1223 1158 1224
-f 1227 1191 1228
-f 1201 1202 1203
-f 1194 1229 1193
-f 1207 1229 1206
-f 1230 1196 1197
-f 1199 1230 1198
-f 1197 1198 1230
-f 1205 1231 1204
-f 1200 1231 1230
-f 1227 1228 1232
-f 1229 1232 1228
-f 1209 1232 1208
-f 1229 1207 1232
-f 1208 1232 1207
-f 1221 1234 1220
-f 1217 1218 1234
-f 1218 1219 1234
-f 1220 1234 1219
-f 1195 1196 1235
-f 1230 1235 1196
-f 1229 1194 1235
-f 1195 1235 1194
-f 1235 1230 1231
-f 1213 1236 1212
-f 1212 1236 1211
-f 1232 1209 1236
-f 1210 1236 1209
-f 1237 1224 1225
-f 1225 1226 1237
-f 1232 1237 1227
-f 1234 1238 1217
-f 1216 1217 1238
-f 1216 1238 1215
-f 1233 1214 1238
-f 1215 1238 1214
-f 1222 1239 1221
-f 1234 1221 1239
-f 1234 1239 1238
-f 1233 1238 1239
-f 1239 1222 1223
-f 1236 1240 1232
-f 1233 1240 1214
-f 1236 1213 1240
-f 1241 1233 1239
-f 1237 1241 1224
-f 1239 1223 1241
-f 1224 1241 1223
-f 1233 1241 1240
-f 1240 1241 1232
-f 1237 1232 1241
-f 1188 1195 1194
-f 1194 1189 1188
-f 1179 1199 1198
-f 1198 1186 1179
-f 1199 1179 1180
-f 1200 614 1140
-f 1202 1140 1203
-f 1140 1146 1203
-f 1146 1147 1205
-f 1204 1146 1205
-f 1147 1148 1206
-f 1149 1208 1207
-f 1207 1148 1149
-f 1159 1209 1208
-f 1208 1149 1159
-f 1160 1171 1212
-f 1211 1160 1212
-f 1171 1170 1214
-f 1167 1216 1215
-f 1215 1170 1167
-f 1167 190 1218
-f 1217 1167 1218
-f 190 175 1219
-f 1218 190 1219
-f 1158 1223 1222
-f 1182 1225 1224
-f 1224 1158 1182
-f 1181 1226 1225
-f 1225 1182 1181
-f 1181 1191 1227
-f 1196 1192 1197
-f 1196 1188 1192
-f 1186 1197 1192
-f 1199 1180 1230
-f 1200 615 614
-f 1180 615 1200
-f 1200 1230 1180
-f 1203 1146 1204
-f 1204 1231 1203
-f 1205 1206 1231
-f 1205 1147 1206
-f 1229 1235 1206
-f 1231 1206 1235
-f 1211 1236 1210
-f 1210 1159 1211
-f 1211 1159 1160
-f 1214 1240 1213
-f 1213 1171 1214
-f 1226 1227 1237
-f 1226 1181 1227
-f 1193 1229 1228
-f 1228 1191 1193
-f 1191 1189 1193
-f 1242 164 1243
-f 1244 1157 1245
-f 1246 1158 1247
-f 1249 175 1250
-f 1243 1255 1242
-f 1253 1254 1255
-f 1242 1255 1254
-f 1252 1256 1251
-f 1256 1250 1251
-f 1245 1258 1244
-f 1259 1248 1249
-f 1256 1259 1250
-f 1249 1250 1259
-f 1260 1256 1252
-f 1255 1260 1253
-f 1252 1253 1260
-f 1257 1261 1243
-f 1261 1255 1243
-f 1259 1262 1248
-f 1247 1262 1246
-f 1258 1245 1262
-f 1246 1262 1245
-f 1260 1263 1256
-f 1263 1259 1256
-f 1259 1263 1262
-f 1263 1264 1262
-f 1261 1257 1264
-f 1264 1263 1260
-f 1261 1264 1255
-f 1260 1255 1264
-f 1158 1246 1245
-f 1245 1157 1158
-f 1247 1158 1222
-f 1221 1220 1248
-f 1220 175 1249
-f 1248 1220 1249
-f 175 189 1251
-f 1250 175 1251
-f 1251 189 1252
-f 1253 1252 189
-f 189 174 1253
-f 1253 174 1254
-f 1242 1254 174
-f 174 164 1242
-f 1200 1201 1231
-f 1140 1201 1200
-f 1203 1231 1201
-f 1222 1221 1248
-f 1247 1248 1262
-f 1222 1248 1247
-f 1267 1065 1268
-f 1268 1065 1269
-f 1274 815 1275
-f 1275 815 1276
-f 1277 196 1278
-f 1279 197 1280
-f 1280 197 1281
-f 1284 212 1285
-f 1286 218 1287
-f 1291 1063 1292
-f 1268 1269 1294
-f 1270 1294 1269
-f 1296 1266 1267
-f 1267 1268 1296
-f 1294 1296 1268
-f 1297 1274 1275
-f 1275 1276 1297
-f 1274 1297 1273
-f 1265 1266 1298
-f 1296 1298 1266
-f 1295 1299 1297
-f 1299 1295 1298
-f 1294 1299 1296
-f 1298 1296 1299
-f 1295 1300 1298
-f 1290 1291 1300
-f 1291 1292 1300
-f 1292 1293 1300
-f 1298 1300 1293
-f 1282 1301 1281
-f 1280 1281 1301
-f 1282 1283 1301
-f 1302 1297 1299
-f 1299 1294 1302
-f 1294 1271 1302
-f 1297 1302 1273
-f 1303 1287 1288
-f 1288 1289 1303
-f 1304 1278 1279
-f 1279 1280 1304
-f 1301 1304 1280
-f 1297 1277 1304
-f 1278 1304 1277
-f 1297 1304 1295
-f 1301 1295 1304
-f 1301 1305 1295
-f 1305 1300 1295
-f 1300 1305 1303
-f 1306 1303 1305
-f 1305 1301 1306
-f 1283 1306 1301
-f 1285 1286 1306
-f 1286 1287 1306
-f 1303 1306 1287
-f 1285 1306 1284
-f 1283 1284 1306
-f 1064 1266 1265
-f 1265 1067 1064
-f 1064 1065 1267
-f 1266 1064 1267
-f 1046 1270 1269
-f 1269 1065 1046
-f 1272 827 826
-f 815 1274 1273
-f 1273 825 815
-f 1276 815 804
-f 196 197 1279
-f 1278 196 1279
-f 198 1282 1281
-f 1281 197 198
-f 198 206 1283
-f 1282 198 1283
-f 206 212 1284
-f 1283 206 1284
-f 212 218 1286
-f 1285 212 1286
-f 244 1288 1287
-f 1287 218 244
-f 243 1289 1288
-f 1288 244 243
-f 1063 1291 1290
-f 1290 1047 1063
-f 1067 1293 1292
-f 1292 1063 1067
-f 1271 828 827
-f 1046 828 1271
-f 1270 1271 1294
-f 1270 1046 1271
-f 1271 827 1272
-f 1302 1271 1272
-f 1272 1273 1302
-f 826 1273 1272
-f 1273 826 825
-f 1276 804 1297
-f 804 1277 1297
-f 196 1277 804
-f 1289 1290 1303
-f 1289 243 1290
-f 1290 243 1047
-f 1300 1303 1290
-f 1265 1298 1293
-f 1293 1067 1265
-f 1307 689 1308
-f 1309 699 1310
-f 1315 1030 1316
-f 1316 1030 1317
-f 1318 1031 1319
-f 1322 211 1323
-f 1324 194 1325
-f 1308 1328 1307
-f 1328 1308 1329
-f 1328 1329 1327
-f 1326 1327 1329
-f 1310 1311 1331
-f 1311 1312 1331
-f 1310 1331 1309
-f 1309 1331 1308
-f 1329 1308 1331
-f 1332 1316 1317
-f 1317 1318 1332
-f 1318 1319 1332
-f 1316 1332 1315
-f 1315 1332 1314
-f 1326 1333 1325
-f 1330 1324 1333
-f 1325 1333 1324
-f 1333 1326 1329
-f 1320 1334 1319
-f 1330 1332 1334
-f 1319 1334 1332
-f 1335 1329 1331
-f 1332 1335 1314
-f 1335 1332 1330
-f 1330 1333 1335
-f 1329 1335 1333
-f 689 699 1309
-f 1308 689 1309
-f 698 1311 1310
-f 1310 699 698
-f 717 1312 1311
-f 1311 698 717
-f 717 716 1313
-f 1312 717 1313
-f 1313 716 1006
-f 1030 1315 1314
-f 1314 1006 1030
-f 1031 1318 1317
-f 1317 1030 1031
-f 1028 1320 1319
-f 1319 1031 1028
-f 194 1324 1323
-f 1323 211 194
-f 1325 194 1326
-f 1327 1326 194
-f 1307 1328 682
-f 689 1307 682
-f 1327 682 1328
-f 682 1327 194
-f 1006 1314 1313
-f 1314 1331 1312
-f 1312 1313 1314
-f 1331 1314 1335
-f 1321 1028 1029
-f 1334 1320 1321
-f 1320 1028 1321
-f 1337 710 1338
-f 1341 697 1342
-f 1344 217 1345
-f 1346 242 1347
-f 1348 258 1349
-f 1349 258 1350
-f 1350 258 1351
-f 1354 252 1355
-f 1355 252 1356
-f 1357 1004 1358
-f 1359 1005 1360
-f 1360 1005 1361
-f 1363 1021 1364
-f 1366 1025 1367
-f 1367 1025 1368
-f 1373 712 1374
-f 1340 1341 1342
-f 1340 1342 1343
-f 1370 1371 1372
-f 1343 1376 1340
-f 1340 1376 1339
-f 1338 1339 1376
-f 1348 1377 1347
-f 1344 1345 1377
-f 1345 1346 1377
-f 1347 1377 1346
-f 1356 1378 1355
-f 1354 1355 1378
-f 1380 1336 1337
-f 1337 1338 1380
-f 1376 1380 1338
-f 1353 1354 1381
-f 1378 1381 1354
-f 1360 1382 1359
-f 1359 1382 1358
-f 1358 1382 1357
-f 1365 1366 1383
-f 1366 1367 1383
-f 1385 1369 1370
-f 1385 1379 1383
-f 1369 1385 1368
-f 1383 1367 1385
-f 1368 1385 1367
-f 1386 1379 1385
-f 1372 1373 1386
-f 1374 1386 1373
-f 1385 1370 1386
-f 1372 1386 1370
-f 1387 1376 1343
-f 1387 1379 1386
-f 1376 1387 1380
-f 1388 1351 1352
-f 1381 1388 1353
-f 1352 1353 1388
-f 1382 1360 1389
-f 1361 1389 1360
-f 1389 1361 1362
-f 1362 1363 1389
-f 1363 1364 1389
-f 1383 1389 1365
-f 1364 1365 1389
-f 1390 1378 1382
-f 1383 1390 1389
-f 1382 1389 1390
-f 1348 1391 1377
-f 1391 1348 1349
-f 1349 1350 1391
-f 1350 1351 1391
-f 1351 1388 1391
-f 1392 1344 1377
-f 1384 1392 1391
-f 1377 1391 1392
-f 1344 1392 1343
-f 1343 1392 1387
-f 1393 1378 1390
-f 1378 1393 1381
-f 1381 1393 1388
-f 1388 1393 1391
-f 1384 1391 1393
-f 1394 1379 1387
-f 1387 1392 1394
-f 1384 1394 1392
-f 1394 1384 1393
-f 1395 1336 1380
-f 1386 1395 1387
-f 1380 1387 1395
-f 1386 1374 1395
-f 1396 1379 1394
-f 1394 1393 1396
-f 1390 1396 1393
-f 1379 1396 1383
-f 1396 1390 1383
-f 711 710 1337
-f 1336 711 1337
-f 709 1339 1338
-f 1338 710 709
-f 1339 709 697
-f 1340 1339 697
-f 697 1341 1340
-f 697 688 1343
-f 1342 697 1343
-f 688 217 1344
-f 1343 688 1344
-f 217 242 1346
-f 1345 217 1346
-f 242 258 1348
-f 1347 242 1348
-f 995 1352 1351
-f 1351 258 995
-f 994 1353 1352
-f 1352 995 994
-f 994 252 1354
-f 1353 994 1354
-f 1356 252 1002
-f 1002 1004 1357
-f 1004 1005 1359
-f 1358 1004 1359
-f 1011 1362 1361
-f 1361 1005 1011
-f 1011 1021 1363
-f 1362 1011 1363
-f 1018 1365 1364
-f 1364 1021 1018
-f 1018 1025 1366
-f 1365 1018 1366
-f 1019 1369 1368
-f 1368 1025 1019
-f 1026 1370 1369
-f 1369 1019 1026
-f 1010 1372 1371
-f 1371 1026 1010
-f 1010 712 1373
-f 1372 1010 1373
-f 711 1336 1375
-f 1357 1378 1356
-f 1002 1357 1356
-f 1378 1357 1382
-f 1370 1026 1371
-f 1375 1395 1374
-f 1374 712 1375
-f 712 711 1375
-f 1375 1336 1395
-f 1400 157 1401
-f 1403 1150 1404
-f 1406 1151 1407
-f 1410 1155 1411
-f 1413 1156 1414
-f 1416 1172 1417
-f 1420 1190 1421
-f 1422 1192 1423
-f 1424 1188 1425
-f 1426 1189 1427
-f 1429 1187 1430
-f 1432 1185 1433
-f 1433 1185 1434
-f 1437 1258 1438
-f 1438 1258 1439
-f 1441 1257 1442
-f 1397 1445 1446
-f 1409 1450 1408
-f 1408 1450 1407
-f 1406 1407 1450
-f 1442 1451 1441
-f 1448 1452 1447
-f 1453 1448 1447
-f 1447 1445 1453
-f 1448 1453 1454
-f 1453 1398 1454
-f 1444 1461 1455
-f 1452 1448 1461
-f 1443 1444 1462
-f 1455 1462 1444
-f 1463 1428 1429
-f 1429 1430 1463
-f 1464 1456 1463
-f 1463 1430 1464
-f 1431 1464 1430
-f 1437 1465 1436
-f 1456 1464 1465
-f 1436 1465 1435
-f 1435 1465 1434
-f 1434 1465 1433
-f 1433 1465 1432
-f 1465 1437 1438
-f 1462 1455 1467
-f 1454 1399 1468
-f 1457 1469 1468
-f 1448 1454 1469
-f 1468 1469 1454
-f 1470 1449 1466
-f 1409 1471 1450
-f 1472 1403 1404
-f 1458 1472 1471
-f 1458 1473 1472
-f 1474 1449 1470
-f 1417 1418 1475
-f 1418 1419 1475
-f 1420 1475 1419
-f 1417 1475 1416
-f 1416 1475 1415
-f 1475 1420 1421
-f 1411 1476 1410
-f 1471 1410 1476
-f 1459 1476 1475
-f 1413 1476 1412
-f 1413 1414 1476
-f 1414 1415 1476
-f 1475 1476 1415
-f 1477 1458 1471
-f 1471 1476 1477
-f 1459 1477 1476
-f 1458 1477 1474
-f 1459 1478 1477
-f 1477 1478 1474
-f 1449 1474 1478
-f 1422 1479 1421
-f 1475 1421 1479
-f 1479 1422 1423
-f 1423 1424 1479
-f 1424 1425 1479
-f 1460 1480 1479
-f 1479 1480 1475
-f 1459 1475 1480
-f 1459 1480 1478
-f 1463 1481 1428
-f 1427 1428 1481
-f 1427 1481 1426
-f 1460 1479 1481
-f 1426 1481 1425
-f 1479 1425 1481
-f 1482 1449 1478
-f 1478 1480 1482
-f 1460 1482 1480
-f 1449 1482 1466
-f 1463 1483 1481
-f 1483 1460 1481
-f 1466 1482 1483
-f 1460 1483 1482
-f 1463 1456 1483
-f 1466 1483 1456
-f 1439 1484 1438
-f 1465 1438 1484
-f 1467 1485 1484
-f 1456 1465 1485
-f 1484 1485 1465
-f 1486 1467 1484
-f 1484 1440 1486
-f 1440 1441 1486
-f 1451 1486 1441
-f 1467 1486 1462
-f 1467 1487 1485
-f 1457 1487 1469
-f 1488 1401 1473
-f 1401 1488 1400
-f 1488 1468 1400
-f 1489 1469 1487
-f 1487 1467 1489
-f 1455 1489 1467
-f 1469 1489 1448
-f 1455 1461 1489
-f 1448 1489 1461
-f 1471 1472 1490
-f 1472 1404 1490
-f 1471 1490 1450
-f 1450 1490 1406
-f 1405 1406 1490
-f 1457 1491 1470
-f 1473 1491 1488
-f 1457 1468 1491
-f 1488 1491 1468
-f 1466 1492 1470
-f 1485 1492 1456
-f 1492 1466 1456
-f 1470 1493 1457
-f 1493 1487 1457
-f 1493 1470 1492
-f 1487 1493 1485
-f 1492 1485 1493
-f 1458 1494 1473
-f 1494 1491 1473
-f 1494 1458 1474
-f 1474 1470 1494
-f 1491 1494 1470
-f 1398 156 157
-f 1401 157 147
-f 148 149 1405
-f 1151 1406 1405
-f 1405 149 1151
-f 1153 1408 1407
-f 1407 1151 1153
-f 1153 1154 1409
-f 1408 1153 1409
-f 1154 1155 1410
-f 1156 476 1415
-f 1414 1156 1415
-f 1172 1416 1415
-f 1415 476 1172
-f 1172 1173 1418
-f 1417 1172 1418
-f 1173 1174 1419
-f 1418 1173 1419
-f 1174 1190 1420
-f 1419 1174 1420
-f 1192 1422 1421
-f 1421 1190 1192
-f 1192 1188 1424
-f 1423 1192 1424
-f 1188 1189 1426
-f 1425 1188 1426
-f 1191 1428 1427
-f 1427 1189 1191
-f 1191 1187 1429
-f 1428 1191 1429
-f 1182 1431 1430
-f 1430 1187 1182
-f 1183 1185 1432
-f 1157 1435 1434
-f 1434 1185 1157
-f 1244 1436 1435
-f 1435 1157 1244
-f 1258 1437 1436
-f 1436 1244 1258
-f 1439 1258 1262
-f 1257 1441 1440
-f 1440 1264 1257
-f 1243 164 1444
-f 1443 1243 1444
-f 1445 164 155
-f 155 156 1397
-f 1446 1445 155
-f 1397 1446 155
-f 1397 1398 1445
-f 1397 156 1398
-f 1398 1453 1445
-f 157 1399 1398
-f 1399 1454 1398
-f 1400 1468 1399
-f 1399 157 1400
-f 1401 1402 1473
-f 147 1402 1401
-f 1405 1490 1404
-f 1404 1150 1405
-f 1150 148 1405
-f 1409 1410 1471
-f 1409 1154 1410
-f 1476 1411 1412
-f 1411 1155 1412
-f 1155 1156 1412
-f 1412 1156 1413
-f 1464 1431 1432
-f 1431 1182 1432
-f 1182 1183 1432
-f 1464 1432 1465
-f 1484 1439 1440
-f 1262 1440 1439
-f 1440 1262 1264
-f 1443 1451 1442
-f 1442 1257 1443
-f 1257 1243 1443
-f 1451 1443 1486
-f 1462 1486 1443
-f 1461 1444 1452
-f 1444 164 1452
-f 1452 1445 1447
-f 164 1445 1452
-f 1496 227 1497
-f 1499 923 1500
-f 1501 922 1502
-f 1504 920 1505
-f 1506 204 1507
-f 1507 204 1508
-f 1513 192 1514
-f 1518 211 1519
-f 1520 1322 1521
-f 1526 1321 1527
-f 1527 1321 1528
-f 1530 1020 1531
-f 1533 1023 1534
-f 1537 254 1538
-f 1538 254 1539
-f 1540 259 1541
-f 1544 241 1545
-f 1541 1542 1548
-f 1542 1543 1548
-f 1543 1544 1548
-f 1544 1545 1548
-f 1539 1540 1551
-f 1548 1551 1541
-f 1540 1541 1551
-f 1495 1552 1547
-f 1547 1552 1546
-f 1511 1553 1510
-f 1508 1555 1507
-f 1507 1555 1506
-f 1505 1506 1555
-f 1505 1555 1504
-f 1504 1555 1503
-f 1503 1555 1502
-f 1549 1556 1555
-f 1499 1500 1556
-f 1500 1501 1556
-f 1555 1556 1502
-f 1501 1502 1556
-f 1499 1556 1498
-f 1557 1549 1555
-f 1509 1557 1508
-f 1555 1508 1557
-f 1557 1509 1510
-f 1526 1527 1558
-f 1528 1558 1527
-f 1526 1558 1525
-f 1560 1522 1523
-f 1550 1560 1558
-f 1523 1524 1560
-f 1558 1560 1525
-f 1524 1525 1560
-f 1522 1560 1521
-f 1521 1560 1520
-f 1520 1560 1519
-f 1519 1560 1518
-f 1550 1561 1560
-f 1560 1561 1518
-f 1538 1562 1537
-f 1538 1539 1562
-f 1551 1562 1539
-f 1563 1549 1557
-f 1557 1510 1563
-f 1553 1563 1510
-f 1513 1564 1512
-f 1553 1511 1564
-f 1512 1564 1511
-f 1566 1551 1548
-f 1548 1552 1566
-f 1497 1567 1496
-f 1556 1567 1498
-f 1554 1568 1567
-f 1567 1568 1496
-f 1552 1495 1568
-f 1552 1568 1566
-f 1549 1569 1556
-f 1556 1569 1567
-f 1554 1567 1569
-f 1534 1570 1533
-f 1533 1570 1532
-f 1532 1570 1531
-f 1531 1570 1530
-f 1530 1570 1529
-f 1558 1528 1570
-f 1529 1570 1528
-f 1516 1571 1515
-f 1550 1572 1561
-f 1561 1572 1571
-f 1559 1571 1572
-f 1573 1514 1515
-f 1559 1573 1571
-f 1515 1571 1573
-f 1575 1565 1574
-f 1563 1578 1549
-f 1578 1569 1549
-f 1513 1514 1579
-f 1573 1579 1514
-f 1513 1579 1564
-f 1564 1579 1553
-f 1580 1563 1553
-f 1574 1580 1579
-f 1553 1579 1580
-f 1558 1581 1550
-f 1550 1581 1572
-f 1575 1572 1581
-f 1582 1573 1559
-f 1575 1582 1572
-f 1559 1572 1582
-f 1573 1582 1579
-f 1579 1582 1574
-f 1575 1574 1582
-f 1551 1583 1562
-f 1584 1536 1562
-f 1576 1584 1583
-f 1562 1583 1584
-f 1576 1585 1584
-f 1570 1534 1585
-f 1584 1585 1535
-f 1534 1535 1585
-f 1587 1574 1565
-f 1574 1587 1580
-f 1588 1569 1578
-f 1569 1588 1554
-f 1577 1589 1588
-f 1554 1588 1589
-f 1554 1589 1568
-f 1566 1568 1589
-f 1565 1590 1586
-f 1581 1590 1575
-f 1590 1565 1575
-f 1591 1566 1589
-f 1566 1591 1551
-f 1591 1583 1551
-f 1558 1592 1581
-f 1585 1592 1570
-f 1592 1558 1570
-f 1583 1593 1576
-f 1593 1586 1576
-f 1586 1594 1565
-f 1565 1594 1587
-f 1577 1587 1594
-f 1594 1586 1593
-f 1586 1595 1576
-f 1595 1585 1576
-f 1578 1596 1588
-f 1587 1577 1596
-f 1588 1596 1577
-f 1587 1596 1580
-f 1580 1596 1563
-f 1578 1563 1596
-f 1597 1594 1593
-f 1593 1583 1597
-f 1591 1597 1583
-f 1597 1591 1589
-f 1594 1597 1577
-f 1589 1577 1597
-f 1581 1598 1590
-f 1595 1586 1598
-f 1590 1598 1586
-f 1598 1581 1592
-f 1592 1585 1598
-f 1595 1598 1585
-f 1497 227 925
-f 923 1499 1498
-f 1498 924 923
-f 923 922 1501
-f 1500 923 1501
-f 921 1503 1502
-f 1502 922 921
-f 920 1504 1503
-f 1503 921 920
-f 1505 920 919
-f 190 1509 1508
-f 1508 204 190
-f 190 191 1510
-f 1509 190 1510
-f 191 1512 1511
-f 1510 191 1511
-f 192 1513 1512
-f 1512 191 192
-f 1514 192 1515
-f 1516 1515 192
-f 192 193 1516
-f 1322 1520 1519
-f 1519 211 1322
-f 1322 1323 1522
-f 1521 1322 1522
-f 1323 1324 1523
-f 1522 1323 1523
-f 1330 1524 1523
-f 1523 1324 1330
-f 1334 1525 1524
-f 1524 1330 1334
-f 1334 1321 1526
-f 1525 1334 1526
-f 1029 1529 1528
-f 1528 1321 1029
-f 1020 1530 1529
-f 1529 1029 1020
-f 1020 1017 1532
-f 1531 1020 1532
-f 1017 1023 1533
-f 1532 1017 1533
-f 1023 1022 1535
-f 1534 1023 1535
-f 1022 1016 1536
-f 259 1540 1539
-f 1539 254 259
-f 264 1542 1541
-f 1541 259 264
-f 257 1543 1542
-f 1542 264 257
-f 241 1544 1543
-f 1543 257 241
-f 1495 1547 1546
-f 1546 230 1495
-f 1402 148 1150
-f 147 148 1402
-f 1402 1150 1403
-f 1403 1472 1402
-f 1472 1473 1402
-f 1496 1568 1495
-f 1495 230 1496
-f 1496 230 227
-f 1498 1567 1497
-f 925 1498 1497
-f 1498 925 924
-f 1506 1505 919
-f 919 204 1506
-f 1516 1517 1571
-f 1516 193 1517
-f 193 205 1517
-f 1561 1571 1517
-f 1517 1518 1561
-f 1517 205 1518
-f 205 211 1518
-f 1535 1022 1536
-f 1536 1584 1535
-f 1016 254 1537
-f 1562 1536 1537
-f 1536 1016 1537
-f 1546 1548 1545
-f 1545 241 1546
-f 241 230 1546
-f 1548 1546 1552
diff --git a/software/Print3r/models/xyzCalibration_cube.stl b/software/Print3r/models/xyzCalibration_cube.stl
deleted file mode 100644
index 31e9f1a2..00000000
Binary files a/software/Print3r/models/xyzCalibration_cube.stl and /dev/null differ
diff --git a/software/Print3r/models/xyzHollowCalibrationCube.scad b/software/Print3r/models/xyzHollowCalibrationCube.scad
deleted file mode 100644
index 6ba79243..00000000
--- a/software/Print3r/models/xyzHollowCalibrationCube.scad
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * XYZ Hollow Calibration Cube
- *
- * Rene K. Mueller
- *
- * Description:
- * Printable with 0% infill: "Z" at the bottom
- *
- * History:
- * 2018/09/29: 0.0.1: first version
- */
-
-difference() {
- cube(20);
- translate([3,2,3]) rotate([90,0,0]) scale(1.5) linear_extrude(height=2) text("X");
- translate([20-2,3,3]) rotate([90,0,90]) scale(1.5) linear_extrude(height=2) text("Y");
- translate([3.5,14+3,0]) rotate([0,0,0]) scale([1.5,-1.5,1]) linear_extrude(height=2) text("Z");
-}
-
diff --git a/software/Print3r/models/xyzHollowCalibrationCube.stl b/software/Print3r/models/xyzHollowCalibrationCube.stl
deleted file mode 100644
index da840677..00000000
--- a/software/Print3r/models/xyzHollowCalibrationCube.stl
+++ /dev/null
@@ -1,982 +0,0 @@
-solid OpenSCAD_Model
- facet normal -1 0 0
- outer loop
- vertex 0 0 0
- vertex 0 20 20
- vertex 0 20 0
- endloop
- endfacet
- facet normal -1 -0 0
- outer loop
- vertex 0 20 20
- vertex 0 0 0
- vertex 0 0 20
- endloop
- endfacet
- facet normal -0 0 1
- outer loop
- vertex 0 20 20
- vertex 20 0 20
- vertex 20 20 20
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 20 0 20
- vertex 0 20 20
- vertex 0 0 20
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 0 0
- vertex 20 8.97148 8.92799
- vertex 20 5.29548 14.512
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 20 20
- vertex 20 16.437 17.304
- vertex 20 20 0
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 20 20
- vertex 20 14.301 17.304
- vertex 20 16.437 17.304
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 14.301 17.304
- vertex 20 8.50248 12.754
- vertex 20 9.95698 10.479
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 14.301 17.304
- vertex 20 5.59348 17.304
- vertex 20 8.50248 12.754
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 20 20
- vertex 20 5.59348 17.304
- vertex 20 14.301 17.304
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 20 0 20
- vertex 20 5.59348 17.304
- vertex 20 20 20
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 5.59348 17.304
- vertex 20 0 20
- vertex 20 3.45749 17.304
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 20 10.9035 8.92799
- vertex 20 20 0
- vertex 20 16.437 17.304
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 20 10.9035 3
- vertex 20 20 0
- vertex 20 10.9035 8.92799
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 20 8.97148 3
- vertex 20 20 0
- vertex 20 10.9035 3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 0 0
- vertex 20 5.29548 14.512
- vertex 20 3.45749 17.304
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 0 0
- vertex 20 3.45749 17.304
- vertex 20 0 20
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 8.97148 3
- vertex 20 0 0
- vertex 20 20 0
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 20 8.97148 8.92799
- vertex 20 0 0
- vertex 20 8.97148 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 20 0 0
- vertex 15.5735 15.464 0
- vertex 20 20 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 15.0965 4.0595 0
- vertex 20 0 0
- vertex 15.0965 2.69601 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 20 0 0
- vertex 4.90398 2.69601 0
- vertex 15.0965 2.69601 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 0 0
- vertex 4.90398 4.23201 0
- vertex 4.90398 2.69601 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 20 0
- vertex 4.16149 15.596 0
- vertex 0 0 0
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 4.90398 4.23201 0
- vertex 0 0 0
- vertex 4.16149 15.596 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 0 0
- vertex 4.90398 2.69601 0
- vertex 20 0 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 15.5735 17 0
- vertex 20 20 0
- vertex 15.5735 15.464 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 0 20 0
- vertex 15.5735 17 0
- vertex 4.16149 17 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 15.5735 17 0
- vertex 0 20 0
- vertex 20 20 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.16149 15.596 0
- vertex 0 20 0
- vertex 4.16149 17 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 20 0 0
- vertex 15.0965 4.0595 0
- vertex 15.5735 15.464 0
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 15.5735 15.464 0
- vertex 15.0965 4.0595 0
- vertex 6.36798 15.464 0
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 12.8885 4.23201 0
- vertex 4.90398 4.23201 0
- vertex 4.16149 15.596 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 6.03149 0 17.304
- vertex 10.0185 0 11.6895
- vertex 13.8945 0 17.304
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 6.03149 0 17.304
- vertex 0 0 20
- vertex 3.88499 0 17.304
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 3.46799 0 3
- vertex 3.88499 0 17.304
- vertex 0 0 20
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 3.88499 0 17.304
- vertex 3.46799 0 3
- vertex 8.92049 0 10.431
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 0 0 0
- vertex 5.61449 0 3
- vertex 3.46799 0 3
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 5.61449 0 3
- vertex 0 0 0
- vertex 14.3115 0 3
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 20 0 0
- vertex 14.3115 0 3
- vertex 0 0 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 0 0 0
- vertex 3.46799 0 3
- vertex 0 0 20
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 0 0 20
- vertex 6.03149 0 17.304
- vertex 20 0 20
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 13.8945 0 17.304
- vertex 20 0 20
- vertex 6.03149 0 17.304
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 16.041 0 17.304
- vertex 20 0 20
- vertex 13.8945 0 17.304
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 16.458 0 3
- vertex 16.041 0 17.304
- vertex 11.1375 0 10.5015
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 16.041 0 17.304
- vertex 16.458 0 3
- vertex 20 0 20
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 16.458 0 3
- vertex 20 0 0
- vertex 20 0 20
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 14.3115 0 3
- vertex 20 0 0
- vertex 16.458 0 3
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 10.008 0 9.25349
- vertex 5.61449 0 3
- vertex 14.3115 0 3
- endloop
- endfacet
- facet normal 0 1 -0
- outer loop
- vertex 20 20 0
- vertex 0 20 20
- vertex 20 20 20
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 0 20 20
- vertex 20 20 0
- vertex 0 20 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 5.61449 2 3
- vertex 8.92049 2 10.431
- vertex 3.46799 2 3
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 8.92049 2 10.431
- vertex 5.61449 2 3
- vertex 10.008 2 9.25349
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 8.92049 2 10.431
- vertex 6.03149 2 17.304
- vertex 3.88499 2 17.304
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 6.03149 2 17.304
- vertex 8.92049 2 10.431
- vertex 10.0185 2 11.6895
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 10.0185 2 11.6895
- vertex 8.92049 2 10.431
- vertex 11.1375 2 10.5015
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 10.008 2 9.25349
- vertex 11.1375 2 10.5015
- vertex 8.92049 2 10.431
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 14.3115 2 3
- vertex 11.1375 2 10.5015
- vertex 10.008 2 9.25349
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 11.1375 2 10.5015
- vertex 14.3115 2 3
- vertex 16.458 2 3
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 11.1375 2 10.5015
- vertex 13.8945 2 17.304
- vertex 10.0185 2 11.6895
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 13.8945 2 17.304
- vertex 11.1375 2 10.5015
- vertex 16.041 2 17.304
- endloop
- endfacet
- facet normal 0.823782 -0 0.566907
- outer loop
- vertex 10.008 0 9.25349
- vertex 14.3115 2 3
- vertex 10.008 2 9.25349
- endloop
- endfacet
- facet normal 0.823782 0 0.566907
- outer loop
- vertex 14.3115 2 3
- vertex 10.008 0 9.25349
- vertex 14.3115 0 3
- endloop
- endfacet
- facet normal -0 0 1
- outer loop
- vertex 14.3115 2 3
- vertex 16.458 0 3
- vertex 16.458 2 3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 16.458 0 3
- vertex 14.3115 2 3
- vertex 14.3115 0 3
- endloop
- endfacet
- facet normal -0.815669 0 -0.57852
- outer loop
- vertex 16.458 0 3
- vertex 11.1375 2 10.5015
- vertex 16.458 2 3
- endloop
- endfacet
- facet normal -0.815669 -0 -0.57852
- outer loop
- vertex 11.1375 2 10.5015
- vertex 16.458 0 3
- vertex 11.1375 0 10.5015
- endloop
- endfacet
- facet normal -0.811212 0 0.584752
- outer loop
- vertex 11.1375 0 10.5015
- vertex 16.041 2 17.304
- vertex 11.1375 2 10.5015
- endloop
- endfacet
- facet normal -0.811212 0 0.584752
- outer loop
- vertex 16.041 2 17.304
- vertex 11.1375 0 10.5015
- vertex 16.041 0 17.304
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 13.8945 0 17.304
- vertex 16.041 2 17.304
- vertex 16.041 0 17.304
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 16.041 2 17.304
- vertex 13.8945 0 17.304
- vertex 13.8945 2 17.304
- endloop
- endfacet
- facet normal 0.822943 0 -0.568123
- outer loop
- vertex 13.8945 0 17.304
- vertex 10.0185 2 11.6895
- vertex 13.8945 2 17.304
- endloop
- endfacet
- facet normal 0.822943 0 -0.568123
- outer loop
- vertex 10.0185 2 11.6895
- vertex 13.8945 0 17.304
- vertex 10.0185 0 11.6895
- endloop
- endfacet
- facet normal -0.815334 0 -0.578991
- outer loop
- vertex 10.0185 0 11.6895
- vertex 6.03149 2 17.304
- vertex 10.0185 2 11.6895
- endloop
- endfacet
- facet normal -0.815334 -0 -0.578991
- outer loop
- vertex 6.03149 2 17.304
- vertex 10.0185 0 11.6895
- vertex 6.03149 0 17.304
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 3.88499 0 17.304
- vertex 6.03149 2 17.304
- vertex 6.03149 0 17.304
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 6.03149 2 17.304
- vertex 3.88499 0 17.304
- vertex 3.88499 2 17.304
- endloop
- endfacet
- facet normal 0.806668 -0 0.591005
- outer loop
- vertex 3.88499 0 17.304
- vertex 8.92049 2 10.431
- vertex 3.88499 2 17.304
- endloop
- endfacet
- facet normal 0.806668 0 0.591005
- outer loop
- vertex 8.92049 2 10.431
- vertex 3.88499 0 17.304
- vertex 8.92049 0 10.431
- endloop
- endfacet
- facet normal 0.806245 0 -0.591582
- outer loop
- vertex 8.92049 0 10.431
- vertex 3.46799 2 3
- vertex 8.92049 2 10.431
- endloop
- endfacet
- facet normal 0.806245 0 -0.591582
- outer loop
- vertex 3.46799 2 3
- vertex 8.92049 0 10.431
- vertex 3.46799 0 3
- endloop
- endfacet
- facet normal -0 0 1
- outer loop
- vertex 3.46799 2 3
- vertex 5.61449 0 3
- vertex 5.61449 2 3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 5.61449 0 3
- vertex 3.46799 2 3
- vertex 3.46799 0 3
- endloop
- endfacet
- facet normal -0.818243 0 0.574872
- outer loop
- vertex 5.61449 0 3
- vertex 10.008 2 9.25349
- vertex 5.61449 2 3
- endloop
- endfacet
- facet normal -0.818243 0 0.574872
- outer loop
- vertex 10.008 2 9.25349
- vertex 5.61449 0 3
- vertex 10.008 0 9.25349
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 18 5.59348 17.304
- vertex 18 3.45749 17.304
- vertex 18 8.97148 8.92799
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 18 14.301 17.304
- vertex 18 10.9035 8.92799
- vertex 18 16.437 17.304
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 18 9.95698 10.479
- vertex 18 10.9035 8.92799
- vertex 18 14.301 17.304
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 18 8.97148 8.92799
- vertex 18 10.9035 8.92799
- vertex 18 9.95698 10.479
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 18 10.9035 8.92799
- vertex 18 8.97148 8.92799
- vertex 18 10.9035 3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 18 10.9035 3
- vertex 18 8.97148 8.92799
- vertex 18 8.97148 3
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 18 9.95698 10.479
- vertex 18 5.59348 17.304
- vertex 18 8.97148 8.92799
- endloop
- endfacet
- facet normal 0 -0.834365 0.551212
- outer loop
- vertex 18 10.9035 8.92799
- vertex 20 16.437 17.304
- vertex 18 16.437 17.304
- endloop
- endfacet
- facet normal 0 -0.834365 0.551212
- outer loop
- vertex 20 16.437 17.304
- vertex 18 10.9035 8.92799
- vertex 20 10.9035 8.92799
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 18 14.301 17.304
- vertex 20 16.437 17.304
- vertex 20 14.301 17.304
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 20 16.437 17.304
- vertex 18 14.301 17.304
- vertex 18 16.437 17.304
- endloop
- endfacet
- facet normal 0 0.843615 -0.536949
- outer loop
- vertex 20 9.95698 10.479
- vertex 18 14.301 17.304
- vertex 20 14.301 17.304
- endloop
- endfacet
- facet normal 0 0.843615 -0.536949
- outer loop
- vertex 18 14.301 17.304
- vertex 20 9.95698 10.479
- vertex 18 9.95698 10.479
- endloop
- endfacet
- facet normal 4.38571e-16 -0.842524 -0.53866
- outer loop
- vertex 18 9.95698 10.479
- vertex 20 8.50248 12.754
- vertex 18 5.59348 17.304
- endloop
- endfacet
- facet normal 0 -0.842524 -0.53866
- outer loop
- vertex 20 8.50248 12.754
- vertex 18 9.95698 10.479
- vertex 20 9.95698 10.479
- endloop
- endfacet
- facet normal -0 -0.842524 -0.53866
- outer loop
- vertex 20 5.59348 17.304
- vertex 18 5.59348 17.304
- vertex 20 8.50248 12.754
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 18 3.45749 17.304
- vertex 20 5.59348 17.304
- vertex 20 3.45749 17.304
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 20 5.59348 17.304
- vertex 18 3.45749 17.304
- vertex 18 5.59348 17.304
- endloop
- endfacet
- facet normal 0 0.835259 0.549856
- outer loop
- vertex 20 5.29548 14.512
- vertex 18 3.45749 17.304
- vertex 20 3.45749 17.304
- endloop
- endfacet
- facet normal 1.86777e-06 0.835259 0.549857
- outer loop
- vertex 18 3.45749 17.304
- vertex 20 5.29548 14.512
- vertex 18 8.97148 8.92799
- endloop
- endfacet
- facet normal 0 0.835258 0.549858
- outer loop
- vertex 20 8.97148 8.92799
- vertex 18 8.97148 8.92799
- vertex 20 5.29548 14.512
- endloop
- endfacet
- facet normal 0 1 -0
- outer loop
- vertex 20 8.97148 3
- vertex 18 8.97148 8.92799
- vertex 20 8.97148 8.92799
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 18 8.97148 8.92799
- vertex 20 8.97148 3
- vertex 18 8.97148 3
- endloop
- endfacet
- facet normal -0 0 1
- outer loop
- vertex 18 10.9035 3
- vertex 20 8.97148 3
- vertex 20 10.9035 3
- endloop
- endfacet
- facet normal 0 0 1
- outer loop
- vertex 20 8.97148 3
- vertex 18 10.9035 3
- vertex 18 8.97148 3
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 18 10.9035 3
- vertex 20 10.9035 8.92799
- vertex 18 10.9035 8.92799
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 20 10.9035 8.92799
- vertex 18 10.9035 3
- vertex 20 10.9035 3
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 15.0965 2.69601 2
- vertex 12.8885 4.23201 2
- vertex 15.0965 4.0595 2
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.90398 2.69601 2
- vertex 12.8885 4.23201 2
- vertex 15.0965 2.69601 2
- endloop
- endfacet
- facet normal -0 0 -1
- outer loop
- vertex 12.8885 4.23201 2
- vertex 4.90398 2.69601 2
- vertex 4.90398 4.23201 2
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 12.8885 4.23201 2
- vertex 6.36798 15.464 2
- vertex 15.0965 4.0595 2
- endloop
- endfacet
- facet normal -0 -0 -1
- outer loop
- vertex 6.36798 15.464 2
- vertex 12.8885 4.23201 2
- vertex 4.16149 15.596 2
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 6.36798 15.464 2
- vertex 15.5735 17 2
- vertex 15.5735 15.464 2
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 4.16149 17 2
- vertex 6.36798 15.464 2
- vertex 4.16149 15.596 2
- endloop
- endfacet
- facet normal 0 0 -1
- outer loop
- vertex 6.36798 15.464 2
- vertex 4.16149 17 2
- vertex 15.5735 17 2
- endloop
- endfacet
- facet normal 0 1 -0
- outer loop
- vertex 15.5735 15.464 0
- vertex 6.36798 15.464 2
- vertex 15.5735 15.464 2
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 6.36798 15.464 2
- vertex 15.5735 15.464 0
- vertex 6.36798 15.464 0
- endloop
- endfacet
- facet normal -0.794108 -0.607777 0
- outer loop
- vertex 15.0965 4.0595 0
- vertex 6.36798 15.464 2
- vertex 6.36798 15.464 0
- endloop
- endfacet
- facet normal -0.794108 -0.607777 0
- outer loop
- vertex 6.36798 15.464 2
- vertex 15.0965 4.0595 0
- vertex 15.0965 4.0595 2
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex 15.0965 2.69601 0
- vertex 15.0965 4.0595 2
- vertex 15.0965 4.0595 0
- endloop
- endfacet
- facet normal -1 -0 0
- outer loop
- vertex 15.0965 4.0595 2
- vertex 15.0965 2.69601 0
- vertex 15.0965 2.69601 2
- endloop
- endfacet
- facet normal 0 1 -0
- outer loop
- vertex 15.0965 2.69601 0
- vertex 4.90398 2.69601 2
- vertex 15.0965 2.69601 2
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex 4.90398 2.69601 2
- vertex 15.0965 2.69601 0
- vertex 4.90398 2.69601 0
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 4.90398 2.69601 2
- vertex 4.90398 4.23201 0
- vertex 4.90398 4.23201 2
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 4.90398 4.23201 0
- vertex 4.90398 2.69601 2
- vertex 4.90398 2.69601 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 4.90398 4.23201 0
- vertex 12.8885 4.23201 2
- vertex 4.90398 4.23201 2
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 12.8885 4.23201 2
- vertex 4.90398 4.23201 0
- vertex 12.8885 4.23201 0
- endloop
- endfacet
- facet normal 0.793113 0.609074 0
- outer loop
- vertex 12.8885 4.23201 2
- vertex 4.16149 15.596 0
- vertex 4.16149 15.596 2
- endloop
- endfacet
- facet normal 0.793113 0.609074 0
- outer loop
- vertex 4.16149 15.596 0
- vertex 12.8885 4.23201 2
- vertex 12.8885 4.23201 0
- endloop
- endfacet
- facet normal 1 -0 0
- outer loop
- vertex 4.16149 15.596 2
- vertex 4.16149 17 0
- vertex 4.16149 17 2
- endloop
- endfacet
- facet normal 1 0 0
- outer loop
- vertex 4.16149 17 0
- vertex 4.16149 15.596 2
- vertex 4.16149 15.596 0
- endloop
- endfacet
- facet normal 0 -1 0
- outer loop
- vertex 4.16149 17 0
- vertex 15.5735 17 2
- vertex 4.16149 17 2
- endloop
- endfacet
- facet normal 0 -1 -0
- outer loop
- vertex 15.5735 17 2
- vertex 4.16149 17 0
- vertex 15.5735 17 0
- endloop
- endfacet
- facet normal -1 0 0
- outer loop
- vertex 15.5735 15.464 0
- vertex 15.5735 17 2
- vertex 15.5735 17 0
- endloop
- endfacet
- facet normal -1 -0 0
- outer loop
- vertex 15.5735 17 2
- vertex 15.5735 15.464 0
- vertex 15.5735 15.464 2
- endloop
- endfacet
-endsolid OpenSCAD_Model
diff --git a/software/Print3r/print3r b/software/Print3r/print3r
deleted file mode 100644
index ef771aa7..00000000
--- a/software/Print3r/print3r
+++ /dev/null
@@ -1,4174 +0,0 @@
-#!/usr/bin/perl
-
-# == Print3r, written by Rene K. Mueller
-#
-# License: GPLv3
-#
-# Description:
-# Command line tool to print parts to 3d printers without GUI
-# - slicing with multiple slicers (slic3r, cura, etc) backend
-# - printing via USB & network
-# - printing .scad, .stl, .amf, .obj, .off, .3mf, .3mj and .gcode ( .fcstd, .iges, .step, .brep with freecad2any)
-#
-# History:
-# 2022/12/16: 0.3.20: new @revo-{yellow,red,blue,green,pink} macros, -o added
-# 2022/11/27: 0.3.19: --device/-d --printer/-p --slicer/-s short-cuts added
-# 2022/10/17: 0.3.18: support CuraEngine-5.x / cura5 better
-# 2022/08/03: 0.3.17: adding locks for avoiding to print simulatenously to the same printer, better support for cura-slicer & CuraEngine 5.x
-# 2022/04/27: 0.3.16: --scad with --scad.= to pass variables to OpenSCAD models, experimental support for metatron- and enoch-slicer
-# 2022/01/17: 0.3.15: experimental support for voxgl-slicer (--slicer=voxgl)
-# 2021/12/16: 0.3.14: experimental support for lab-slicer and vox3l-slicer (--slicer=lab or vox3l)
-# 2021/12/05: 0.3.13: supporting webcams via webcam=[ ...] and webcam_snap=[ ...]
-# 2021/11/09: 0.3.12: more printer info in log-file, firmware and M501 output
-# 2021/10/23: 0.3.11: experimental support for zplus-slicer (--slicer=zplus)
-# 2021/10/14: 0.3.10: each successful(ended) logged print contains new or --uid=... uid (to track printed parts)
-# 2021/08/17: 0.3.9: if 'freecad2any' exists then .fcstd, .iges, .step and .brep is supported too, 'log' command takes arguments, either search term or '#' leading log entry number (see help)
-# 2021/08/07: 0.3.8: --slicer=kirimoto support added, external helper for FCstd (FreeCAD) support using freecad2any
-# 2021/07/25: 0.3.7: adding 'log' command, supporting --format=json in this context
-# 2021/06/28: 0.3.6: support for --post=[,...] and --post_=proc %i -o %o
-# 2021/06/24: 0.3.5: experimental support for --slicer=cura-slicer & 5dmaker
-# 2021/06/21: 0.3.4: --cols= and --rows= in case --multiply-part is used
-# 2021/04/06: 0.3.3: experimental support for --slicer=mandoline added
-# 2021/03/08: 0.3.2: experimental support for --slicer=slicer4rtn added
-# 2021/03/02: 0.3.1: --display_upate=off does not update display, e.g. raw g-code printing
-# 2019/10/25: 0.3.0: better pipeline of processing div. formats, preliminary 3mf and 3mj (new format) support
-# 2019/09/02: 0.2.8: CuraEngine-4.2.0 support via --slicer=cura4, see wiki for install instructions
-# 2019/06/09: 0.2.7: cleaner read{STL,AMF,OBJ,OFF}(), and partTransform(), support of multiple volumes/colors/material in AMF
-# 2019/05/28: 0.2.6: cleaner script-layer within Gcode processing, slic3r-*: better multi-extruder support '--toolmap' & '--toolremap'
-# 2019/05/24: 0.2.5: preliminary slicer=prusa support, additional inline functions support for gcode transformation: &toolcolor(n,a,b,c,d,e), &hsl2cmy(h,s,l), &phases(n=2|3,p=3|4)
-# 2019/04/10: 0.2.3: support for '--prepend_gcode=...' for start-gcode addition, and '--layer-gcode=...'
-# 2019/03/19: 0.2.2: support for 'skirts', 'brims' and 'rafts', 'support' and 'seam' slicer-independent
-# 2018/12/03: 0.2.0: `client` command added, and `--device=tcp:[:]` added for remote printing capabilities
-# 2018/11/26: 0.1.8: proper cleanup of temporary files (incl. CTRL-C abort)
-# 2018/11/17: 0.1.7: more slicer-independent speed settings (print/travel/infill/perimeter/small_perimeter/bridge/retract_speed)
-# 2018/11/09: 0.1.6: restructure the file layout of settings (e.g. at /usr/share/print3r/ & ~/.config/print3r/)
-# 2018/11/08: 0.1.5: new option '--scad=' to additionally execute openscad code
-# 2018/11/04: 0.1.4: various improvements, remap() of general settings to slicer-specific settings via settings//map.ini
-# 2018/10/22: 0.1.1: better support for '--slicer=cura' and 'cura-legacy'
-# 2018/10/19: 0.1.0: '--slicer=' with '--printer=' leads to settings//, '@' leads to 'settings/'
-# 2018/10/10: 0.0.9: '.amf' and '.obj' native support for preprocessing (scale,rotate,translate,mirror)
-# 2018/10/07: 0.0.8: absolute scaling like --scale=0,0,30mm or --scale=50mm, and `--scale=50%` same as --scale=0.5
-# 2018/10/06: 0.0.7: `PRINT3R` enviromental variable considered, 'baudrate=auto' probes baudrate
-# 2018/10/04: 0.0.6: 'scale', 'rotate', 'translate' and 'mirror' implemented
-# 2018/09/30: 0.0.5: slicing .scad, preparing other slicers (like CuraEngine)
-# 2018/09/27: 0.0.4: code cleanup, 'gconsole' added
-# 2018/09/26: 0.0.3: renamed to Print3r, 'gcode' command added to send single lines
-# 2018/09/24: 0.0.2: 'print' of scad, stl and gcode, 'render' of scad, stl and gcode
-# 2018/09/22: 0.0.1: first version, barely functional: slice, print and slice+print works
-
-use strict;
-use Time::HiRes qw(time sleep);
-use Device::SerialPort;
-use Math::Trig ':pi';
-# use Math::Matrix;
-use JSON;
-use XML::Simple; # -- reading .amf (XML)
-use File::Which;
-use IO::Socket::INET;
-use IO::Zlib;
-use Cwd;
-use FileHandle;
-# use Algorithm::BinPack::2D;
-
-my $NAME = "Print3r";
-my $VERSION = '0.3.20';
-my %conf; # -- parsed and fetched options/configuration from cli, settings, profiles, macros ...
-my %conf_src; # -- source of configuration ('env','cli','printer','macro')
-my %conf_ch; # -- conf changed from defaults
-my $map; # -- slicer-depending setting maps (e.g. "wall_line_count" <= "perimeters")
-my $process; # -- metadata of the process/task itself (e.g. elapsed time per stage)
-my @f; # -- files to process
-my @rm; # -- temp files to remove
-my @post; # -- post processing
-
-my($me) = ($0=~/\/([^\/]+)$/);
-
-# -- defaults
-$conf{device} = '/dev/ttyUSB0';
-$conf{slicer} = 'slic3r';
-$conf{timeout} = 10;
-$conf{baudrate} = 115200;
-$conf{auto_center} = '\1';
-$conf{gviewer} = 'yagv';
-$conf{serialif} = 'serialport';
-$conf{scadimport} = 'use';
-
-my @paths = ('./settings',"$ENV{HOME}/.config/print3r","$ENV{HOME}/.print3r","/usr/share/print3r");
-
-# -- short to long option mapping
-my %s2l = ('q'=>'quiet','v'=>'verbose','b'=>'baudrate','d'=>'device','s'=>'slicer','p'=>'printer','k'=>'keep','o'=>'output');
-my %s2a = ('d'=>1, 'p'=>1, 's'=>1, 'b'=>1, 'o'=>'output');
-
-# -- intern option (not to pass on to converters)
-my %internOption = ('quiet'=>1,'verbose'=>1,'device'=>1,'baudrate'=>1,'printer'=>1,'slicer'=>1,'output'=>1,
- 'auto_center'=>1,'random_placement'=>1,'placement'=>1,'multiply_part'=>1,'scale'=>1,'rotate'=>1,'translate'=>1,'mirror'=>1,
- 'timeout'=>1,'scad'=>1,'scadlib'=>1,'scadimport'=>1,'gviewer'=>1,'serialif'=>1,'prepend_gcode'=>1,'layer_gcode'=>1,'stick_position'=>1,
- 'display_update'=>1,'phase2_min'=>1,'phase3_min'=>1, 'webcam'=>1, 'webcam_settings'=>1, 'webcam_snap'=>1);
-
-# -- all formats we support for slicers (scad, sccad aside)
-my %formats = ( "stl"=>1, "amf"=>1, "obj"=>1, "3mf"=>1, "3mj"=>1, "off"=>1, "5mf"=>1 );
-
-if(which('freecad2any')) {
- $formats{$_} = 1 foreach(qw(fcstd iges step brep));
-}
-
-# -- all slicer specific information (formats = native supported format by the slicer)
-my $slicer;
-
-foreach my $p (@paths) {
- if(-e "$p/slicer/slicers.json") {
- local $/;
- open(my $fh,"<","$p/slicer/slicers.json");
- my $c = <$fh>;
- close $fh;
- my $s = fromJSON($c);
- if(ref($s)eq'HASH') {
- foreach my $k (sort keys %$s) { # -- merge data cummulative
- $slicer->{$k} = $s->{$k};
- }
- } else {
- print STDERR "$me: invalid JSON of $p/slicer/slicers.json, skipped\n";
- }
- }
-}
-
-my $printer;
-$printer->{build}->{x} = 200;
-$printer->{build}->{y} = 200;
-$printer->{build}->{z} = 180;
-
-foreach (split(/:/,$ENV{PRINT3R})) {
- my($k,$v);
- $k = $1, $k =~ s/\-/_/g, $conf{$k} = '\1', $conf_src{$k} = 'env' if(/^([\w\-\.]+)$/);
- ($k,$v) = ($1,$2), $k =~ s/\-/_/g, $v =~ s/\\n/\n/g, $conf{$k} = $v, $conf_src{$k} = 'env', next if(/^([\w\-\.]+)=(.*)$/);
-}
-#foreach (@ARGV) { # -- parse command-line arguments
-while($_=shift(@ARGV)) {
- if(/^-(\w+)$/) {
- foreach my $f (split(/|/,$1)) { # -- '-v' or '-vv' -> "--verbose=2"
- if($s2l{$f} && $s2a{$f}) {
- $conf{$s2l{$f}} = shift(@ARGV);
- } else {
- $conf{$s2l{$f}}++;
- }
- $conf_src{$s2l{$f}} = 'cli';
- }
- next;
- }
- my($k,$v); # -- NOTE: all options '-' => '_' for consistency, also all settings from macros or files
- $k = $1, $k =~ s/\-/_/g, $conf{$k} = '\1', $conf_src{$k} = 'cli', next if(/^--([\w\-\.]+)$/);
- ($k,$v) = ($1,$2), $k =~ s/\-/_/g, $v =~ s/\\n/\n/g, $conf{$k} .= $v, $conf_src{$k} = 'cli', next if(/^--([\w\-\.]+)\+=(.*)$/);
- ($k,$v) = ($1,$2), $k =~ s/\-/_/g, $v =~ s/\\n/\n/g, $conf{$k} = $v, $conf_src{$k} = 'cli', next if(/^--([\w\-\.]+)=(.*)$/);
- push(@f,$_);
-}
-
-delete $conf{auto_center} if($conf{random_placement}); # -- resolve contradictions
-delete $conf{random_placement}, delete $conf{auto_center} if($conf{translate}); # -- " "
-delete $conf{random_placement}, delete $conf{auto_center} if($conf{placement});
-$conf{auto_center} = "\1" if($conf{placement}eq'center');
-$conf{random_placement} = "\1" if($conf{placement}eq'random');
-
-$conf{printer} = 'default' if(!$conf{printer}); # -- no printer defined, let's get 'default.ini' if available (should be)
-
-if($conf{version}) {
- print "$NAME $VERSION\n";
- if($conf{verbose}) {
- foreach my $v (@{versions()}) {
- print "- $v\n";
- }
- }
- exit 0;
-}
-
-$| = 1;
-
-$process->{version} = "$NAME $VERSION";
-
-if(!$conf_src{slicer}) { # -- slicer not set explicitly on cli
- my $slicer_base;
- foreach my $fn (@f) { # -- let's look at each file to slice
- next if(!-e $fn); # -- we only check if the file actually exists
- my $fext = ($fn =~ /\.(\w+)$/);
- my $warn = 0;
- if(!$slicer->{$conf{slicer}}->{formats}->{$fext}) { # -- default slicer doesn't support file to slice
- foreach my $s ($conf{slicer},sort keys %$slicer) { # -- let's try to find appropriate slicer (first hit)
- if($slicer->{$s}->{formats}->{$fext}) {
- if($slicer_base && $slicer_base ne $s) {
- $warn++, print "$me: WARN: you mix multiple formats for $fn ($fext) but contradicting slicer ($slicer_base chosen, $s needed)\n" if($warn<=0);
- }
- $conf{slicer} = $slicer_base = $s unless($slicer_base);
- last;
- }
- }
- }
- }
-}
-
-if($slicer->{$conf{slicer}}->{exe}) {
- if(!which($slicer->{$conf{slicer}}->{exe})) { # -- probe selected slicer for availability
- error("slicer '$conf{slicer}' executable ($slicer->{$conf{slicer}}->{exe}) not found");
- }
-} else {
- if(!which($conf{slicer})) { # -- slicer executable directly set?
- error("slicer '$conf{slicer}' executable not defined and not found");
- }
-}
-
-if($conf{slicer}) { # -- process ...//base.ini to $printer and fetch map-data
- my %gc;
- foreach my $p (@paths) {
- foreach my $fn (
- "$p/slicer/$conf{slicer}/base.ini",
- ) {
- my $c = readSlicerConf($fn);
- foreach my $k (sort keys %$c) {
- $gc{$k} = $c->{$k};
- print "$fn: $k = $gc{$k}\n" if($conf{verbose}>1);
- }
- }
- foreach my $k (keys %gc) { # -- transfer settings to $printer
- #$conf{$k} = $gc{$k} unless(defined $conf{$k});
- $printer->{$k} = $gc{$k};
- }
- $map = readSlicerConf("$p/slicer/$conf{slicer}/map.ini") if(-e "$p/slicer/$conf{slicer}/map.ini");
- }
-}
-
-# -- process '--printer' setting
-if($conf{printer}) {
- my $done;
-
- # -- complex strategy:
- # 1) merge all data
- # 2) consider 'default.ini' regardless for sane base **slicer-independent** settings
- # 3) gather printer specifics
-
- print "$me: combine printer profile:\n" if($conf{verbose});
-
- foreach my $p (reverse @paths) { # -- **commulative merge** of data /usr/share/print3r goes FIRST
-
- foreach my $p2 (".",'printer',"slicer/$conf{slicer}") { # -- non-slicer and slicer-depending printer settings
-
- print "$me: ... $p/$p2\n" if($conf{verbose});
-
- foreach my $pr ('default',$conf{printer}) {
- if(-e "$p/$p2/$pr.ini") { # -- printer profile linked, extract useful information
- print "$me: loading <$p/$p2/$pr> printer profile\n" if($conf{verbose});
- my $c = readSlicerConf("$p/$p2/$pr.ini");
-
- if($c->{machine_width} && $c->{machine_height} && $c->{machine_depth}) {
- ($printer->{build}->{x},$printer->{build}->{y},$printer->{build}->{z}) = ($c->{machine_width},$c->{machine_depth},$c->{machine_height});
- } elsif($c->{bed_shape}) {
- my(@co) = split(/,/,$c->{bed_shape});
- ($printer->{build}->{x},$printer->{build}->{y}) = split(/x/,$co[2]);
- }
-
- foreach my $k (sort keys %$c) { # -- merge data into conf
- # -- override conf but not if 'cli' defined it already
- if(!defined $conf{$k} || !defined $conf_src{$k} || $conf_src{$k}eq'printer') {
- if($c->{$k}=~/\$\{\w+\}/||$c->{$k}=~/\$\w+/) { # -- any variable to replace?
- $c->{$k} =~ s/\$\{(\w+)\}/defined $conf{$1} ? $conf{$1} : "\${$1\}" /eg; # -- only replace if variable is known
- $c->{$k} =~ s/\$(\w+)/defined $conf{$1} ? $conf{$1} : "\$$1" /eg; # -- only replace if variable is known
- }
- $conf{$k} = $c->{$k}, $conf_src{$k} = 'printer';
- $conf_ch{$k}++;
- }
- }
- foreach my $k (sort keys %conf) { # -- transfer command-line args to slicer config
- next if($internOption{$k});
- $c->{$k} = $conf{$k};
- }
- foreach my $k (sort keys %$c) { # -- transfer slicer config to printer settings (slicer independent - hopefully)
- $printer->{$k} = $c->{$k};
- }
- $done++ if($conf{printer}eq'default' || $pr ne 'default'); # -- if printer is defined, count only non-default entries
- }
- }
- }
- }
- if(!$done) {
- error("<$conf{printer}> settings not found, abort");
- }
-}
-
-# -- evaluate macros (e.g. "@thin")
-my @a;
-foreach(@f) {
-#while($_ = shift(@f)) {
- if(/^@([\w\-\+\/]+)/) { # -- evaluate macros
- my $m = $1;
- my $done;
- foreach my $d (@paths) {
- if(-e "$d/macro/$m.ini") {
- print "$me: eval macro $d/macro/$m\n" if($conf{verbose});
- push(@{$process->{macros}},"$d/macro/$m");
- open(my $fh,"<","$d/macro/$m.ini"); # -- let's read in order (readSlicerConf() would work, but returns unordered structure)
- while(<$fh>) {
- chop;
- s/#.*$//; # -- remove comments
- s/\s*$//; # -- remove trailing spaces
- my($k,$v);
- if(/^([\w\-\.]+)\s*$/) {
- $k = $1;
- my $k_ = $k; $k_ =~ s/\-/_/g; # -- printer has - => _ (yes, confusing)
- $conf_ch{$k_}++, $conf{$k_} = '\1', $conf_src{$k_} = 'macro:'.$m if((!defined $conf{$k_}) || $conf_src{$k_}eq'printer'); # -- cli options superceed macros
- next;
- } elsif(/^([\w\-\/]+)\s*=\s*"([^"]+)"/||/^([\w\-\.]+)\s*=\s*(\S.*)\s*$/) {
- $k = $1, $v = $2, $k =~ s/\-/_/g, $v = evalExpr($v); # -- options in macro _ => -
- my $k_ = $k; $k_ =~ s/\-/_/g; # -- printer has - => _ (yes, confusing)
- $conf_ch{$k_}++, $printer->{$k_} = $conf{$k_} = $v, $conf_src{$k_} = 'macro:'.$m if((!defined $conf{$k_}) || $conf_src{$k_}eq'printer'); # -- cli options superceed macros
- next;
- }
- }
- close $fh;
- $done++;
- }
- }
- if(!$done) {
- error("settings <$m> not found in any of (@paths), abort");
- }
-
- } else {
- push(@a,$_);
- }
-}
-@f = @a;
-
-my $cmd = shift(@f);
-
-if(-f $cmd) { # -- is it a file? => missing any command?
- unshift(@f,$cmd); # -- let's assume to print and put it back
- $cmd = 'print';
- print "$me: WARN: missing (print, slice, preview, render, etc), therefore is assumed\n";
-}
-
-my @f_in = @f; # -- preserve original file list
-
-if($conf{verbose}) {
- print "$me: conf from command-line and macros: ".toJSON(\%conf);
- print "$me: command: '$cmd'\n";
- print "$me: files: @f\n";
-}
-
-$SIG{INT} = sub {
- cleanup();
- exit -1;
-};
-
-if($conf{prepend_gcode}) {
- $conf{start_gcode} .= "\n";
- foreach my $l (split(/(\\n|;)/,$conf{prepend_gcode})) {
- $l =~ s/\$(\w+)/$conf{$1}/g;
- $conf{start_gcode} .= $l."\n";
- }
-}
-
-if($cmd eq 'analyze') { # -- not yet
- foreach my $fn (@f) {
- if($fn=~/\.(\w+)$/ && $formats{lc($1)}) {
- my $i = partRead($fn);
- if($i) {
- if($conf{verbose}) {
- print toJSON($i); # -- dump entire file
- } else {
- print "$fn:\n";
- print " size: ",toJSON($i->{size},{pretty=>0}),"\n";
- print " pos: ",toJSON($i->{min},{pretty=>0}),"\n";
- print " vertices: ",scalar @{$i->{vertices}},"\n";
- print " facets: ",scalar @{$i->{facets}},"\n";
- }
- }
- } else {
- print "$me: WARN: file-format not supported: <$fn>, only ",join(", ",sort keys %formats),"\n";
- }
- }
-
-} elsif($cmd eq 'slice') {
- header();
- foreach my $fn (@f) {
- $conf{output} = $fn, $conf{output} =~ s/\.\w+$/.gcode/, $conf{output} .= $conf{output}=~/\.gcode$/i? "" : ".gcode" if(!defined $conf{output});
- if($fn=~/\.scad$/i || $conf{scad} || $fn=~/^#scad\s*/) {
- my $c_fn = $conf{output};
- $conf{output} = "/tmp/print3r-$$.stl";
- scadToSTL($fn,\%conf);
- $fn = $conf{output};
- $conf{output} = $c_fn;
- push(@rm,$fn);
- } elsif($fn=~/\.sccad$/i || $conf{sccad} || $fn=~/^#sscad\s*/) {
- my $c_fn = $conf{output};
- $conf{output} = "/tmp/print3r-$$.stl";
- sccadToSTL($fn,\%conf);
- $fn = $conf{output};
- $conf{output} = $c_fn;
- push(@rm,$fn);
- } elsif($fn=~/\.(fcstd|iges|step|brep)$/i) {
- my $c_fn = $conf{output};
- $conf{output} = "/tmp/print3r-$$.stl";
- fcstdToSTL($fn,\%conf);
- $fn = $conf{output};
- $conf{output} = $c_fn;
- push(@rm,$fn);
- } elsif($fn=~/\.5mf$/i) {
- $conf{slicer} = '5dmaker' unless($conf_ch{slicer});
- }
- slicePart($fn,\%conf);
- my $fno = processGcode($conf{output});
- rename($fno,$conf{output}) if($fno ne $conf{output});
- }
-
-} elsif($cmd eq 'print' || $cmd eq 'render' || $cmd eq 'preview') {
- header();
- my(@fx);
- my $o = $conf{output}; # -- preserve original setting
-
- my $n = 0;
- BACK:
- foreach my $fn (@f) {
- $o = $fn, $o =~ s/\.\w+$/.png/ unless($o);
-
- if($fn=~/\.scad$/i || $conf{scad} || $fn=~/^#scad\s*/) {
- $conf{output} = "/tmp/print3r-$$-$n.stl";
- scadToSTL($fn,\%conf);
- $fn = $conf{output};
- push(@rm,$fn);
- } elsif($fn=~/\.sccad$/i || $conf{sccad} || $fn=~/^#scad\s*/) {
- $conf{output} = "/tmp/print3r-$$-$n.stl";
- sccadToSTL($fn,\%conf);
- $fn = $conf{output};
- push(@rm,$fn);
- } elsif($fn=~/\.(fcstd|iges|step|brep)$/i) {
- my $c_fn = $conf{output};
- $conf{output} = "/tmp/print3r-$$.stl";
- fcstdToSTL($fn,\%conf);
- $fn = $conf{output};
- $conf{output} = $c_fn;
- push(@rm,$fn);
- } elsif($fn=~/\.5mf$/i) {
- $conf{slicer} = '5dmaker' unless($conf_ch{slicer});
- }
-
- if($fn=~/\.(\w+)$/ && ($formats{lc($1)} && !$slicer->{$conf{slicer}}->{formats}->{lc($1)})) { # -- conversion needed for slicer?
- my $fmt = lc $1;
- my $p = partRead($fn);
- my $tmp = "/tmp/print3r-extra-$$-$n.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p);
- $fn = $tmp;
- push(@rm,$tmp);
- }
-
- if($fn=~/\.(\w+)$/ && $formats{lc($1)}) {
- #$conf{output} = "/tmp/print3r-$$-$n.gcode";
- #slicePart($fn,\%conf);
- #$fn = $conf{output};
- #push(@rm,$fn);
- push(@fx,$fn); # -- we gather all parts (.stl,.amf,.obj, etc)
-
- } elsif($fn=~/\.gcode$/i) { # -- already .gcode, we print direct
- if($cmd eq 'render') {
- $conf{output} = $fn, $conf{output} =~ s/\.\w+$/.png/;
- $conf{output} = $o if(defined $o);
- renderGcode($fn,\%conf);
- } elsif($cmd eq 'preview') {
- print "$me: launch gcode viewer ($conf{gviewer})\n" unless($conf{quiet});
- if(fork()==0) {
- exec($conf{gviewer},$fn);
- }
- wait;
- } else {
- printGcode($fn,\%conf);
- }
- } elsif($fn=~/^#(\d+)$/) { # -- reference past print job
- logReference($1);
- goto BACK;
-
- } else {
- print "$me: WARN: file-format not supported: <$fn>, only scad, sccad, ",join(", ",sort keys %formats),", gcode\n";
- }
- $n++;
- }
- if(@fx) { # -- slice all parts together and print then
- my $fn = $conf{output} = "/tmp/print3r-$$.gcode";
- slicePart(\@fx,\%conf);
- push(@rm,$fn);
- if($cmd eq 'render') {
- if(defined $o) {
- $conf{output} = $o;
- } else {
- $conf{output} = $fn;
- }
- $conf{output} =~ s/\.[^\/\.]$/.png/;
- renderGcode($fn,\%conf);
- } elsif($cmd eq 'preview') {
- print "$me: launch gcode viewer ($conf{gviewer})\n" unless($conf{quiet});
- if(fork()==0) {
- exec($conf{gviewer},$fn);
- }
- wait;
- } else {
- printGcode($fn,\%conf);
- }
- }
-
-} elsif($cmd eq 'gcode') {
- my $tmp = "/tmp/print3r-$$.gcode";
- open(my $fh,">",$tmp);
- print $fh "G4 S1\n"; # -- wait 1 sec, required for Marlin otherwise following commands go nowhere
- foreach (@f) {
- s/\\n/\n/g;
- print $fh $_."\n";
- }
- print $fh "G4 S1\n"; # -- wait 1 sec at the end
- print join("\n",@f)."\n" if($conf{verbose});
- close $fh;
-
- printGcode($tmp,\%conf);
- unlink $tmp;
-
-} elsif($cmd eq 'gconsole') {
- $| = 1;
- print "== $NAME $VERSION: Gcode Console ($cmd) - use CTRL-C or 'exit' or 'quit' to exit\n";
- print " for valid Gcode see https://reprap.org/wiki/G-code\n";
- print "conf: device $conf{device}, ";
-
- my $com = openSerial($conf{device});
-
- my $cpath; # -- find slicer base settings; cpath contains path
- foreach my $p (reverse @paths) {
- $cpath = $p, last if(-e "$p/gconsole");
- }
- print "$me: commands found at $cpath\n" if($conf{verbose} && $cpath);
-
- if(!eval { require Term::ReadLine }) {
- error("missing requirement Term::ReadLine::Gnu perl module, rerun `make requirements` from the installation directory");
- }
-
- my $t = new Term::ReadLine($me);
- #$t->bind_key(ord "\cc", 'abort');
-
- print "connected\n";
- while(1) {
- my $ln;
- if(0) {
- print "> ";
- $ln = readline(STDIN);
- } else {
- $ln = $t->readline(">",' '); # -- supports history (cursor-down/up)
- }
- my($cmd,$v) = gconsole($ln,$com,$cpath);
- foreach my $l (split(/\n/,$cmd)) {
- print "send <$l>\n" if($v || $conf{verbose});
- printerSend($com,$l."\n");
- my($resp) = printerResponse($com,$cmd);
- print "-----\n$resp.\n";
- }
- }
-
-} elsif($cmd eq 'client') {
- my $fn = "/tmp/print3r-client-$$.cfg";
- if(!-e $conf{device}) {
- error("can't open $conf{device} for remote access: $!");
- }
- if(!which('ser2net')) {
- error("ser2net not found or installed");
- }
- if(open(my $fh,">",$fn)) {
- my $p = 3380;
- my $pp = 0;
-
- $pp = $1*1, $p += $pp if($conf{device}=~/(\d+)$/);
- print $fh "$p:raw:600:$conf{device}:$conf{baudrate} 8DATABITS NONE 1STOPBIT -XONXOFF LOCAL -RTSCTS\n";
- close $fh;
-
- push(@rm,$fn);
-
- if(fork()==0) {
- exec("ser2net","-n","-c",$fn);
- }
- if(!$conf{quiet}) {
- print "$me: client started, use `--device=tcp:$ENV{HOST}:$pp` to connect\n";
- print "$me: use CTRL-C to kill/end gateway\n";
- print "$me: NOTE: anybody on your local network has the capability to access and \n$me: control this printer; it is YOUR RESPONSIBILITY to secure \n$me: your local network from unauthorized use of your printer(s)\n";
- }
- wait;
-
- } else {
- error("couldn't start ser2net job");
- }
-
-} elsif($cmd eq 'log') {
- my $fn = "$ENV{HOME}/.print3r/log.json";
- open(my $fh,"<",$fn);
- if(0 && (stat($fn))[7]>3000) {
- seek($fh,-2000*50,2);
- }
- my $sum;
- my $no = 1;
- my(@ma);
- my $disp = sub {
- my($js,$no) = @_;
- my $d = eval { from_json($js) };
- if($d && ref($d) eq 'HASH') {
- print to_json($d,{pretty=>1, canonical=>1}) if($conf{verbose} || $conf{format}eq'json');
- if($conf{format}ne'json') {
- print "#$no: ";
- print join(", ",@{$d->{file_list}}).($d->{settings} && $d->{settings}->{multiply_part}?" x $d->{settings}->{multiply_part}":"") if($d->{file_list});
- my @t = localtime($d->{time});
- my $dt = time()-$d->{time};
- print sprintf(": %04d/%02d/%02d %02d:%02d:%02d (%s ago): %d mins printing",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0],
- $dt > 60*60*24*365*1.5 ? sprintf("%.1f years",$dt/(60*60*24*365)) : $dt > 60*60*24*30*3 ? sprintf("%d months",$dt/(60*60*24*30)) : sprintf("%d days",$dt/(60*60*24)), $d->{duration}/60);
- print sprintf(" on <%s>",$d->{settings}->{printer}) if(defined $d->{settings}->{printer});
- print sprintf(", %.2fm filament",$d->{process}->{filament_used}/1000) if(defined $d->{process}->{filament_used});
- if($conf{output}) {
- my $e;
- foreach my $k (split(/,/,$conf{output})) {
- my $v = defined $d->{settings}->{$k} ? $d->{settings}->{$k} : defined $d->{process}->{$k} ? $d->{process}->{$k} : defined $d->{printer}->{$k} ? $d->{printer}->{$k} : $d->{$k};
- $e->{$k} = $v if(defined $v);
- }
- print ": ".toJSON($e,{pretty=>0}) if($e);
- }
- $sum->{filament} += $d->{process}->{filament_used} if($d->{process});
- $sum->{duration} += $d->{duration};
- $sum->{jobs}++;
- print "\n";
- }
- }
- };
- while(<$fh>) {
- my $m = 1;
- if(@f>0) {
- $m = 0;
- if($f[0]=~/^#(-?\d+)/) {
- $m++ if($1 >= 0 && $no == $1);
- push(@ma,{data=>$_,no=>$no}), @ma > -$1 ? shift(@ma):0 if($1 < 0);
- } else {
- $m++, print "match: " if(/$f[0]/i);
- }
- }
- &$disp($_,$no) if($m);
- $no++;
- }
- if(@ma) {
- foreach (@ma) {
- &$disp($_->{data},$_->{no});
- }
- }
- close $fh;
- print sprintf("== totals: %d jobs, %dm filament, %d days printing\n",$sum->{jobs},$sum->{filament}/1000,$sum->{duration}/60/60/24) if($conf{format}ne'json');
- exit 0;
-
-} elsif($cmd eq 'webgui') {
- webgui();
-
-} else {
- # slic3r, slic3r-pe, prusa, cura-legacy, cura
- # slicer4rtn, cura-slicer, 5dmaker, kirimoto
- print "$NAME ($me) $VERSION USAGE: [] [<...>]
-
- options:
- --verbose or -v or -vv increase verbosity
- --quiet or -q no output except fatal errors
- --baudrate= set baudrate, default: $conf{baudrate}
- -b
- --device= set device, default: $conf{device}
- -d
- --slicer= set slicer, default: $conf{slicer}
- -s
- ".join(", ",sort keys %$slicer)."
- --printer= config of printer, default: $conf{printer}
- -p
- --version display version and exit
- --output= define output file for 'slice' and 'render' command
- -o
- --scad consider all arguments as actual OpenSCAD code (not files)
- --scadlib= define OpenSCAD files separated by \",\" or \":\"
- by default '$conf{scadimport} ', change with --scadimport=include
- --prepend-gcode=... add manually start-gcode
- --layer-gcode=... insert gcode at layer change
- --display_update=off turn built-in display updates off
- --post_=... define a post-processing stage (use '%i' input file, '%o' output file)
- --post=[,] apply post-processing stage(s)
- part preprocessing:
- --random-placement place print randomly on the bed
- --auto-center place print in the center
- --multiply-part= multiply part(s)
- --rows= define rows for multiplied parts
- --cols= define cols for multiplied parts
- --scale=,, scale part x,y,z (absolute if 'mm' is appended)
- --scale= scale part f,f,f
- --rotate=,, rotate x,y,z
- --translate=,, translate x,y,z
- --mirror=,, mirror x,y,z (0=keep, 1=mirror)
- --uid= define part unique id (default: auto generated uid)
- --= include any valid slicer option (e.g. slic3r --help)
-
- commands:
- print [...] print (convert & slice & print) part(s) (".join(', ',sort keys %formats).")
- slice [...] slice file(s) to gcode (same formats as 'print')
- preview [...] slice & preview (same formats as 'print')
- render [...] render an image (use '--output=sample.png' or so)
- gcode [...] send gcode lines
- gconsole start gcode console
- client map USB connected printer to network (per device)
- log [|<#num>] list log of finished prints, use -v for details or --format=json to dump JSON
- use --output=[,] to list particular keys
- if num is negative, the last entries are shown, e.g. '#-5'
- help
-
- examples:
- export PRINT3R \"printer=my_printer\" --OR-- setenv PRINT3R \"printer=my_printer\"
- $me slice cube.stl
- $me --layer-height=0.2 -o test.gcode slice cube.stl
- $me -p ender3 -d /dev/ttyUSB1 print test.gcode
- $me -p corexy -d /dev/ttyUSB2 --layer-height=0.3 --fill-density=0 print cube.stl
- $me -p ender3 -d tcp:192.168.0.2 --layer-height=0.25 print cube.stl
- $me print cube.scad
- $me print parametric.scad --scad.A=20 --scad.B=30
- $me --scad print \"cube(20)\"
- $me --scad print \"cube(a)\" --scad.a=20
- $me log
- $me --output=uid,layer_height log cube
- $me log -v '#12'
- $me gcode 'G28 X Y' 'G1 X60' 'G28 Z'
- $me gconsole
- == Print3r: Gcode Console (gconsole) - use CTRL-C or 'exit' or 'quit' to exit
- for valid Gcode see https://reprap.org/wiki/G-code
- conf: device /dev/ttyUSB0, connected
- > M115
- ...
-
-";
-}
-
-cleanup();
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub internOption {
- my($k) = @_;
- return 1 if($internOption{$k});
- return 1 if($k=~/^--scad\./);
- return 0;
-}
-
-sub error {
- print STDERR "\n$me: ERROR: $_[0]\n";
- cleanup();
- exit -1;
-}
-
-sub header {
- if(!$conf{quiet}) {
- print "== $NAME $VERSION == https://github.com/Spiritdude/Print3r\n";
- print "$me: conf: device $conf{device}";
- print ", $conf{machine_name}" if($printer->{machine_name});
- print ", build/v $printer->{build}->{x}x$printer->{build}->{y}x$printer->{build}->{z}mm";
- print ", nozzle/d $printer->{nozzle_diameter}mm" if($printer->{nozzle_diameter});
- print ", layer/h $printer->{layer_height}mm" if($printer->{layer_height});
- print ", filament/d $printer->{filament_diameter}mm" if($printer->{filament_diameter});
- print "\n";
-
- }
-}
-
-sub cleanup {
- print "$me: cleanup\n" if($conf{verbose});
- if($conf{keep}) {
- print "INFO: @rm files kept for debugging\n";
- } else {
- unlink @rm if(@rm);
- }
- @rm = ();
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub scadToSTL {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
- my $fno;
-
- if($conf{scad} || $fn=~s/^#scad\s*//) { # -- any code to execute as well? $fn isn't a filename but code itself
- my $tmp = "/tmp/$me-$$-exec.scad";
- open(my $fh,">",$tmp) || error("can't create <$tmp>: $!");
- foreach my $l (split(/[,\:]/,$conf{scadlib})) {
- $l = cwd()."/".$l unless($l =~ /^\//);
- print $fh "$conf{scadimport} <$l>\n";
- }
- $fno = $fn;
- $fn .= ";" unless($fn=~/;\s*$/);
- print $fh $fn;
- close $fh;
- push(@rm,$tmp);
- $fn = $tmp;
- }
-
- if(fork()==0) {
- $conf{output} = $fn, $conf{output} =~ s/.\w+$/.stl/ unless($conf{output});
- unlink $conf{output};
- my(@a) = ('openscad');
- foreach my $k (sort keys %conf) {
- push(@a,"-D","$1=$conf{$k}") if($k =~ /^scad\.(\w+)/);
- }
- push(@a,'-o',$conf{output},$fn);
- unless($conf{verbose}) {
- close STDOUT;
- close STDERR;
- }
- exec(@a);
- }
- unless($conf{quiet}) {
- if($conf{scad}) {
- print "$me: scad to stl: '$fno'";
- print " with libraries: $conf{scadlib}" if($conf{scadlib});
- } else {
- print "$me: scad to stl: <$fn>";
- }
- }
- wait();
- if($?) {
- print "\n$me: openscad: ERROR (bad options/arguments?)\n";
- } else {
- print ", done.\n" unless($conf{quiet});
- }
-}
-
-sub sccadToSTL {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
- my $fno;
-
- if($conf{sccad} || $fn=~s/^#sscad\s*//) { # -- any code to execute as well? $fn isn't a filename but code itself
- my $tmp = "/tmp/$me-$$-exec.sccad";
- open(my $fh,">",$tmp) || error("can't create <$tmp>: $!");
- foreach my $l (split(/[,\:]/,$conf{sccadlib})) {
- print $fh "include('$l');\n";
- }
- $fno = $fn;
- $fn .= ";" unless($fn=~/;\s*$/);
- print $fh $fn;
- close $fh;
- push(@rm,$tmp);
- $fn = $tmp;
- }
-
- if(fork()==0) {
- $conf{output} = $fn, $conf{output} =~ s/.\w+$/.stl/ unless($conf{output});
- unlink $conf{output};
- my(@a) = ('scriptcad','--merge','-o',$conf{output},$fn);
- unless($conf{verbose}) {
- close STDOUT;
- close STDERR;
- }
- exec(@a);
- }
- unless($conf{quiet}) {
- if($conf{sccad}) {
- print "$me: sccad to stl: '$fno'";
- print " with libraries: $conf{sccadlib}" if($conf{sccadlib});
- } else {
- print "$me: sccad to stl: <$fn>";
- }
- }
- wait();
- if($?) {
- print "\n$me: scriptcad: ERROR (bad options/arguments?)\n";
- } else {
- print ", done.\n" unless($conf{quiet});
- }
-}
-
-sub fcstdToSTL {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
- my $fno;
-
- if(fork()==0) {
- $conf{output} = $fn, $conf{output} =~ s/.\w+$/.stl/ unless($conf{output});
- unlink $conf{output};
- my(@a) = ('freecad2any','-o',$conf{output},$fn);
- unless($conf{verbose}) {
- close STDOUT;
- close STDERR;
- }
- exec(@a);
- }
- print "$me: freecad to stl: <$fn>" unless($conf{quiet});
- wait();
- if($?) {
- print "\n$me: freecad2any: ERROR (bad options/arguments?)\n";
- } else {
- print ", done.\n" unless($conf{quiet});
- }
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub readSlicerConf {
- my($fn) = @_;
- my $i;
- my $n = 0;
-
- if(open(my $fh,"<",$fn)) {
- my $kl;
- while(<$fh>) {
- if($n==0 && /^{/) { # -- is it JSON?
- local $/; # -- read next in one go (not line-wise)
- $_ .= <$fh>;
- return fromJSON($_);
- }
- chop;
- s/^\s*#.*$//; # -- remove comments
- s/\s*$//; # -- remove trailing spaces
- next if(/^\s*#/);
- next if(/^\s*$/);
- my($k,$v);
- ($k,$v) = ($1,$2), $k =~ s/\-/_/g, $v =~ s/\\n/\n/g, $i->{$k} = $v, $kl = $k, next if(/^([\w\-\.]+)\s*=\s*"([^"]*)"/); # -- cura-like
- ($k,$v) = ($1,$2), $k =~ s/\-/_/g, $v =~ s/\\n/\n/g, $v =~ s/#.*$//, $i->{$k} = $v, $kl = $k, next if(/^([\w\-\.]+)\s*=\s*(\S.*)$/); # -- slicer-like
- if($kl && /^(\t| {3,})(\S.*)/) { # -- multi-line setting
- $v = $2;
- if($v=~/"([^"]+)"/) {
- $v = $1;
- } else {
- $v =~ s/#.*$//;
- }
- $v =~ s/\\n/\n/g;
- $i->{$kl} .= $v;
- next;
- }
- $n++;
- }
- close $fh;
- }
- return $i;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub remap {
- my($c) = @_;
- my $cn = { };
- my $done;
-
- print "$me: conf premap: ",toJSON(\%conf) if($conf{verbose}>1);
-
- foreach my $k (sort keys %$map) { # 1. apply all mapping
- my $expr = $map->{$k};
- my $vars = $map->{$k};
- my %undef;
-
- if(1) {
- while($vars =~ s/\$(\w+)//) { # -- sequentially replace variables
- my $kx = $1;
- if(defined $conf{$kx}) {
- $expr =~ s/\$(\w+)/$conf{$kx}/; # -- replace in expr
- } else {
- $undef{$kx}++ # -- remember undefined variables
- }
- }
-
- if(keys %undef) {
- print "\n$me: WARN: ",join(', ',sort keys %undef)," is undefined but required for expression '$k=$map->{$k}'\n";
- $cn->{$k} = $c->{$k};
- } else {
- my $v = $expr;
- $v =~ s/\{([^}]+)\}/eval($1)/eg;
- if($@) {
- print STDERR "\n$me ERROR: in evaluation of $k = '$expr': $@\n";
- }
- $cn->{$k} = $v;
- $done->{$k}++;
- }
- }
- }
- foreach my $k (sort keys %$c) { # -- 2. transfer non-mapped variables
- unless($done->{$k}) {
- my $v = defined $conf{$k} ? $conf{$k} : $c->{$k};
- $v =~ s/{([^}]+)\}/eval($1)/eg;
- $cn->{$k} = $v;
- }
- }
- print "$me: map & conf postmap: ",toJSON([$map,$cn]) if($conf{verbose}>1);
- return $cn;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub renderScad {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
-
- if(!$fn=~/\.scad$/i) {
- print "$me: WARN: you can only render .scad files but not <$fn>\n";
- }
- if(fork()==0) {
- $conf{output} = "sample.png" unless($conf{output});
- unless($conf{verbose}) {
- close STDERR;
- close STDOUT;
- }
- unlink $conf{output};
- exec("openscad","-o",$conf{output},"--imgsize=512,512",$fn);
- }
- print "render png: ";
- wait();
- if($?) {
- print "openscad: ERROR (bad options/arguments?)\n";
- } else {
- print "done.\n" unless($conf{quiet});
- }
-}
-
-sub renderSTL {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
-
- if(!$fn=~/\.stl$/i) {
- print "$me: WARN: you can only render .stl files but not <$fn>, skipped\n";
- return;
- }
- my $tmp = "./print3r-$$.stl";
- if(fork()==0) {
- $conf{output} = $fn, $fn =~ s/\.\w+$/.png/ unless($conf{output});
- if(open(my $fh,">",$tmp)) {
- print $fh "import(\"$fn\");\n";
- close $fh;
- unless($conf{verbose}) {
- close STDERR;
- close STDOUT;
- }
- unlink $conf{output};
- exec("openscad","-o",$conf{output},"--imgsize","512,512",$tmp);
- }
- }
- print "render stl: " unless($conf{quiet});
- wait();
- unlink $tmp;
- if($?) {
- print "\n$me: openscad: ERROR (bad options/arguments?)\n";
- } else {
- print "done.\n" unless($conf{quiet});
- }
-}
-
-sub _moveTo {
- my($p) = @_;
- print "$p->{x} $p->{y} $p->{z}\n";
-}
-
-sub _printTo {
- my($p) = @_;
- print "$p->{x} $p->{y} $p->{z}\n";
-}
-
-sub _3dto2d {
- my($p,$pe,$im,$view) = @_;
- my($x,$y);
- my $loc;
-
- unless($view) {
- $view->{x} = $printer->{build}->{x} / 2;
- $view->{y} = -$printer->{build}->{y} * 1.5;
- $view->{z} = $printer->{build}->{z} * 0.8;
- }
-
- $loc->{x} = 0;
- $loc->{y} = 0;
- $loc->{z} = 0;
-
- if($pe eq 'side') {
- $x = $p->{y}*$im->{width}/$printer->{build}->{y};
- $y = $im->{height} - $p->{z}*$im->{height}/$printer->{build}->{z};
- } elsif($pe eq 'front') {
- $x = $p->{x}*$im->{width}/$printer->{build}->{x};
- $y = $im->{height} - $p->{z}*$im->{height}/$printer->{build}->{z};
- } elsif($pe eq 'top') {
- $x = $p->{x}*$im->{width}/$printer->{build}->{x};
- $y = $im->{height} - $p->{y}*$im->{height}/$printer->{build}->{y};
- } else {
- if(1) {
- my $x_ = $p->{x} - $view->{x} - $loc->{x};
- my $y_ = $p->{z} - $view->{z} - $loc->{y};
- my $z_ = $p->{y} - $view->{y} - $loc->{z};
- $z_ = $z_ / 2;
- $x = (+($x_ / $z_)) * $im->{width}/2 + $im->{width}/2;
- $y = (-($y_ / $z_)) * $im->{height}/2 + $im->{height}/2 - 20; # -- leave some space for version/date
- } else {
- $x = $p->{x}*$im->{width}/$printer->{build}->{x} + $p->{z}*$im->{height}/$printer->{build}->{z}/2;
- $y = $im->{height}-$p->{y}*$im->{height}/$printer->{build}->{y} - $p->{z}*$im->{height}/$printer->{build}->{z}/3;
- }
- }
- ($x+$im->{xoff},$y+$im->{yoff});
-}
-
-sub renderGcode {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
-
- if(!$fn=~/\.gcode$/i) {
- print "$me: WARN: you can only render .gcode files but not <$fn>, skipped\n";
- return;
- }
-
- # $fn = processGcode($fn);
-
- my $fh;
- if(!open($fh,"<",$fn)) {
- error("<$fn> not found, abort.");
- }
-
- seek($fh,4096,-1); # -- try to parse end of .gcode from slic3r to pick up metadata
- my $tail;
- while(<$fh>) {
- chop;
- if(/^; filament used = ([\d\.]+)/) { # -- slic3r*
- $process->{filament_used} = $1;
- $tail++;
- } elsif(/^; filament used \[mm\] = ([\d\.]+)/) { # -- prusa
- $process->{filament_used} = $1;
- $tail++;
- } elsif($tail && /^; (\w+) = (.*)/) {
- $printer->{$1} = $2;
- }
- }
- if($printer->{machine_width}) {
- ($printer->{build}->{x},$printer->{build}->{y},$printer->{build}->{z}) = ($printer->{machine_width},$printer->{machine_depth},$printer->{machine_height});
- } elsif($printer->{bed_shape}) {
- ($printer->{build}->{x},$printer->{build}->{y}) = split(/x/,(split(/,/,$printer->{bed_shape}))[2]);
- }
-
- use GD;
-
- print "$me: render: read gcode" unless($conf{quiet});
- print ", reading <$fn>" if($conf{verbose});
-
- my($w,$h) = (512+170,512);
- my $im = new GD::Image($w,$h);
- my $col;
-
- $col->{bg} = $im->colorAllocate(255,255,255);
- $col->{extrusion} = $im->colorAllocate(128,200,128);
- $col->{box} = $im->colorAllocate(240,240,240);
- $col->{text} = $im->colorAllocate(128,128,128);
- $col->{bed} = $im->colorAllocate(200,200,200);
- $col->{bed_raster} = $im->colorAllocate(210,210,210);
- $col->{bed_raster2} = $im->colorAllocate(220,220,220);
-
- foreach my $r (0..100) {
- my $n = $im->colorAllocate($r/100*128+60,$r/100*128+127,$r/100*128+60);
- $col->{depth} = $n unless($col->{depth});
- }
-
- my($w0,$h0);
- my($w1,$h1);
- my($w2,$h2);
- my($w3,$h3);
-
- if($printer->{build}->{x} >= $printer->{build}->{y}) {
- $w0 = 512, $h0 = $w0 / $printer->{build}->{x} * $printer->{build}->{y};
- $w3 = 512, $h3 = $w3 / $printer->{build}->{x} * $printer->{build}->{y};
- } else {
- $h0 = 512, $w0 = $h0 / $printer->{build}->{y} * $printer->{build}->{x};
- $h3 = 512, $w3 = $h3 / $printer->{build}->{y} * $printer->{build}->{x};
- }
- if($printer->{build}->{x} >= $printer->{build}->{z}) {
- $w1 = 512, $h1 = $w1 / $printer->{build}->{x} * $printer->{build}->{z};
- } else {
- $h1 = 512, $w1 = $h1 / $printer->{build}->{x} * $printer->{build}->{z};
- }
- if($printer->{build}->{y} >= $printer->{build}->{z}) {
- $w2 = 512, $h2 = $w2 / $printer->{build}->{y} * $printer->{build}->{z};
- } else {
- $h2 = 512, $w2 = $h2 / $printer->{build}->{y} * $printer->{build}->{z};
- }
-
- my $wx = 171;
- my $hx = 171;
-
- # -- beds
- #$im->rectangle(0,0,$w0,$h0,$col->{bed});
- $im->setThickness(2);
- $im->line(512,$h1/3+1,512+$w1/3,$h1/3+1,$col->{bed});
- $im->line(512,$hx+$h2/3+1,512+$w2/3,$hx+$h2/3+1,$col->{bed});
- $im->filledRectangle(512+1,$hx*2+1,512+$w2/3-1,$hx*2+$h3/3-1,$col->{bed});
-
- # -- separating views
- $im->line(512,0,512,512,$col->{box});
- $im->line(512,$hx,512+$wx,$hx,$col->{box});
- $im->line(512,$hx*2,512+$wx,$hx*2,$col->{box});
-
- $im->setThickness(1);
- $im->string(gdSmallFont,512+5,5,"front",$col->{text});
- $im->string(gdSmallFont,512+5,$hx+5,"side",$col->{text});
- $im->string(gdSmallFont,512+5,$hx*2+5,"top",$col->{text});
-
- $im->clip(0,0,512,512);
-
- my $p = new GD::Polygon; # -- render bed with raster
- $p->addPt(
- _3dto2d({x=>0,y=>0,z=>0},'perspective',{width=>$w0,height=>$h0}));
- $p->addPt(
- _3dto2d({x=>$printer->{build}->{x},y=>0,z=>0},'perspective',{width=>$w0,height=>$h0}));
- $p->addPt(
- _3dto2d({x=>$printer->{build}->{x},y=>$printer->{build}->{y},z=>0},'perspective',{width=>$w0,height=>$h0}));
- $p->addPt(
- _3dto2d({x=>0,y=>$printer->{build}->{y},z=>0},'perspective',{width=>$w0,height=>$h0}));
- $im->filledPolygon($p,$col->{bed});
-
- for(my $i=0; $i<$printer->{build}->{x}; $i += 10) {
- my $n = 1;
- my $c = 'bed_raster';
- $n = 2, $c = 'bed_raster2' if($i%100==0);
- for(my $j=0; $j<$n; $j++) {
- $im->line(
- _3dto2d({x=>$i,y=>0,z=>0},'perspective',{xoff=>$j,width=>$w0,height=>$h0}),
- _3dto2d({x=>$i,y=>$printer->{build}->{y},z=>0},'perspective',{xoff=>$j,width=>$w0,height=>$h0}),
- $col->{$c}
- );
- }
- }
- for(my $i=0; $i<$printer->{build}->{y}; $i += 10) {
- my $n = 1;
- my $c = 'bed_raster';
- $n = 2, $c = 'bed_raster2' if($i%100==0);
- for(my $j=0; $j<$n; $j++) {
- $im->line(
- _3dto2d({x=>0,y=>$i,z=>0},'perspective',{yoff=>$j,width=>$w0,height=>$h0}),
- _3dto2d({x=>$printer->{build}->{x},y=>$i,z=>0},'perspective',{yoff=>$j,width=>$w0,height=>$h0}),
- $col->{$c}
- );
- }
- }
- $im->clip(0,0,512+170,512);
-
- seek($fh,0,0); # -- back to the beginning
-
- my($p,$lp);
-
- foreach my $i (qw(x y z e f)) {
- $lp->{$i} = $p->{$i} = 0;
- }
-
- my($z);
-
- my $line = sub {
- my($n,$p,$x1,$y1,$x2,$y2,$c) = @_;
- #if(!defined $z->[$n]->{$y1} || $z->[$n]->{$y1} > $p->{y}) {
- $im->line($x1,$y1,$x2,$y2,$c);
- #}
- #$z->[$n]->{$y1} = $p->{z};
- };
-
- my $fa;
-
- $fa++, $process->{filament_used} = 0 unless($process->{filament_used}); # -- filament usage known? if not, recalculate
-
- while(<$fh>) {
- chop;
-
- #next if(/^;/ || /^\s*$/);
- #s/;.*$//;
- s/\*.*$//;
-
- my($c,$id) = (/^([MG])(\d+)/);
-
- if($c eq 'G' && ($id == 1 || $id == 0)) { # -- move or extrude
- my $px;
- foreach my $pa (split(/ /)) {
- $px->{lc($1)} = $2 if($pa=~/([XYZEF])([\d\.]+)/);
- }
- foreach my $k (keys %$px) { # -- update $p
- $p->{$k} = $px->{$k};
- }
- if($px->{e}) { # -- move or extrude
- #_printTo($p);
- #$im->line($lx,$ly,$x,$y,$col->{extrusion});
- #$im->line(_3dto2d($lp,'perspective',{width=>$w0,height=>$h0}),_3dto2d($p,'perspective',{width=>$w0,height=>$h0}),$p->{z}/$printer->{build}->{z}*200+$col->{depth});
- # -- basic shading based on x/y angle
- my $c = abs(atan2($lp->{y}-$p->{y},$lp->{x}-$p->{x})) * 3; $c = ($c % 30) / 30 * 100 + $col->{depth};
- &$line(0,$p,_3dto2d($lp,'perspective',{width=>$w0,height=>$h0}),_3dto2d($p,'perspective',{width=>$w0,height=>$h0}),$c);
- &$line(1,$p,_3dto2d($lp,'front',{xoff=>512,yoff=>0,width=>$w1/3,height=>$h1/3-1}),_3dto2d($p,'front',{xoff=>512,yoff=>0,width=>$w1/3,height=>$h1/3-1}),$c);
- &$line(2,$p,_3dto2d($lp,'side',{xoff=>512,yoff=>$hx,width=>$w2/3,height=>$h2/3-1}),_3dto2d($p,'side',{xoff=>512,yoff=>$hx,width=>$w2/3,height=>$h2/3-1}),$c);
- &$line(3,$p,_3dto2d($lp,'top',{xoff=>512,yoff=>$hx*2,width=>$w3/3,height=>$h3/3-1}),_3dto2d($p,'top',{xoff=>512,yoff=>$hx*2,width=>$w3/3,height=>$h3/3-1}),$c);
- $process->{filament_used} += abs($lp->{e}-$p->{e}) < 12 ? $p->{e}-$lp->{e} : 0 if($fa);
-
- } else {
- #_moveTo($p);
- }
- foreach my $k (keys %$p) {
- $lp->{$k} = $p->{$k};
- }
- }
- }
- close $fh;
-
- my $l = 0;
- my $print = sub {
- $im->string(gdSmallFont,5,5+$l*15,$_[0],$col->{text});
- $l++;
- };
- $im->clip(0,0,512,512);
- &$print(sprintf("%15s %s","part".(@f_in>1?"s":""),join(' ',@f_in)));
- &$print(sprintf("%15s %.fx%.fx%.fmm",'build',$printer->{build}->{x},$printer->{build}->{y},$printer->{build}->{z}));
- &$print(sprintf("%15s %.2fmm",'nozzle/d',$printer->{nozzle_diameter})) if($printer->{nozzle_diameter});
- &$print(sprintf("%15s %.2fmm",'layer/h',$printer->{layer_height})) if($printer->{layer_height});
- &$print(sprintf("%15s %.2fmm",'filament/d',$printer->{filament_diameter})) if($printer->{filament_diameter});
- &$print(sprintf("%15s %.2fm",'filament used',$process->{filament_used}/1000)) if($process->{filament_used});
- &$print(sprintf("%15s %s%s",'slicer',$conf{slicer},$process->{time}->{slice}?sprintf(" (%dm %ds)",int($process->{time}->{slice}/60),$process->{time}->{slice}%60):""));
-
- $im->string(gdSmallFont,15,512-15,"$NAME $VERSION",$col->{bed});
- @_ = localtime();
- $im->string(gdSmallFont,512-135,512-15,sprintf("%04d/%02d/%02d %02d:%02d:%02d",$_[5]+1900,$_[4]+1,$_[3],$_[2],$_[1],$_[0]),$col->{bed});
-
- print ", write '$conf{output}'" unless($conf{quiet});
- $conf{output} = $fn, $conf{output} =~ s/\.\w+$/.png/ unless($conf{output});
- open(my $fh,">",$conf{output});
- binmode($fh);
- print $fh $im->png();
- close $fh;
-
- print ", done.\n" unless($conf{quiet});
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub slicePart {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
- my $st = time();
-
- if(!ref($fn) && $fn=~/\.(\w+)$/ && ($formats{lc($1)} && !$slicer->{$conf{slicer}}->{formats}->{lc($1)}) ) {
- my $p = partRead($fn);
- my $tmp = "/tmp/print3r-extra-$$.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p);
- push(@rm,$tmp);
- $fn = $tmp;
- }
- if(!ref($fn) && $fn=~/\.(\w+)$/ && !$formats{lc($1)}) {
- my $f = join(", ",keys %formats);
- print "$me: WARN: you can only slice $f files but not <$fn>, skipped\n";
- return;
- }
-
- if(1) { # -- check existence of all file(s)
- foreach my $f (ref($fn)?@$fn:$fn) {
- error("cannot slice '$f': file not found") if(!-e $f);
- }
- }
- my $tmp = "/tmp/print3r-$$.gcode";
-
- my @a = ($slicer->{$conf{slicer}}->{exe}||$conf{slicer});
-
- print "$me: slice ($conf{slicer}) part".(ref($fn) && @$fn>1?"s":"")." <".join(", ",ref($fn)?@$fn:$fn)."> to gcode: " unless($conf{quiet});
-
- if($conf{scale} || $conf{rotate} || $conf{translate} || $conf{mirror}) {
- my @fx = ();
- my $n = 0;
- foreach my $f (ref($fn)?@$fn:$fn) {
- print ", " if($n);
- printf "read %s",$f=~/^\/tmp/?"part":"'$f'" unless($conf{quiet});
- my $p = partRead($f);
- $p = partRecenter($p,[1,1,$conf{rotate}?1:-1]);
- $p = partMirror($p,[split(/,/,$conf{mirror})]) if(defined $conf{mirror});
- $p = partScale($p,[split(/,/,$conf{scale})]) if(defined $conf{scale});
- $p = partRotate($p,[split(/,/,$conf{rotate})]) if(defined $conf{rotate});
- $p = partTranslate($p,[split(/,/,$conf{translate})]) if(defined $conf{translate});
- $p = partRecenter($p,[0,0,-1]) if($conf{slicer}=~/cura/); # -- cura needs part to reside z=0
- printf ", size %.1fx%.1fx%.1f",$p->{size}->[0],$p->{size}->[1],$p->{size}->[2] if($conf{scale} && !$conf{quiet});
- my $tmp = "/tmp/print3r-$$-0-$n.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p);
- push(@fx,$tmp);
- $n++;
- }
- $fn = \@fx;
- push(@rm,@fx);
-
- } else {
- print "prepare" unless($conf{quiet});
- }
-
- # -- multiply parts (slic3r supports it built-in, otherwise we have to duplicate & reposition parts)
- if(!($conf{slicer}=~/(slic3r|prusa|super)/) && $conf{multiply_part}>1 ) {
- my @pa;
- foreach my $f (ref($fn)?@$fn:$fn) {
- push(@pa,partRead($f));
- }
- my @fx;
- my $j = 0;
- foreach my $p (@pa) {
- my($w,$h) = ($p->{size}->[0],$p->{size}->[1]);
- my $p0 = { };
- my $n = $conf{multiply_part};
- my $ry = $w / $h;
- my $xn = $conf{cols} || ($conf{rows} ? int($n / $conf{rows} + 0.5) : int(sqrt($n)) );
- print ", multiply ${n}x ($xn cols)" unless($conf{quiet});
- my @pb;
- foreach my $i (0..$n-1) {
- my $pn = partTranslate(partRecenter($p,[1,1,0]),[($w+5)*($i%$xn),($h+5)*int($i/$xn),0]);
- partMerge($p0,$pn);
- }
- my $tmp = "/tmp/print3r-$$-ar-$j.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p0);
- push(@fx,$tmp);
- $j++;
- }
- $fn = \@fx;
- push(@rm,@fx);
- }
-
- if((!$conf{stick_position}) && !($conf{slicer}=~/(slic3r|prusa|super)/) && ref($fn) && @{$fn} > 1) { # -- non-slic3r we have to merge/pack now
- print ", arrange ",scalar @{$fn}," parts" unless($conf{quiet} || @{$fn}==1);
- my @pa;
- foreach my $f (@$fn) {
- push(@pa,partRead($f)); # -- a bit wasteful, but we don't necessarly have read it already
- }
- my $p = partsArrange(@pa,$printer);
- my $tmp = "/tmp/print3r-$$-ar.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p);
- push(@rm,$tmp);
- $fn = $tmp; # -- back to a single part
- }
-
- # -- replace parts (slic3r supports it built-in, otherwise we have to reposition part(s))
- if((!($conf{slicer}=~/(slic3r|prusa|super|rtn|mandoline|zplus|5dmaker|lab|vox3l|voxgl)/)) && ($conf{auto_center}||$conf{random_placement})) {
- my $n = 0;
- my @fx;
- foreach my $f (ref($fn)?@$fn:$fn) {
- my $p = partRead($f);
- $p = partRecenter($p,[1,1,0]); # -- required for repositioning
- my($x,$y);
- if($conf{random_placement}) {
- ($x,$y) = ($printer->{build}->{x}*(rand()*0.5+0.5/2),$printer->{build}->{y}*(rand()*0.5+0.5/2));
- print ", reposition [",int($x),",",int($y),"]" if(!$conf{quiet});
- } else {
- ($x,$y) = ($printer->{build}->{x}/2,$printer->{build}->{y}/2);
- }
- $x -= $printer->{build}->{x}/2, $y -= $printer->{build}->{y}/2 if($conf{slicer}=~/cura/); # -- cura assumes 0,0 at center of plate
- $p = partTranslate($p,[int($x),int($y),0]);
- my $tmp = "/tmp/print3r-$$-1-$n.".($p->{volumes}?"amf":($slicer->{$conf{slicer}}->{formats}->{obj}?"obj":"stl"));
- partWrite($tmp,$p);
- push(@fx,$tmp);
- $n++;
- }
- $fn = \@fx;
- push(@rm,@fx);
- }
-
- my($exit,$out);
-
- my $cpath; # -- find slicer base settings; cpath contains path
- foreach my $p (@paths) {
- $cpath = $p, last if(-e "$p/slicer/$conf{slicer}/base.ini");
- }
-
- print "$me: main base settings found at [$cpath]/slicer/$conf{slicer}/base.ini\n" if($conf{verbose});
-
- print "$me: settings for slicing:\n".toJSON(\%conf)."\n" if($conf{verbose});
-
- if($conf{slicer}=~/slic3r/||$conf{slicer}eq'prusa'||$conf{slicer}eq'super') { # -- slic3r, slic3r-pe, prusa, superslicer
- # -- compose argument list for slic3r
- if(1) {
- # -- note: slic3r and slic3r-pe won't support all settings coming from command line
- # solution: we compose a temporary settings file which merges command line options
- my $tmp = "/tmp/print3r-$$-setting.ini";
- my $c = readSlicerConf("$cpath/slicer/$conf{slicer}/base.ini");
-
- $c = remap($c);
-
- open(my $fh,">",$tmp);
-
- foreach my $k (sort keys %$c) { # -- write from existing base configuration
- unless(defined $conf{$k}) {
- my $d = $c->{$k}; $d =~ s/\n/\\n/g;
- $d = 1 if($d eq "\\1");
- $d = ($d*1)."%" if($k eq 'fill_density'); # -- prusa & super are picky
- print $fh "$k = $d\n" unless($conf{$k});
- }
- }
-
- foreach my $k (sort keys %conf) { # -- command line arguments & macros
- unless(internOption($k)) {
- my $d = $conf{$k}; $d =~ s/\n/\\n/g;
- $d = 1 if($d eq "\\1");
- $d = ($d*1)."%" if($k eq 'fill_density'); # -- prusa & super are picky
- print $fh "$k = $d\n";
- }
- }
- close $fh;
- push(@a,'--export-gcode') if($conf{slicer}eq'prusa'||$conf{slicer}eq'super');
- push(@a,'--load',$tmp);
- push(@rm,$tmp);
- #push(@a,'--gcode-comments');
- push(@a,'--before-layer-gcode=;LAYER:[layer_num]'); # -- make it Cura compatible a bit
- }
- if(defined $conf{output}) {
- unlink $conf{output};
- push(@a,'--output',$conf{output});
- } else {
- push(@a,'--output',$tmp);
- push(@rm,$tmp);
- }
- if($conf{random_placement}) {
- my(@pos) = (int($printer->{build}->{x}*(rand()*0.5+0.5/2)),int($printer->{build}->{y}*(rand()*0.5+0.5/2)));
- # -- TODO: check if new printer works with size of part (we have to read the part(s) to know its dimension)
- # in case there are multiple parts, we don't know how slic3r combines them ...
- push(@a,$conf{slicer}eq'prusa'||$conf{slicer}eq'super'?'--center':'--print-center',join(",",@pos));
- print ", reposition [$pos[0],$pos[1]]" unless($conf{quiet});
- } elsif($conf{auto_center}) {
- push(@a,$conf{slicer}eq'prusa'||$conf{slicer}eq'super'?'--center':'--print-center',($printer->{build}->{x}/2).",".($printer->{build}->{y}/2));
- }
- if(0) {
- foreach my $k (sort keys %conf) { # -- likely not needed, since we rewrote temporary config with all setttings
- next if(internOption($k));
- if($conf{$k} eq '\1') {
- push(@a,"--$k");
- } else {
- push(@a,"--$k",$conf{$k});
- }
- }
- }
- if($conf{multiply_part}>1) {
- push(@a,"--merge");
- print ", multiply $conf{multiply_part}x" unless($conf{quiet});
- foreach(1..$conf{multiply_part}) {
- push(@a,ref($fn)?@$fn:$fn);
- }
- } else {
- if(ref($fn)eq'ARRAY') {
- push(@a,"--merge") if(@$fn>1);
- push(@a,@$fn);
- } else {
- push(@a,$fn);
- }
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- ($exit,$out) = execProgram(@a);
-
- } elsif($conf{slicer}=~/rtn/) { # -- slicer4rtn
- my(%iconf) = (
- slicer => 'slic3r',
- mode => 'outside',
- axis => 4,
- angle => 45,
- center => "0,0",
- bed_center => "100,100",
- zoff => 0,
- max_speed => 0,
- motion_minz => 0.2,
- erate => 1.0,
- efmax => 3,
- efmin => 0.01,
- inter_steps => 2,
- subdivide => 2,
- output => 1,
- keep => 1,
- recenter => 1,
- rot_gcode => 'A',
- rot_revolv => 1,
- rot_offset => 0,
- rot_fixed => 0,
- tilt_gcode => 'B',
- layer_height => 0.2,
- start_gcode => 1,
- end_gcode => 1
- );
- if(1) {
- my $tmp = "/tmp/print3r-$$-setting.ini";
- my $c = readSlicerConf("$cpath/slicer/$conf{slicer}/base.ini");
- $c = remap($c);
-
- open(my $fh,">",$tmp);
- foreach my $k (sort keys %$c) { # -- write from existing base configuration
- unless(defined $conf{$k}) {
- my $d = $c->{$k}; $d =~ s/\n/\\n/g;
- $d = 1 if($d eq "\\1");
- print $fh "$k = $d\n" unless(defined $conf{$k} || defined $iconf{$k} || $k =~ /^slicer4rtn\./);
- }
- }
-
- foreach my $k (sort keys %conf) { # -- command line arguments & macros
- unless(internOption($k)) {
- my $d = $conf{$k}; $d =~ s/\n/\\n/g;
- $d = 1 if($d eq "\\1");
- print $fh "$k = $d\n" unless(defined $iconf{$k} || $k =~ /^slicer4rtn\./);
- }
- }
- close $fh;
- push(@a,"--slicer.load=$tmp");
- push(@rm,$tmp);
- }
- if(defined $conf{output}) {
- unlink $conf{output};
- push(@a,"--output=$conf{output}");
- } else {
- push(@a,"--output=$tmp");
- push(@rm,$tmp);
- }
- #push(@a,"--slicer=prusa-slicer");
- if($conf{random_placement}) {
- my(@pos) = (int($printer->{build}->{x}*(rand()*0.5+0.5/2)),int($printer->{build}->{y}*(rand()*0.5+0.5/2)));
- # -- TODO: check if new printer works with size of part (we have to read the part(s) to know its dimension)
- # in case there are multiple parts, we don't know how slic3r combines them ...
- push(@a,($conf{slicer}eq'prusa'||$conf{slicer}eq'super'?'--center':'--bed-center')."=".join(",",@pos));
- print ", reposition [$pos[0],$pos[1]]" unless($conf{quiet});
- } elsif($conf{auto_center}) {
- push(@a,($conf{slicer}eq'prusa'||$conf{slicer}eq'super'?'--center':'--bed-center')."=".($printer->{build}->{x}/2).",".($printer->{build}->{y}/2));
- }
- foreach my $k (sort keys %conf) { # -- pass slicer4rtn native args by command line
- my $k0 = $k;
- $k =~ s/^slicer4rtn\.//;
- if(defined $iconf{$k} && $k0 ne 'slicer') {
- my $k_ = $k;
- $k_ =~ s/_/-/g;
- my $v = $conf{$k0};
- $v =~ s/\n/\\n/g;
- push(@a,"--$k_=$v")
- }
- }
- push(@a,"-v") if($conf{verbose});
- if(ref($fn)eq'ARRAY') {
- push(@a,"--merge") if(@$fn>1);
- push(@a,@$fn);
- } else {
- push(@a,$fn);
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- ($exit,$out) = execProgram(@a);
-
- } elsif($conf{slicer}eq'mandoline') { # -- mandoline
- if(defined $conf{output}) {
- unlink $conf{output};
- push(@a,"-o",$conf{output});
- } else {
- push(@a,"-o",$tmp);
- push(@rm,$tmp);
- }
- if(open(my $fh,"<","$cpath/slicer/$conf{slicer}/base.ini")) { # -- use some sane settings, we read it sequentially to keep order (!!)
- while(<$fh>) {
- chop;
- next if(/^\s*#/);
- if(/(\w+)="([^"]*)"/||/(\w+)=(\S.*)/) {
- my($k,$v) = ($1,$2);
- $v =~ s/\\n/\n/g;
- push(@a,"-S","$k=$v") unless($conf{$k});
- }
- }
- close $fh;
- } else {
- print "$me: WARN: no base.ini found in @paths\n";
- }
- my $c;
- foreach my $k (sort keys %conf) {
- next if(internOption($k));
- $c->{$k} = $conf{$k}; # -- just copy
- }
- $c = remap($c);
- foreach my $k (sort keys %$c) {
- my $v = $c->{$k}; $v =~ s/\\n/\n/g;
- push(@a,"-S","$k=$v");
- }
- if($conf{random_placement}) {
- my(@pos) = (int($printer->{build}->{x}*(rand()*0.5+0.5/2)),int($printer->{build}->{y}*(rand()*0.5+0.5/2)));
- # -- TODO: check if new printer works with size of part (we have to read the part(s) to know its dimension)
- # in case there are multiple parts, we don't know how slic3r combines them ...
- push(@a,("-S","bed_center_x=$pos[0]","-S","bed_center_y=$pos[1]"));
- print ", reposition [$pos[0],$pos[1]]" unless($conf{quiet});
- } elsif($conf{auto_center}) {
- push(@a,('-S','bed_center_x='.($printer->{build}->{x}/2),'-S','bed_center_y='.($printer->{build}->{y}/2)));
- }
- foreach(1..$conf{verbose}) {
- push(@a,"-v");
- }
- if(ref($fn)eq'ARRAY') {
- #push(@a,"--merge") if(@$fn>1);
- push(@a,@$fn);
- } else {
- push(@a,$fn);
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- ($exit,$out) = execProgram(@a);
-
- } elsif($conf{slicer}eq'cura-legacy') { # -- cura-legacy
- push(@a,"-v"); # -- verbose
- #push(@a,'-c',"$cpath/slicer/cura-legacy/base.ini");
- if(0) {
- if($conf{random_placement}) {
- my(@pos) = (int($printer->{build}->{x}*(rand()*0.5+0.5/2)),int($printer->{build}->{y}*(rand()*0.5+0.5/2)));
- $conf{'position.X'} = $pos[0];
- $conf{'position.Y'} = $pos[1];
- print ", reposition [$pos[0],$pos[1]]" unless($conf{quiet});
- } elsif($conf{auto_center}) {
- $conf{'position.X'} = $printer->{build}->{x}/2;
- $conf{'position.Y'} = $printer->{build}->{y}/2;
- }
- }
- if($conf{output}) {
- push(@a,'-o',$conf{output});
- } else {
- push(@a,'-o',$tmp);
- push(@rm,$tmp);
- }
- my $c;
- foreach my $k (sort keys %conf) {
- next if(internOption($k));
- $c->{$k} = $conf{$k}; # -- just copy
- }
- $c = remap($c);
- # -- manually add setting temperatures so we don't have to in start/end_gcode to stay flexible
- $c->{startCode} = "; $NAME $VERSION\nG90\n".$c->{startCode};
- $c->{startCode} .= "M109 S$c->{temperature}\n" if($c->{temperature});
- $c->{startCode} .= "M140 S$c->{bed_temperature}\n" if($c->{bed_temperature});
- foreach my $k (sort keys %$c) {
- my $v = $c->{$k}; $v =~ s/\\n/\n/g;
- push(@a,"-s","$k=$v");
- }
- if($conf{multiply_part}>1) {
- foreach(1..$conf{multiply_part}) {
- foreach(ref($fn)?@$fn:$fn) {
- push(@a,$_);
- }
- }
- } else {
- if(ref($fn)eq'ARRAY') {
- foreach(ref($fn)?@$fn:$fn) {
- push(@a,$_);
- }
- } else {
- push(@a,$fn);
- }
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- ($exit,$out) = execProgram(@a,{close_stderr=>1,log_stderr=>1});
-
- } elsif($conf{slicer}=~/cura/i && $conf{slicer}ne'cura-slicer') { # -- cura, cura4, cura5 & curax
- push(@a,"slice");
- #push(@a,"-p"); # -- progress
- push(@a,"-v") if $conf{slicer} ne 'cura5'; # -- verbose
- #push(@a,'-j',"slicers/Cura/resources/definitions/fdmprinter.def.json");
- push(@a,'-j',"$cpath/slicer/$conf{slicer}/fdmprinter.def.json");
- #push(@a,'-j',"slicers/Cura/resources/definitions/fdmextruder.def.json");
- #push(@a,'-j',"slicers/Cura/resources/definitions/prusa_i3.def.json");
- #push(@a,'-j',$conf{printer}) if($conf{printer});
- #push(@a,"-g");
- foreach my $n (0..($conf{extruder_count}||1)-1) {
- #push(@a,"-e$n"); # -- doesn't work, throws error
- push(@a,"-s","extruder_nr=$n");
- my @ks;
- if(open(my $fh,"<","$cpath/slicer/$conf{slicer}/base.ini")) { # -- use some sane settings, we read it sequentially to keep order (!!)
- while(<$fh>) {
- chop;
- if(/(\w+)="([^"]*)"/||/(\w+)=(\S.*)/) {
- my($k,$v) = ($1,$2);
- $v =~ s/\\n/\n/g;
- push(@a,"-s","$k=$v") unless($conf{$k});
- }
- }
- close $fh;
- } else {
- print "$me: WARN: no base.ini found in @paths\n";
- }
- my $c;
- foreach my $k (sort keys %conf) {
- next if(internOption($k));
- $c->{$k} = $conf{$k}; # -- just copy
- }
- $c = remap($c);
- foreach my $k (sort keys %$c) {
- my $v = $c->{$k}; $v =~ s/\\n/\n/g;
- push(@a,"-s","$k=$v");
- }
- }
- if(ref($fn)eq'ARRAY') {
- my $n = 0;
- foreach my $o (ref($fn)?@$fn:$fn) {
- #push(@a,"-e$n");
- #push(@a,"-s","extruder_nr=$n"); $n++;
- push(@a,"-l",$o);
- # push(@a,'--next');
- }
- } else {
- push(@a,"-l",$fn);
- }
- if($conf{output}) {
- push(@a,'-o',$conf{output});
- } else {
- push(@a,'-o',$tmp);
- push(@rm,$tmp);
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- if($conf{slicer}eq'cura5') {
- ($exit,$out) = execProgram(@a,{close_stderr=>1,close_stdout=>1,log_stderr=>'/dev/null',log_stdout=>$conf{verbose}<2?'/dev/null':0});
- } else {
- ($exit,$out) = execProgram(@a,{close_stderr=>1,log_stderr=>1}); # -- CuraEngine-3.x & 4.x won't like closed/redirected stdout
- }
-
- } else {
- unless($conf{slicer}=~/(cura-slicer|5dmaker|kirimoto|zplus|lab|vox3l|voxgl|enoch|goslice)/) {
- print "WARN: slicer '$conf{slicer}' not officially supported, but trying to launch it\n";
- }
- if(defined $conf{output}) {
- unlink $conf{output};
- push(@a,"-o",$conf{output});
- } else {
- push(@a,"-o",$tmp);
- push(@rm,$tmp);
- }
- # -- Note: in general all variables are using _ as spacer, if the slicer reqiures '-' again, make it so (like for `goslice`)
- if(open(my $fh,"<","$cpath/slicer/$conf{slicer}/base.ini")) { # -- use some sane settings, we read it sequentially to keep order (!!)
- while(<$fh>) {
- chop;
- next if(/^\s*#/);
- if(/([\w\-]+)="([^"]*)"/||/([\w\-]+)=(\S.*)/) {
- my($k,$v) = ($1,$2);
- #$v =~ s/\\n/\n/g;
- $k =~ s/_/-/g if($conf{slicer}eq'goslice');
- push(@a,"--$k=$v") unless(defined $conf{$k});
- }
- }
- close $fh;
- } else {
- print "$me: WARN: no base.ini found in @paths\n";
- }
-
- my %strict;
- if(open(my $fh,"<","$cpath/slicer/$conf{slicer}/strict.ini")) { # -- has it strict behaviour? only certain settings otherwise fails?
- while(<$fh>) {
- chop;
- next if(/^\s*#/);
- if(/^([\w\-]+)/) {
- $strict{$1}++;
- }
- }
- close $fh;
- }
-
- foreach my $k (sort keys %conf) { # -- pass .* native args by command line
- my $k0 = $k;
- my $sl = $conf{slicer};
- $sl =~ s/-/_/g;
- if($k =~ s/^$sl\.//) {
- my $k_ = $k;
- $k_ =~ s/_/-/g;
- my $v = $conf{$k0};
- $v =~ s/\n/\\n/g;
- next if(%strict && !defined $strict{$k_});
- #$k_ =~ s/_/-/g if($conf{slicer}eq'goslice'); # -- done already above
- push(@a,"--$k_=$v")
- }
- }
- my $c;
- foreach my $k (sort keys %conf) {
- next if(internOption($k));
- my $v = $conf{$k};
- $v =~ s/\n/\\n/g unless($conf{slicer}eq'goslice');
- $v = 1 if($v eq '\1');
- next if(%strict && !defined $strict{$k});
- $c->{$k} = $v; # -- just copy
- }
- $c = remap($c);
- foreach my $k (sort keys %$c) {
- my $v = $c->{$k};
- $v =~ s/\n/\\n/g unless($conf{slicer}eq'goslice');
- $v = 1 if($v eq '\1');
- next if(%strict && !defined $strict{$k});
- $k =~ s/_/-/g if($conf{slicer}eq'goslice');
- push(@a,"--$k=$v");
- }
- if($conf{random_placement}) {
- my(@pos) = (int($printer->{build}->{x}*(rand()*0.5+0.5/2)),int($printer->{build}->{y}*(rand()*0.5+0.5/2)));
- # -- TODO: check if new printer works with size of part (we have to read the part(s) to know its dimension)
- # in case there are multiple parts, we don't know how slic3r combines them ...
- if($conf{slicer}eq'kirimoto') {
- push(@a,"--bedOrigin=$pos[0],$pos[1]","--outputOriginCenter=true");
- } elsif($conf{slicer}eq'goslice') {
- push(@a,"--center=".($pos[0]*1000)."_".($pos[1]*1000)."_0");
- } else {
- push(@a,"--bed_center=$pos[0],$pos[1]");
- }
- print ", reposition [$pos[0],$pos[1]]" unless($conf{quiet});
- } elsif($conf{auto_center} && $conf{slicer}ne'goslice') {
- push(@a,'--bed_center='.($printer->{build}->{x}/2).','.($printer->{build}->{y}/2));
- }
- foreach(1..$conf{verbose}) {
- next if($conf{slicer}eq'goslice');
- push(@a,"-v");
- }
- if(ref($fn)eq'ARRAY') {
- #push(@a,"--merge") if(@$fn>1);
- push(@a,@$fn);
- } else {
- push(@a,$fn);
- }
- print ", slice" unless($conf{quiet});
- print ", exec: @a\n" if($conf{verbose});
- ($exit,$out) = execProgram(@a,{close_stdout=>!($slicer->{$conf{'slicer'}}->{stdout}),close_stderr=>1,log_stderr=>1});
- }
-
- $process->{time}->{slice} = time()-$st;
-
- if($out=~/filament (used|required)\s*[=:]\s*([\d\.]+)\s*(\w+)/i) { # -- cura or slic3r*
- $process->{filament_used} = $2 * ($3 eq 'm' ? 1000:1); # -- filament_used [mm] always
- } elsif($out=~/filament used\s\[mm\]\s=\s([\d\.]+)/i) { # -- prusa or superslicer
- $process->{filament_used} = $1;
- } elsif($out=~/Filament:\s*([\d\.]+)/i) { # -- cura-legacy
- $process->{filament_used} = $1;
- } else {
- open(my $fh,"<",$conf{output});
- seek($fh,4096,-1); # -- try to parse end of .gcode to pick up metadata
- my $tail;
- while(<$fh>) {
- chop;
- if(/^; filament used = ([\d\.]+)/) { # -- slic3r*
- $process->{filament_used} = $1;
- $tail++;
- } elsif(/^; filament used \[mm\] = ([\d\.]+)/) { # -- prusa
- $process->{filament_used} = $1;
- $tail++;
- } elsif(/^;.+filament used\s*[:=]\s*([\d\.]+)/) { # -- others
- $process->{filament_used} = $1;
- $tail++;
- } elsif($tail && /^; (\w+) = (.*)/) {
- $printer->{$1} = $2;
- }
- }
- close $fh;
- }
-
- if($exit) {
- print "\n$a[0]: ERROR (bad options/arguments?)\n";
- foreach my $l (split(/\n/,$out)) {
- print "$me: '$l'\n";
- }
- exit -1;
- }
- if(!-e $conf{output}) {
- error("slicer [$conf{slicer}] created no gcode, abort.");
- }
- printf ", filament usage %.2fm",$process->{filament_used}/1000 if($process->{filament_used} && !$conf{quiet});
- if(defined $conf{post}) {
- foreach my $p (split(/,/,$conf{post})) {
- if(defined $conf{"post_$p"}) {
- my $tmp = "/tmp/print3r-post-$$.gcode";
- print ", post ($p)" unless($conf{quiet}||$conf{verbose});
- my(@cmd) = split(/ +/,$conf{"post_$p"});
- @cmd = map { $_ =~ s/%i/$conf{output}/; $_ =~ s/%o/$tmp/; $_ } @cmd;
- print ", exec: @cmd\n" if($conf{verbose});
- execProgram(@cmd);
- if(!-e $tmp) {
- error("post processing '$p' (".$conf{"post_$p"}.") did not create any gcode, abort.");
- }
- rename($tmp,$conf{output});
- } else {
- print "$me: WARN: post processing '$p' is not defined (post_$p) anywhere, ignored.\n";
- }
- }
- }
- print ", done.\n" unless($conf{quiet});
- #($exit,$version) = execProgram($slicer->{$conf{slicer}}->{exe}||$conf{slicer},"--version");
-}
-
-sub processGcodeLine {
- my($l) = @_;
-
- $process->{tool} = $1 if($l=~/^T(\d+)/);
-
- if($conf{verbose}>1 && !$conf{quiet}) {
- print "\tprocess:\n";
- foreach my $k (sort keys %$process) {
- print "\t\t$k = '$process->{$k}'\n";
- }
- }
- if($l=~/^T\d+/ && $conf{toolmap}) { # -- only map tool select (but not /M182 T\d+/)
- if(1) {
- foreach my $t (split(/,/,$conf{toolmap})) { # -- simple toolmap
- my($a,$b,$c) = split(/[:=]/,$t);
- if($l =~ s/$a/$b/) {
- print "$me: replace '$a' with '$b'\n" if($conf{verbose}>1 && !$conf{quiet});
- last; # -- only one replacement
- }
- }
- } else {
- my %cnt; # -- FUTURE: sophisticated toolmap with conditions ($c = "once" || "always")
- foreach my $t (split(/,/,$conf{toolmap})) {
- my($a,$b,$c) = split(/[:=]/,$t);
- if($l =~ /$a/ && ($c && $c eq 'once' && $cnt{$a} < 1)) {
- if($l =~ s/$a/$b/) {
- print "$me: replace '$a' with '$b'\n" if($conf{verbose}>1 && !$conf{quiet});
- $cnt{$a}++;
- }
- }
- }
- }
- }
- if($l=~/(^|\n)T\d+/ && $conf{toolremap}) { # -- additional tool (re)mapping
- # -- we implement a two step re-mapping, this way the order of mapping doesn't matter
- my $p = "XX0A"; # -- pattern which unlikely is used anywhere
- my $n = 0;
- my %rep;
- foreach my $t (split(/,/,$conf{toolremap})) {
- my($a,$b) = split(/[:=]/,$t);
- if($l =~ s/$a/$p$n/gm) {
- #print "$me: replace '$a' with '$b'\n" if($conf{verbose}>1 && !$conf{quiet});
- $rep{$a} = "$p$n";
- $n++;
- }
- }
- $n = 0;
- foreach my $t (split(/,/,$conf{toolremap})) {
- my($a,$b) = split(/[:=]/,$t);
- if($rep{$a} && $l =~ s/$rep{$a}/$b/gm) {
- print "$me: replace '$a' with '$b'\n" if($conf{verbose}>1 && !$conf{quiet});
- $n++;
- }
- }
- }
-
- # -- update various variables (after toolmap & toolremap)
- foreach (split(/\n/,$l)) {
- $process->{tool_current} = $process->{tool} = $1 if(/^T(\d+)/);
- }
-
- if($conf{toolchange_gcode}) {
- }
-
- # -- short lines but are quite powerful:
- $l =~ s/\$\{([^\}]+)\}/defined $conf{$1} ? $conf{$1} : $process->{$1}/eg; # -- replace variables "${var}" forcefully (setting or live variable)
- $l =~ s/\{([^\}]+)\}/eval($1)/eg; # -- eval expressions "{expr}" forcefully
- if($@) {
- print STDERR "$me: WARN: eval in '$l' failed: $@\n";
- }
- $l =~ s/&(\w+)\(([^\)]+)\)/inline_function($1,inline_args("$2"))/eg; # -- call functions
- if($@) {
- print STDERR "$me: WARN: inline function in '$l' failed: $@\n";
- }
- $l =~ s/\\n/\n/g;
- $l .= "\n" unless($l=~/\n$/); # -- ensure "\n" at the end (always)
- return $l;
-}
-
-sub processGcode {
- my($fn) = @_;
-
- if(1 && ($conf{toolmap} || $conf{layer_gcode} || $conf{position_gcode})) {
- my $tmp = "/tmp/print3r-$$-gcode-process.gcode";
- if(open(my $fhr,"<",$fn)) {
- if($conf{layer_gcode} && $conf{slicer}=~/slic3r/) { # -- we need to find total count of layers
- my @s = stat($fn);
- my $p = $s[7] * 0.9;
- $p = $s[7] < 2000 ? 0 : $p;
- seek($fhr,$p,-1);
- my $tail;
- while(<$fhr>) {
- chop;
- $process->{layer_total} = $1 if(/LAYER:(\d+)/);
- }
- seek($fhr,0,0);
- $process->{layer_total}++; # -- count is +1 of last layer number (starts with 0)
- }
-
- if(open(my $fhw,">",$tmp)) {
- $process->{layer_current} = 0;
-
- while(<$fhr>) {
- $process->{layer_total} = $1 if(/;\s*LAYER_COUNT:\s*(\d+)/);
- if($process->{layer_total} && /;\s*LAYER:\s*(\d+)/) {
- $process->{layer_current} = $1;
- layerScript(), $_ = $conf{layer_gcode} if($conf{layer_gcode});
- }
- my $l = processGcodeLine($_);
- print $fhw $l;
- }
- close $fhw;
- close $fhr;
- } else {
- error("processGcode: could not write '$tmp'");
- }
- } else {
- error("processGcode: could not read '$fn'");
- }
- push(@rm,$tmp);
- $fn = $tmp;
- print "\n" unless($conf{quiet});
- }
- return $fn;
-}
-
-sub layerScript {
- $process->{layer_percent} = 100/$process->{layer_total} * $process->{layer_current};
- $process->{layer_relative} = 1/$process->{layer_total} * $process->{layer_current};
- my $r = 1/$process->{layer_total} * $process->{layer_current};
- $process->{a2} = 1-$r; # 1..0
- $process->{b2} = $r; # 0..1
- $process->{a22} = $r < 1/2 ? 1-$r*2 : ($r-1/2)*2; # 1..0..1
- $process->{b22} = $r < 1/2 ? $r*2 : 1-($r-1/2)*2; # 0..1..0
- $process->{a3} = $r < 1/2 ? 1-$r*2 : 0; # 1..0..0
- $process->{b3} = $r < 1/2 ? $r*2 : 1 - ($r-1/2)*2; # 0..1..0
- $process->{c3} = $r >= 1/2 ? ($r-1/2)*2 : 0; # 0..0..1
- $process->{a34} = $r < 1/3 ? 1-$r*3 : $r >= 2/3 ? ($r-2/3)*3 : 0; # 1..0..0..1
- $process->{b34} = $r < 1/3 ? $r*3 : $r <= 2/3 ? 1 - ($r-1/3)*3 : 0; # 0..1..0..0
- $process->{c34} = $r >= 1/3 && $r < 2/3 ? ($r-1/3)*3 : $r >= 2/3 ? 1 - ($r-2/3)*3 : 0; # 0..0..1..0
-}
-
-sub printGcode {
- my($fn) = shift;
- my(%conf) = %{@_[0]};
-
- my $lock = $conf{device};
- $lock =~ s/\W/_/g;
- $lock = "/var/lock/print3r-$lock";
-
- if(-e $lock && (stat($lock))[9] > time()-3*60) {
- print "ERROR: printer at $conf{device} is busy (locked with $lock), abort.\n";
- #print " HINT: if you are absolutely sure no print job is going on, you can remove the lock $lock or\n";
- #print " wait max 3mins so the lock is no longer considered\n";
- cleanup();
- exit -1;
- }
- my $com = openSerial($conf{device});
-
- my $tlock = time(); # -- time of lock
- open(my $lfh,">$lock");
- print $lfh time();
- close($lfh);
-
- my $st = time();
- my $st_e;
-
- # $fn = processGcode($fn);
-
- open(my $fh,"<",$fn);
- return if(!$fh);
-
- webcam_snap([$fh,$com]) if($conf{webcam});
-
- if($conf{layer_gcode} && $conf{slicer}=~/slic3r/) { # -- we need to find total count of layers
- my @s = stat($fn);
- my $p = $s[7] * 0.9;
- $p = $s[7] < 2000 ? 0 : $p;
- seek($fh,$p,-1);
- my $tail;
- while(<$fh>) {
- chop;
- $process->{layer_total} = $1 if(/LAYER:(\d+)/);
- }
- seek($fh,0,0);
- $process->{layer_total}++; # -- count is +1 of last layer number (starts with 0)
- }
-
- my $pos = 0;
- my $pos_tot = (stat($fn))[7];
- my $pos_t = 'abs';
- my $lcur_z;
- my $cur_z = 0;
- my $tot_e = 0;
- my $cur_e = 0;
- my $layer = 0;
-
- my $cpath; # -- find slicer base settings; cpath contains path
- foreach my $p (@paths) {
- $cpath = $p, last if(-e "$p/gcode");
- }
-
- $SIG{INT} = sub {
- print "\n\taborting print (max $conf{timeout}s) ...\n";
- sleep 1;
-
- if(!$conf{abort_gcode}) {
- print "\n$me: WARN: no abort_gcode defined, nozzle/bed might be still heating/hot\n";
- } else {
- foreach my $l (split(/\n/,$conf{abort_gcode})) {
- next if($l=~/^\s*;/);
- $l .= "\n";
- printerSend($com,$l);
-
- my($resp) = printerResponse($com,$l,{timeout=>$conf{timeout}});
- last if($resp eq 'abort');
- }
- }
- unlink $lock;
- cleanup();
- exit -1;
- };
-
- my $status = "init";
- my $lst;
-
- my($min,$max,$sz,$cp);
-
- my $positionScript = sub {
- my($rx,$ry,$rz) = ($cp->{x}/$sz->{x},$cp->{y}/$sz->{y},$cp->{z}/$sz->{z});
- my $r = atan2($ry-0.50001,$rx-0.50001) / (2*pi);
- my($a,$b,$c);
- $a = $r < 1/3 ? 1-$r*3 : $r >= 2/3 ? ($r-2/3)*3 : 0;
- $b = $r < 1/3 ? $r*3 : $r < 2/3 ? 1-($r-1/3)*3 : 0;
- $c = $r >= 1/3 && $r < 2/3 ? ($r-1/3)*3 : $r >= 2/3 ? 1-($r-2/3)*3 : 0;
- my $l = "M165 A$a B$b C$c";
- print "$me: gcode insert (post-gcode): $l\n" if(1||$conf{verbose}>1 && !$conf{quiet});
- printerSend($com,"$l\n");
- printerResponse($com);
- };
-
- if($conf{position_gcode}) { # -- FUTURE: any position-gcode? we need determine min/max to calculate relative x,y,z
- $min->{x} = $min->{y} = $min->{z} = 1e38;
- $max->{x} = $max->{y} = $max->{z} = -1e38;
- while(<$fh>) {
- my($c,$id) = (/^([MG])(\d+)/);
- if($c eq 'G' && ($id == 1 || $id == 0)) { # -- move or extrude
- my $px;
- foreach my $pa (split(/ /)) {
- $px->{lc($1)} = $2 if($pa=~/([XYZE])([\d\.]+)/);
- }
- if($px->{e}) {
- foreach my $k (keys %$px) {
- $max->{$k} = $px->{$k} if($max->{$k}<$px->{$k});
- $min->{$k} = $px->{$k} if($min->{$k}>$px->{$k});
- }
- } elsif(defined $px->{z}) {
- my $k = 'z';
- $max->{$k} = $px->{$k} if($max->{$k}<$px->{$k});
- $min->{$k} = $px->{$k} if($min->{$k}>$px->{$k});
- }
- }
- }
- $sz->{x} = $max->{x}-$min->{x};
- $sz->{y} = $max->{y}-$min->{y};
- $sz->{z} = $max->{z}-$min->{z};
- print "$me: extruding space: +$min->{x}+$min->{y} $sz->{x}x$sz->{y}x$sz->{z}\n" unless($conf{quiet});
- seek($fh,0,0);
- }
-
- $process->{layer_current} = 0;
-
- while(<$fh>) {
- my $l = $_;
- $pos += length($l);
-
- my $eta = (time()-$st) / $pos * $pos_tot; # -- total time
- $eta = (($st + $eta) - time()) / 60; # -- relative
- my $now = (time()-$st)/60;
-
- webcam_snap([$fh,$com]) if($conf{webcam});
-
- if($cur_e && $st_e && $process->{filament_used}) { # -- estimated arrival/end based on extrusion (without heating up), more precise but depends on "filament_used" data
- $eta = (time()-$st_e) / $cur_e * $process->{filament_used};
- $eta = (($st_e + $eta) - time()) / 60;
- }
-
- # -- rudimentary catch layer changes, if small change then it's a layer change
- $cur_z = $1 if($l=~/^G[01] .*Z(\S+)/);
-
- # -- determine current Z layer nr
- if($process->{non_planar} || $conf{slicer} eq 'slicer4rtn' || $conf{slicer} eq '5dmaker' || $conf{slicer} eq 'zplus') { # -- slicer4rtn & 5dmaker are non-planar, rely on G-code info
- $layer = $1 if($l =~ /^;\s*LAYER:\s*(\d+)/);
- } else { # -- determine via heuristic & nummerical the actual Z layer
- $layer++, $lcur_z = $cur_z if($cur_z > 0 && ($cur_z - $lcur_z) < 1 && $lcur_z != $cur_z);
- }
- $pos_t = 'abs' if(/^G90\b?$/||/^M82\b?$/);
- $pos_t = 'rel' if(/^G91\b?$/||/^M83\b?$/);
-
- # -- $tot_e is the absolute extrusion length (regardless of extrusion mode abs/rel)
- # $cur_e is also in absolute extrusion length (easier to calculate)
- if($pos_t eq 'abs') {
- $tot_e = $cur_e, $cur_e = $1*1 + $tot_e if($l=~/^G92 E(-?[\d\.]+)/);
- $status = "printing", $cur_e = $1*1 + $tot_e, $st_e = $st_e ? $st_e : time() if($l=~/G1\s.*E(\-?[\d\.]+)/);
- } else {
- $tot_e = $cur_e, $cur_e = $1*1 + $tot_e if($l=~/^G92 E(-?[\d\.]+)/);
- $status = "printing", $cur_e += $1*1, $st_e = $st_e ? $st_e : time() if($l=~/G1\s.*E(\-?[\d\.]+)/);
- }
- $status = "heating" if($l=~/^M109/);
-
- # -- status line
- if(!$conf{quiet}) {
- if($status ne 'printing') {
- printf "$me: print: %s: %dh %02dm elapsed\r",$status,int($now/60),$now%60;
- } else {
- printf "$me: print: %dh %02dm elapsed,%s %.1f%% complete, z=%.2fmm, layer #%d, filament %.2fm %s",
- int($now/60),$now%60,$eta?sprintf(" eta %dh %02dm,",int($eta/60),$eta%60):"",100*$pos/$pos_tot,$cur_z,$layer,$cur_e/1000,$conf{verbose}?"\n":"\r"
- }
- }
-
- if($conf{position_gcode} && $l =~ /^G1\s+(\S.+)/) {
- my $c = $1;
- my $e = 0;
- foreach my $p (split(/ /,$c)) {
- my($a,$u) = ($p=~/([XYE])([\d\.]+)/);
- $cp->{lc($a)} = $u - $min->{lc($a)} if($a);
- $e++ if($a eq 'E');
- }
- &$positionScript() if($e);
- }
- $process->{layer_total} = $1 if(/;\s*LAYER_COUNT:\s*(\d+)/);
-
- if($process->{layer_total} && /;\s*LAYER:\s*(\d+)/) {
- $process->{layer_current} = $1;
- layerScript();
- $l = $conf{layer_gcode} if($conf{layer_gcode});
- }
-
- $process->{non_planar}++ if(/;\s*NON_PLANAR/||/;\s*NONPLANAR/);
-
- next if($l=~/^;/ || $l=~/^\s*$/); # -- comments or empty lines are not sent
-
- if(0 && $l=~/^T\d+/ && $conf{toolmap}) {
- foreach my $t (split(/:/,$conf{toolmap})) {
- my($a,$b) = split(/[=]/,$t);
- if($l =~ s/$a/$b/) {
- print "$me: replace '$a' with '$b'\n" if($conf{verbose}>1 && !$conf{quiet});
- last;
- }
- }
- print " in: '$l'\n";
- $l = processGcodeLine($l);
- print "out: '$l'\n";
- if(0) {
- $l =~ s/\\n/\n/g;
- if($l=~/\n/) {
- foreach my $l_ (split(/\n/,$l)) {
- print "$me: gcode change (toolmap): $l_\n" if($conf{verbose}>1 && !$conf{quiet});
- printerSend($com,$l_."\n");
- my($resp) = printerResponse($com,$l_);
- }
- next;
- } else {
- $l .= "\n";
- }
- }
- print "$me: gcode change (toolmap): $l\n" if($conf{verbose}>1 && !$conf{quiet});
- } else {
- #print " in: '$l'\n";
- $l = processGcodeLine($l);
- #print " out: '$l'\n";
- }
-
- if(0 && $l=~/\$\{(\w+)\}/) { # -- any variable to replace?
- $l =~ s/\$\{(\w+)\}/defined $conf{$1} ? $conf{$1} : $process->{$1}/eg;
- print "$me: gcode change (variables): $l\n" if($conf{verbose}>1 && !$conf{quiet});
- }
-
- print "send: '$l'" if($conf{verbose});
-
- foreach my $l_ (split(/\n/,$l)) { # -- we might have multiple lines (as result of processGcodeLine())
- $l_ .= "\n";
- printerSend($com,$l_);
- my($resp) = printerResponse($com,$l_,{callback=>sub {
- my($mesg,$com,$cmd) = @_;
- my $now = (time()-$st)/60;
- if(!$conf{quiet} && $status ne 'printing') {
- # ... e.g. parse while heating up the temperature(s)
- # " T:202.32 /205.00 B:25.28 /0.00 @:60 B@:0 W:?"
- if($status eq 'heating') {
- if($mesg=~/(T:[\d\.]+ \/[\d\.]+) (B:[\d\.]+ \/[\d\.]+)/) {
- printf "$me: print: %s (%s, %s): %dh %02dm elapsed\r",$status,$1,$2,int($now/60),$now%60;
- } else {
- ;
- }
- } else {
- printf "$me: print: %s: %dh %02dm elapsed\r",$status,int($now/60),$now%60;
- }
- }
- }});
- }
-
- if($conf{display_update}ne'off' && time()-$lst>3) { # -- update printer display
- printerSend($com,sprintf("M117 %d%% eta %s l#%d%s\n",100*$pos/$pos_tot,
- $eta ? ($eta > 60 ? sprintf("%.1fh",$eta/60) : int($eta)."m" ) : "-",
- $layer,defined $process->{tool}?" T".$process->{tool}:""));
- printerResponse($com);
- #printerSend($com,"M31\n");
- #printerResponse($com);
- $lst = time();
- }
-
- if($tlock < time()-20) { # -- update lock every 20s
- open(my $lfh,">$lock");
- print $lfh time();
- close $lfh;
- $tlock = time();
- }
- }
- close $fh;
-
- my $tot = int((time() - $st + 30)/60);
- printerSend($com,"M117 completed: " . sprintf("%dh %02dm",int($tot/60),$tot%60) . "\n") if($conf{display_update}ne'off');
- printerResponse($com);
-
- if($conf{webcam}) {
- webcam_snap([$com],1); # -- force
- my $w = webcam_snapconf();
-
- sleep(3+$w->{delay}); # -- make sure last webcam snap is done
-
- my $dir = "$ENV{HOME}/.print3r/snaps/"; # -- review all snaps
- my(@se,@sm);
- foreach my $fn (@{$process->{webcam}->{snaps}}) {
- if(-e "$dir/$fn") {
- push(@se,$fn);
- } else {
- push(@sm,$fn);
- }
- }
- if(@se==0) {
- delete $process->{webcam};
- print "\n" unless($conf{verbose});
- print "$me: WARN: webcam(s) failed to capture any images";
- } else {
- my $tot = @{$process->{webcam}->{snaps}};
- $process->{webcam}->{snaps} = \@se; # -- list only existing images
- delete $process->{webcam}->{last};
- if(@sm>0) {
- print "\n" unless($conf{verbose});
- my $p = 100 / $tot * @sm;
- printf("$me: WARN: webcam(s) missed to capture some images (%d out of %d, %d%%)",scalar @sm,$tot,$p);
- }
- }
- } else {
- sleep 3; # -- give it time
- }
- print "\n" if(!$conf{quiet});
-
- unlink $lock;
-
- # -- log printjob
- $process->{time}->{print} = time()-$st;
- mkdir $ENV{HOME}."/.print3r" unless(-e $ENV{HOME}."/.print3r");
- open(my $lfh,">>",$ENV{HOME}."/.print3r/log.json");
- print $lfh toJSON({
- version => "$NAME $VERSION",
- internals => { versions => versions() },
- settings => \%conf,
- printer => $printer,
- time => time(),
- file_list => \@f_in,
- part => $fn,
- size => (stat($fn))[7],
- process => $process,
- duration => $process->{time}->{print},
- uid => defined $conf{uid}?$conf{uid}:uid()
- },{pretty=>0})."\n";
-
- close $lfh;
-}
-
-sub printerSend {
- my($com,$msg) = @_;
-
- $msg =~ s/;.*$//;
-
- if($conf{serialif}eq'termios') {
- print $com $msg;
- } else {
- $com->write($msg);
- }
-}
-
-sub printerResponse {
- my($com,$cmd,$arg) = @_;
- my $await_ok = ($cmd=~/^[GM]/);
- my $resp = '';
- my $st = time();
-
- if($conf{serialif}eq'termios') {
- my $ln = "";
- while(1) {
- my $rd;
-
- if(read($com,$rd,3)) { # -- minimal read (e.g. "ok\n")
- print ">> '$rd'\n" if($conf{verbose}>2);
-
- $ln .= $rd;
- $resp .= $rd;
-
- &{$arg->{callback}}($ln,$com,$cmd), $ln = '' if($ln =~ /\n/ && defined $arg->{callback} && ref($arg->{callback})eq'CODE');
-
- $arg->{timeout} = 0.5, next if($resp =~ /^start/i);
-
- if($await_ok) {
- print "> '$resp'\n" if($conf{verbose}>2);
- last if($resp =~ /ok/i);
- sleep 0.005;
- } elsif($resp=~/\n/) {
- last;
- }
-
- } elsif($arg->{timeout} && time()-$st > $arg->{timeout}) {
- return 'abort';
-
- } else {
- sleep 0.005;
- }
- }
- return $resp;
- }
-
- while(1) {
- my($in,$out);
- (undef,$in,$out,undef) = $com->status();
-
- if($in) {
- print "# in:$in out:$out\n" if($conf{verbose}>1);
- my($n,$rd) = $com->read($in);
- $resp .= $rd;
-
- &{$arg->{callback}}($rd,$com,$cmd) if(defined $arg->{callback} && ref($arg->{callback})eq'CODE');
-
- if($await_ok) {
- print "> '$resp'\n" if($conf{verbose}>2);
- last if($resp =~ /ok/i);
- last if($resp =~ /start/i);
- sleep 0.005;
- } else {
- last;
- }
-
- } elsif($arg->{timeout} && time()-$st > $arg->{timeout}) {
- return 'abort';
-
- } else {
- sleep 0.005;
- }
- }
-
- return $resp;
-}
-
-sub webcam_conf {
- my($c) = @_;
- my $w;
-
- foreach my $kv (split(/[;,]/,$c)) {
- my($k,$v) = split(/:/,$kv);
- $w->{$k} = $v;
- }
- return $w;
-}
-
-sub webcam_snapconf {
- my $w = webcam_conf($conf{webcam_snap});
-
- $w->{time} = 60 unless(defined $w->{time});
- $w->{delay} = 5 unless(defined $w->{delay});
- $w->{time} = $w->{delay}+1 if($w->{time}<$w->{delay}); # -- sanity check
-
- return $w;
-}
-
-sub webcam_snap {
- my($fh,$force) = @_;
-
- if($conf{webcam}) {
- my $w = webcam_snapconf();
-
- if($force || ($process->{webcam}->{last} + $w->{time} < time())) {
- my $dir = "$ENV{HOME}/.print3r/snaps";
- mkdir $dir unless(-e $dir);
-
- $conf{webcam} =~ s/^\s+$//;
- $conf{webcam} =~ s/\s+$//;
-
- my @wcs = split(/\s+/,$conf{webcam}); # -- support multiple webcams
- my $wcn = 0;
-
- foreach my $wc (@wcs) {
- next if(!$wc);
-
- my @t = localtime();
- my $fn = sprintf("%04d%02d%02d %02d%02d%02d - ",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]);
- my $nick = $conf{machine_name} || $$;
-
- $nick =~ s/[\W ]+/_/g;
- $fn .= $nick;
- $fn .= ".$wcn" if(@wcs>1);
- $fn .= ".jpg";
-
- print "$me: take webcam snap #$wcn ($wc, ".toJSON($w,{pretty=>0}).")\n" if($conf{verbose}>0);
-
- local $SIG{CHLD} = 'IGNORE';
- my $pid = $$;
- if(fork()==0) {
- # -- perl & fork: a pain to deal with (it matters): close all open handles ($com,$fh)
- # otherwise it screws up $fh and/or $com and stalls print
- # -- this is a hack, but it seems nothing else works (e.g. below with $fd->close won't do it)
- if(1) {
- foreach my $fd (0..10) {
- POSIX::close($fd);
- }
- }
- #foreach my $fd (@$fh) {
- # $fd->close;
- # #close $fd;
- #}
- #close STDIN;
- #close STDOUT; # -- needs to be closed, otherwise interferes with $com/$fh higher up (no output about webcam not providing snaps)
- #close STDERR;
-
- if(fork()==0) {
- if(fork()==0) {
- close STDOUT; # -- ffmpeg is chatty
- close STDERR;
- exec("ffmpeg","-i",$wc,"-ss",$w->{delay},"-r",1,"-vsync",1,"-qscale",1,"-frames:v",1,"-f","image2","$dir/$fn");
- exit;
- }
- wait;
- print "$me: WARN: webcam #$wcn did not capture an image ($wc, ".toJSON($w,{pretty=>0}).")\n" unless(-e "$dir/$fn");
- my $ws = webcam_conf($conf{webcam_settings});
- if(@wcs>1 && $conf{webcam_settings} =~ /\S+ \S+/) { # -- multiple webcams-settings?
- my @s = split(/\s+/,$conf{webcam_settings});
- $ws = webcam_conf($s[$wcn]);
- }
- if(-e "$dir/$fn" && $ws->{rotate}!=0) {
- my $nn = $$.".$wcn";
- if(fork()==0) {
- #exec("jpegtran","-rotate",$ws->{rotate},"-outfile","$dir/$fn","$dir/$fn"); # -- gives artefacts with my webcams (bottom 16px row is not rotated), avoid it
- exec("convert","$dir/$fn","-rotate",$ws->{rotate},"$dir/tmp-$nn.jpg"); # -- not optimal, but works
- exit;
- }
- wait;
- rename("$dir/tmp-$nn.jpg","$dir/$fn");
- exit;
- }
- print "$me: webcam #$wcn snap saved\n" if($conf{verbose}>0);
- exit;
- }
- wait;
- exit;
- }
- # -- no wait (continue printing), let the child take its time
- print "$me: webcam #$wcn done.\n" if($conf{verbose}>0);
- push(@{$process->{webcam}->{snaps}},$fn);
- $wcn++;
- }
- $process->{webcam}->{last} = time();
- }
- }
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-my $n_log = 0;
-
-sub execProgram {
- my(@a) = @_;
- my $arg = ref(@a[$#a]) eq 'HASH' ? pop(@a) : { close_stdout=>1, close_stderr=>1, log_stdout=>1, log_stderr=>1 };
-
- $n_log++;
- my $ltmp = "/tmp/$me-$$-${n_log}.log";
-
- # print "EXEC ".join(' ',@a)."\n";
-
- if(fork()==0) {
- close STDOUT if($arg->{close_stdout});
- close STDERR if($arg->{close_stderr});
- open(LOG,">",$ltmp); # -- open log file
- select LOG; $| = 1;
- if($arg->{log_stderr}) {
- if($arg->{log_stderr} =~ /^\d+$/) {
- *STDERR = *LOG;
- } else {
- open(LOG,">",$arg->{log_stderr});
- *STDERR = *LOG;
- }
- }
- if($arg->{log_stdout}) {
- if($arg->{log_stdout} =~ /^\d+$/) {
- *STDOUT = *LOG;
- } else {
- open(LOG,">",$arg->{log_stdout});
- *STDOUT = *LOG;
- }
- }
- exec(@a);
- # -- never reaches here
- }
- wait;
-
- open(my $fh,"<",$ltmp); # -- read log file
- local $/;
- my $out = <$fh>;
- close $fh;
-
- unlink $ltmp;
-
- if($conf{verbose}) {
- foreach my $l (split(/\n/,$out)) {
- print "$me: '$l'\n";
- }
- }
- return($?>>8,$out);
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub readSTL {
- my($fn) = @_;
- my $p = { };
- print ", stl read <$fn>\n" if($conf{verbose});
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- if(open(my $fh,"<",$fn)) {
- my $buff;
- read($fh,$buff,256);
- seek($fh,0,0);
- if($buff=~/facet/) { # -- ascii
- my $v;
- my %vx; # -- vertex cache as associative array ",,"
- my $vxn = 0;
- my $n = 0;
- while(<$fh>) {
- chop;
- push(@$v,[split(/\s+/,$1)]) if(/vertex\s+(\S.+)/); # -- be more linient
- if(/endloop/) {
- my @px;
- $px[0] = join(",",map { $_*1.0 } @{$v->[0]}); # -- $_*1.0 parses also "1.0e1" => 10.0
- $px[1] = join(",",map { $_*1.0 } @{$v->[1]});
- $px[2] = join(",",map { $_*1.0 } @{$v->[2]});
- $vx{$px[0]} = $vxn++ unless(defined $vx{$px[0]});
- $vx{$px[1]} = $vxn++ unless(defined $vx{$px[1]});
- $vx{$px[2]} = $vxn++ unless(defined $vx{$px[2]});
- #push(@{$p->{facets}},$v);
- @px = map { $vx{$_} } @px;
- push(@{$p->{facets}},\@px);
- for(my $i=0; $i<3; $i++) {
- for(my $j=0; $j<3; $j++) {
- # -- update min/max
- $min[$j] = $v->[$i]->[$j] if($v->[$i]->[$j]<$min[$j]);
- $max[$j] = $v->[$i]->[$j] if($v->[$i]->[$j]>$max[$j]);
- }
- }
- $v = [], $n++;
- }
- }
- foreach my $q (sort { $vx{$a}-$vx{$b} } keys %vx) {
- my($x,$y,$z) = split(/,/,$q);
- push(@{$p->{vertices}},[$x*1,$y*1,$z*1]);
- }
- #print toJSON($p);
- print "$fn: $n facets\n" if($conf{verbose});
- } else { # -- binary
- my $n;
- read($fh,$buff,80);
- read($fh,$n,4);
- $n = unpack('L',$n);
- print "$fn: $n facets\n" if($conf{verbose});
- my $fu = 'f f f';
- my %vx;
- my $vxn = 0;
- for(my $i=0; $i<$n; $i++) {
- my($nr,$v1,$v2,$v3,$at);
- read($fh,$nr,4*3);
- read($fh,$v1,4*3);
- read($fh,$v2,4*3);
- read($fh,$v3,4*3);
- read($fh,$at,2);
- $at = unpack('S',$at);
- my $v;
- push(@$v,[unpack($fu,$v1)]);
- push(@$v,[unpack($fu,$v2)]);
- push(@$v,[unpack($fu,$v3)]);
- #print " @{@v[0]} @{@v[1]} @{@v[2]}\n";
- #push(@{$p->{facets}},$v);
-
- my @px;
- $px[0] = join(",",@{$v->[0]});
- $px[1] = join(",",@{$v->[1]});
- $px[2] = join(",",@{$v->[2]});
- $vx{$px[0]} = $vxn++ unless(defined $vx{$px[0]});
- $vx{$px[1]} = $vxn++ unless(defined $vx{$px[1]});
- $vx{$px[2]} = $vxn++ unless(defined $vx{$px[2]});
- #push(@{$p->{facets}},$v);
- @px = map { $vx{$_} } @px;
- push(@{$p->{facets}},\@px);
-
- for(my $i=0; $i<3; $i++) {
- for(my $j=0; $j<3; $j++) {
- # -- update min/max
- $min[$j] = $v->[$i]->[$j] if($v->[$i]->[$j]<$min[$j]);
- $max[$j] = $v->[$i]->[$j] if($v->[$i]->[$j]>$max[$j]);
- }
- }
- }
- foreach my $q (sort { $vx{$a}-$vx{$b} } keys %vx) {
- my($x,$y,$z) = split(/,/,$q);
- push(@{$p->{vertices}},[$x*1,$y*1,$z*1]);
- }
- }
- close $fh;
- # -- keep min/max/size up-to-date
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- return $p;
- } else {
- print STDERR "$me: only .stl supported, abort.\n";
- exit;
- }
-}
-
-sub writeSTL {
- my($fn,$p) = @_;
- print ", stl writing <$fn>\n" if($conf{verbose});
- if(open(my $fh,">",$fn)) {
- if(0) { # -- ascii, very verbose
- print $fh "solid\n";
- foreach my $f (@{$p->{facets}}) {
- print $fh "facet normal 0 0 0\n\touter loop\n";
- if(0) {
- foreach my $v (@$f) {
- print $fh "\t\tvertex ",join(" ",@$v),"\n";
- }
- } else {
- foreach my $vi ($f) {
- for(my $i=0; $i<3; $i++) {
- if(!$p->{vertices}->[$vi->[$i]]) {
- error("malformed geometry, cannot export faces: ".toJSON($vi->[$i]));
- }
- my $vp = $p->{vertices}->[$vi->[$i]] ;
- print $fh "\t\tvertex ",join(" ",@$vp),"\n";
- }
- }
- }
- print $fh "\tendloop\nendfacet\n";
- }
- print $fh "endsolid\n";
- close $fh;
- } else { # -- hammer the binary format out, still wasteful
- print $fh " "x80;
- print $fh pack("L",scalar @{$p->{facets}});
- foreach my $f (@{$p->{facets}}) {
- print $fh pack("f3",0,0,0); # -- normals
- my $i = 0;
- print $fh pack("f3",@{$p->{vertices}->[$f->[$i]]}); $i++;
- print $fh pack("f3",@{$p->{vertices}->[$f->[$i]]}); $i++;
- print $fh pack("f3",@{$p->{vertices}->[$f->[$i]]});
- print $fh pack("S",0);
- }
- close $fh;
- }
- }
-}
-
-sub readAMF {
- my($fn) = @_;
- my $p = { };
- print ", amf read <$fn>\n" if($conf{verbose});
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- if(open(my $fh,"<",$fn)) {
- local $/;
- my $buff = <$fh>;
- close $fh;
-
- my $xml = XMLin($buff);
- my $fa = 1;
- $fa = 25.4 if($xml->{unit}eq'inch');
- $fa = 1000 if($xml->{unit}eq'meter');
- $fa = 100 if($xml->{unit}eq'cm');
- $fa = 10 if($xml->{unit}eq'dm');
- foreach my $o (ref($xml->{object})eq'ARRAY'?@{$xml->{object}}:$xml->{object}) {
- foreach my $m (ref($o->{mesh})eq'ARRAY'?${$o->{mesh}}:$o->{mesh}) {
- my @vs;
- foreach my $v (ref($m->{vertices}->{vertex})?@{$m->{vertices}->{vertex}}:$m->{vertices}->{vertex}) {
- my(@p) = ($v->{coordinates}->{x}*$fa,$v->{coordinates}->{y}*$fa,$v->{coordinates}->{z}*$fa);
- for(my $i=0; $i<3; $i++) {
- $min[$i] = $p[$i] if($p[$i]<$min[$i]);
- $max[$i] = $p[$i] if($p[$i]>$max[$i]);
- }
- push(@vs,\@p);
- }
- $p->{vertices} = \@vs;
- my $vn = 0;
- foreach my $t (ref($m->{volume})eq'ARRAY'?@{$m->{volume}}:$m->{volume}) {
- foreach my $c (@{$t->{triangle}}) {
- push(@{$p->{facets}},[$c->{v1},$c->{v2},$c->{v3}]);
- push(@{$p->{volumes}->[$vn]},$#{$p->{facets}});
- }
- $vn++;
- }
- }
- }
- # -- keep min/max/size up-to-date
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- return $p;
-
- } else {
- print STDERR "$me: only .amf supported, abort.\n";
- exit;
- }
-}
-
-sub writeAMF {
- my($fn,$p) = @_;
- print ", amf writing <$fn>\n" if($conf{verbose});
-
- if(open(my $fh,">",$fn)) {
- print $fh "\n";
- print $fh "\n";
- print $fh " $me $VERSION \n";
- print $fh " \n";
- print $fh " \n";
- print $fh " \n";
- foreach my $v (@{$p->{vertices}}) {
- print $fh sprintf(" %.5f %.5f %.5f \n",$v->[0],$v->[1],$v->[2]);
- }
- print $fh " \n";
- my $mi = 2;
- my $ei = 1;
- if($p->{volumes}) { # -- multiple volumes (multiple color/material)
- foreach my $v (@{$p->{volumes}}) {
- print $fh " \n";
- print $fh " $ei \n"; # -- essential for slic3r & slic3r-pe (and prusa-slicer as well)
- foreach my $f (@$v) {
- print $fh sprintf(" %d %d %d \n",$p->{facets}->[$f]->[0],$p->{facets}->[$f]->[1],$p->{facets}->[$f]->[2]);
- }
- print $fh " \n";
- $mi++;
- $ei++;
- }
- } else { # -- single volume (single color/material)
- print $fh " \n";
- foreach my $f (@{$p->{facets}}) {
- print $fh sprintf(" %d%d %d \n",$f->[0],$f->[1],$f->[2]);
- }
- print $fh " \n";
- }
- print $fh " \n";
- print $fh " \n";
- if($p->{volumes}) {
- $mi = 2;
- foreach my $v (@{$p->{volumes}}) { # -- listing materials (slice3r / slic3r-pe ignore it)
- print $fh " \n";
- print $fh " \n";
- $mi++;
- }
- }
- print $fh " \n";
- close $fh;
- }
-}
-
-sub read3MF {
- # -- supporting .3mf files (zip-file with multiple files) - not yet fully functional
- my($fn) = @_;
- print ", 3mf read <$fn>\n" if($conf{verbose});
-
- my $err;
-
- require Archive::Zip;
- require XML::Simple;
-
- # require HTML::TreeBuilder::XPath; -- fails on me
- my $mr = sub {
- my($m) = @_;
- my $r = @$m;
- my $c = @{$m->[0]};
- return ($r,$c);
- };
- my $mm = sub {
- my($r_mat1,$r_mat2) = @_;
- my($r_product);
- my($r1,$c1) = &$mr($r_mat1);
- my($r2,$c2) = &$mr($r_mat2);
-
- die "$me: matrix 1 has $c1 columns and matrix 2 has $r2 rows, cannot multiply\n" unless ($c1 == $r2);
-
- for (my $i = 0; $i < $r1; $i++) {
- for (my $j = 0; $j < $c2; $j++) {
- my $sum = 0;
- for (my $k = 0; $k < $c1; $k++) {
- $sum += $r_mat1->[$i][$k] * $r_mat2->[$k][$j];
- }
- $r_product->[$i][$j] = $sum;
- }
- }
- $r_product;
- };
- my $zip = Archive::Zip->new($fn);
-
- if($zip) {
- my $m = $zip->memberNamed('3D/3dmodel.model');
- if($m && length($m->contents)) {
- my $xml = $m->contents;
-
- $xml =~ s/^<[^>]+>//; # -- needed
-
- my $c = XMLin($xml); # -- this seems to work
- my $vn = 0;
-
- my @ps;
-
- # print ", build" unless($conf{quiet}||$conf{verbose});
- foreach my $b ($c->{build} && ref($c->{build}->{item})eq'ARRAY' ? @{$c->{build}->{item}} : $c->{resources}->{object}) {
- # -- NOTE: we treat each build as separate model (independent of each other)
- my $o = $b->{objectid} && $c->{resources}->{object}->{$b->{objectid}} || $b;
- my $mv = $c->{build} && ref($c->{build}->{item})eq'ARRAY' ? @{$c->{build}->{item}} : 0;
- my $t;
-
- my $fi = 0;
- my $p = { };
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- # print " #$vn" unless($conf{quiet}||$conf{verbose});
- if($b->{transform}) {
- my @tr = split(/\s+/,$b->{transform});
- for(my $i=0; $i<4; $i++) { # -- rows
- for(my $j=0; $j<3; $j++) { # -- cols
- $t->[$i][$j] = $tr[$j+$i*3];
- }
- }
- $t->[0][3] = 0;
- $t->[1][3] = 0;
- $t->[2][3] = 0;
- $t->[3][3] = 1;
- }
- my $voff = 0; # @{$p->{vertices}};
- my(@off);
- foreach my $c (@{$o->{mesh}->{vertices}->{vertex}}) {
- my(@p) = ($c->{x},$c->{y},$c->{z});
- if($t) {
- my $q = &$mm($t,[[$p[0]],[$p[1]],[$p[2]],[0]]);
- #my $p = &$mm($t,[[$p[0],$p[1],$p[2],0]]);
- @p = ($q->[0][0],$q->[1][0],-$q->[2][0]); # -- for some bizarre reason z is inverted, revert it again
- #@p = ($q->[0][0],$q->[0][1],$q->[0][2]);
- } else {
- @p = map { $_*1 } @p;
- }
- #$p[0] += $off[0];
- #$p[1] += $off[1];
- for(my $i=0; $i<3; $i++) {
- $min[$i] = $p[$i] if($p[$i]<$min[$i]);
- $max[$i] = $p[$i] if($p[$i]>$max[$i]);
- }
- push(@{$p->{vertices}},\@p);
- }
- foreach my $t (@{$o->{mesh}->{triangles}->{triangle}}) {
- push(@{$p->{facets}},[$t->{v1}+$voff,$t->{v2}+$voff,$t->{v3}+$voff]);
- #push(@{$p->{volumes}->[$vn]},$fi) if($mv);
- $fi++;
- }
- $vn++;
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- $p = partRecenter($p,[1,1,-1]); # -- ensure centered and z=0
- push(@ps,$p);
- }
- return partsArrange(@ps,$printer);
-
- } else {
- error("$fn: internal format mismatch (no 3D/3dmodel.model)");
- }
-
- } else {
- error("$fn: error decoding zip format");
- }
- return { };
-}
-
-sub write3MF {
- # -- not yet
-}
-
-sub readOBJ {
- my($fn) = @_;
- my $p = { };
- print ", obj read <$fn>\n" if($conf{verbose});
-
- my $err;
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- if(open(my $fh,"<",$fn)) {
- my(@vs);
- while(<$fh>) {
- chop;
- next if(/^\s*#/);
- if(/^v /) {
- my(@c) = split(/ +/);
- shift(@c);
- push(@{$p->{vertices}},[$c[0]*1,$c[1]*1,$c[2]*1]);
- for(my $i=0; $i<3; $i++) {
- $min[$i] = $c[$i] if($min[$i]>$c[$i]);
- $max[$i] = $c[$i] if($max[$i]<$c[$i]);
- }
- } elsif(/^f /) {
- my(@c) = split(/ +/);
- shift(@c);
- @c = map { $_-1 } @c;
- foreach my $i (0..$#c-2) {
- push(@{$p->{facets}},[$c[0],$c[$i+1],$c[$i+2]]);
- }
- } elsif(/^\s*$/) {
- ;
- } elsif(/^(\S+)/) {
- print "$me: WARN: '$1' in <$fn> not supported yet, ignored\n" if(!$err->{$1});
- $err->{$1}++;
- }
- }
- close $fh;
-
- # -- keep min/max/size up-to-date
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- #print toJSON($p);
- return $p;
-
- } else {
- print STDERR "$me: only .obj supported, abort.\n";
- exit;
- }
-}
-
-sub writeOBJ {
- my($fn,$p) = @_;
- print ", obj writing <$fn>\n" if($conf{verbose});
- if(open(my $fh,">",$fn)) {
- foreach my $v (@{$p->{vertices}}) {
- print $fh sprintf("v %.5f %.5f %.5f\n",$v->[0],$v->[1],$v->[2]);
- }
- if($p->{volumes}) { # -- multiple volumes (multiple color/material)
- foreach my $v (@{$p->{volumes}}) {
- foreach my $f (@$v) {
- print $fh sprintf("f %d %d %d\n",$p->{facets}->[$f]->[0]+1,$p->{facets}->[$f]->[1]+1,$p->{facets}->[$f]->[2]+1);
- }
- }
- } else { # -- single volume (single color/material)
- foreach my $f (@{$p->{facets}}) {
- print $fh sprintf("f %d %d %d\n",$f->[0]+1,$f->[1]+1,$f->[2]+1);
- }
- }
- close $fh;
- }
-}
-
-sub readOFF {
- my($fn) = @_;
- my $p = { };
- print ", off read <$fn>\n" if($conf{verbose});
-
- my $err;
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- if(open(my $fh,"<",$fn)) {
- my($nv,$nf);
- my $t = 0;
- while(<$fh>) {
- s/\n$//;
- next if(/^\s*#/||/^\s*$/);
- $t++, next if($t==0 && /^OFF/);
- $t++, $nv = $1, $nf = $2, next if($t==1 && /^(\d+)\s+(\d+)/);
- if($t==2 && $nv > 0) {
- s/^\s+//;
- my(@c) = split(/\s+/);
- @c = map { $_ * 1 } @c;
- push(@{$p->{vertices}},[$c[0],$c[1],$c[2]]);
- for(my $i=0; $i<3; $i++) {
- $min[$i] = $c[$i] if($min[$i]>$c[$i]);
- $max[$i] = $c[$i] if($max[$i]<$c[$i]);
- }
- $nv--;
- } elsif($t==2 && $nv == 0 && $nf > 0) {
- s/^\s+//;
- my(@v) = split(/\s+/);
- @v = map { $_ * 1 } @v;
- shift(@v); # -- we don't need the first
- for(my $i=0; $i<$#v-2; $i++) {
- push(@{$p->{facets}},[$v[0],$v[$i+1],$v[$i+2]]);
- }
- $nf--;
- } elsif($t==2 && $nv == 0 && $nf == 0) {
- last;
- }
- }
- close $fh;
- # -- keep min/max/size up-to-date
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- return $p;
-
- } else {
- print STDERR "$me: only .off supported, abort.\n";
- exit;
- }
-}
-
-sub read3MJ {
- my($fn) = @_;
- my $p = { };
- print ", 3mj read <$fn>\n" if($conf{verbose});
-
- my $err;
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
-
- if(-e $fn) {
- my $s;
-
- my $buff; # -- probe header
- open(my $fh,"<",$fn);
- read($fh,$buff,256);
- close $fh;
-
- local $/;
- if($buff=~/^\x1f\x8b/) { # -- compressed
- my $fh = new IO::Zlib;
- $fh->open($fn,"rb");
- $s = <$fh>;
- $fh->close;
- } else {
- open(my $fh,"<",$fn);
- $s = <$fh>;
- close $fh;
- }
- my $e = fromJSON($s);
- unless($e && $e->{format} && $e->{format}=~/^3MJ\/\d\.\d/) {
- print STDERR "$me: invalid 3MJ format of \"$fn\"\n";
- exit -1;
- }
- foreach my $v (@{$e->{vertices}}) {
- my @c = @{$v->{c}};
- for(my $i=0; $i<3; $i++) {
- $min[$i] = $c[$i] if($min[$i]>$c[$i]);
- $max[$i] = $c[$i] if($max[$i]<$c[$i]);
- }
- push(@{$p->{vertices}},\@c);
- }
- my $vid = 0;
- my $fid = 0;
- foreach my $v (@{$e->{volumes}}) {
- foreach my $f (@{$v->{triangles}}) {
- push(@{$p->{facets}},$f->{v});
- push(@{$p->{volumes}->[$vid]},$fid++) if(@{$e->{volumes}}>1);
- }
- $vid++;
- }
- close $fh;
-
- # -- keep min/max/size up-to-date
- $p->{min} = \@min;
- $p->{max} = \@max;
- $p->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- return $p;
-
- } else {
- print STDERR "$me: only .3mj supported, abort.\n";
- exit;
- }
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub partWrite {
- my($fn,$p) = @_;
- if($fn=~/\.amf$/i) {
- return writeAMF($fn,$p);
- } elsif($fn=~/\.obj$/i) {
- return writeOBJ($fn,$p);
- } else {
- return writeSTL($fn,$p);
- }
-}
-
-sub partRead {
- my($fn) = @_;
- my $p;
-
- if(!-e $fn) {
- error("file <$fn> not found, abort");
- }
- if($fn=~/\.stl$/i) {
- $p = readSTL($fn);
- } elsif($fn=~/\.amf$/i) {
- $p = readAMF($fn);
- } elsif($fn=~/\.obj$/i) {
- $p = readOBJ($fn);
- } elsif($fn=~/\.off$/i) {
- $p = readOFF($fn);
- } elsif($fn=~/\.3mj$/i) {
- $p = read3MJ($fn);
- } elsif($fn=~/\.3mf$/i) {
- $p = read3MF($fn);
- } else {
- error("for internal preprocessing (scale,rotate,etc) only .stl, .amf, .obj, .off, .3mj, .3mf; no support for <$fn>");
- }
- $p->{filename} = $fn;
- $p->{atime} = time();
- $p->{mtime} = (stat($fn))[9];
-
- if($p->{min}->[2]>0 || $p->{min}->[2]<0) { # -- min.z > 0?
- $p = partRecenter($p,[0,0,-1]); # -- ensure min.z is 0
- }
- return $p;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub partsArrange { # -- arrange multiple parts (same or different sizes)
- my(@ps) = @_;
- my($c) = pop(@ps);
-
- return $ps[0] if(@ps<=1);
-
- my $s = 10; # -- space between parts
-
- if(1) {
- my $p0;
- my($x,$y) = (0,0);
- my $h = 0;
-
- my(@avg);
- foreach my $p (@ps) {
- for(my $i=0; $i<3; $i++) {
- $avg[$i] += $p->{size}->[$i];
- }
- }
- $avg[0] /= @ps;
- $avg[1] /= @ps;
- $avg[2] /= @ps;
-
- my($xl,$yl) = ($c->{build}->{x}/$avg[0],$c->{build}->{y}/$avg[1]);
- my($xi);
-
- $xl = int(sqrt($avg[0]*$avg[1])*@ps);
-
- foreach my $p (@ps) {
- $p = partTranslate($p,[-$p->{min}->[0],-$p->{min}->[1],0]); # -- align for packing
- if($p->{size}->[0] > $c->{build}->{x} || $y+$p->{size}->[1] > $c->{build}->{y}) {
- error("too many parts on build plate, exceeds its dimension");
- }
- $p0 = partMerge($p0,partTranslate($p,[$x,$y,0]));
- $x += $p->{size}->[0]+$s;
- $xi++;
- $h = $p->{size}->[1]+$s if($h < $p->{size}->[1]+$s);
- if($x > $c->{build}->{x}-$s || $xi > $xl) {
- $x = $s;
- $y += $h;
- $h = 0;
- $xi = 0;
- }
- }
- return partRecenter($p0,[1,1,0]);
-
- } else {
- my $bp = Algorithm::BinPack::2D->new(binwidth => $c->{build}->{x}, binheight => $c->{build}->{y});
- my $i = 0;
- foreach my $p (@ps) {
- $p = partTranslate($p,[-$p->{min}->[0],-$p->{min}->[1],0]); # -- align for packing
- $bp->add_item(label=>"".++$i,width=>$p->{size}->[0]+$s,height=>$p->{size}->[1]+$s); # -- hint: it won't like "0" as label, so we start with 1
- }
- my $p0 = { };
- my @pb;
- my @b = $bp->pack_bins;
- if(@b>1) {
- error("too many parts on the build-plate, exceeds its size");
- } else {
- foreach my $i (@{$b[0]->{items}}) {
- my $p = $ps[$i->{label}*1-1];
- $p0 = partMerge($p0,partTranslate($p,[$i->{x}+$s/2,$i->{y}+$s/2,0]));
- }
- return partRecenter($p0,[1,1,0]);
- }
- }
-}
-
-sub partMerge { # -- merge part to another one
- my($p0,$c) = @_;
-
- unless($p0 && $p0->{facets}) {
- $p0->{facets} = [];
- $p0->{vertices} = [];
- $p0->{min} = [1e6,1e6,1e6];
- $p0->{max} = [-1e6,-1e6,-1e6];
- $p0->{size} = [0,0,0];
- }
- if(0) {
- push(@{$p0->{facets}},@{$c->{facets}});
- } else {
- my $off = @{$p0->{vertices}};
- my(@a) = map { [$_->[0] + $off,$_->[1] + $off, $_->[2] + $off] } @{$c->{facets}};
- my(@b); @b = map { [$_->[0] + $off,$_->[1] + $off, $_->[2] + $off] } @{$c->{volumes}} if($c->{volumes});
- push(@{$p0->{facets}},@a);
- push(@{$p0->{vertices}},@{$c->{vertices}});
- push(@{$p0->{volumes}},@b) if($c->{volumes});
- }
-
- for(my $i=0; $i<3; $i++) {
- $p0->{min}->[$i] = $c->{min}->[$i] if($p0->{min}->[$i]>$c->{min}->[$i]);
- $p0->{max}->[$i] = $c->{max}->[$i] if($p0->{max}->[$i]<$c->{max}->[$i]);
- }
- $p0->{size}->[0] = $p0->{max}->[0]-$p0->{min}->[0];
- $p0->{size}->[1] = $p0->{max}->[1]-$p0->{min}->[1];
- $p0->{size}->[2] = $p0->{max}->[2]-$p0->{min}->[2];
-
- return $p0;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub partTransform {
- my($p,$t) = @_;
- my $n = 0;
- my $nn = 0;
- my $pn = { };
-
- my(@min,@max);
- $min[0] = $min[1] = $min[2] = 1e6;
- $max[0] = $max[1] = $max[2] = -1e6;
-
- if(1) {
- my @np;
- my $n = 0;
- foreach my $v (@{$p->{vertices}}) {
- my @nv = &$t(@$v); # -- per vertex
- for(my $j=0; $j<3; $j++) { # -- x,y,z
- # -- update min/max
- $min[$j] = $nv[$j] if($nv[$j]<$min[$j]);
- $max[$j] = $nv[$j] if($nv[$j]>$max[$j]);
- }
- push(@np,\@nv);
- $n++;
- }
- $pn->{facets} = $p->{facets};
- $pn->{vertices} = \@np;
- $pn->{volumes} = $p->{volumes} if($p->{volumes});
- print ", $n vertices transformed\n" if($conf{verbose});
-
- } else {
- foreach my $f (@{$p->{facets}}) {
- my @nf;
- foreach my $v (@$f) {
- my @nv = &$t(@$v); # -- per vertex
- push(@nf,\@nv) if(@nv==3);
- }
- if(@nf==3) {
- $pn->{facets}->[$n++] = \@nf;
- $nn++;
- } else {
- $pn->{facets}->[$n++] = $f;
- @nf = @$f;
- }
- for(my $i=0; $i<3; $i++) { # -- 3 vertices per face
- for(my $j=0; $j<3; $j++) { # -- x,y,z
- # -- update min/max
- $min[$j] = $nf[$i]->[$j] if($nf[$i]->[$j]<$min[$j]);
- $max[$j] = $nf[$i]->[$j] if($nf[$i]->[$j]>$max[$j]);
- }
- }
- }
- print ", $nn of $n facets transformed\n" if($conf{verbose});
- }
- # -- keep min/max/size up-to-date
- $pn->{min} = \@min;
- $pn->{max} = \@max;
- $pn->{size} = [$max[0]-$min[0],$max[1]-$min[1],$max[2]-$min[2]];
- $pn->{process} = ();
-
- push(@{$pn->{process}},@{$p->{process}}) if($p->{process});
-
- return $pn;
-}
-
-sub partRecenter {
- my($p,$s) = @_;
-
- printf ", recenter: %d,%d,%d ",$s->[0],$s->[1],$s->[2] if($conf{verbose});
- print "min @{$p->{min}}, max @{$p->{max}}, " if($conf{verbose});
- $s = [1,1,1] unless($s);
- my $n = 0;
- my $pn = partTransform($p,sub {
- my(@p) = @_;
- $p[0] -= $p->{min}->[0] + $p->{size}->[0]/2 if($s->[0]);
- $p[1] -= $p->{min}->[1] + $p->{size}->[1]/2 if($s->[1]);
- $p[2] -= $p->{min}->[2] + $p->{size}->[2]/2 if($s->[2]>0);
- $p[2] -= $p->{min}->[2] if($s->[2]<0);
- return(@p);
- });
- print "=> min @{$pn->{min}}, max @{$pn->{max}}, " if($conf{verbose});
- push(@{$pn->{process}},{type=>'recenter',data=>$s,time=>time()});
- return $pn;
-}
-
-sub partScale {
- my($p,$s) = @_;
-
- $s = [@$s[0],@$s[0],@$s[0]] if(ref($s)ne'ARRAY' || @$s!=3);
-
- my $ns = 1; # -- normalized value
- my $adj;
-
- print ", scale: @$s" if($conf{verbose});
- for(my $i=0; $i<3; $i++) { # -- check any absolute dimension or percentage
- $ns = $s->[$i] = $s->[$i]/$p->{size}->[$i], $adj++ if($s->[$i] && $s->[$i]=~/mm$/);
- $ns = $s->[$i] = $s->[$i]/100, $adj++ if($s->[$i] && $s->[$i]=~/%$/);
- }
- for(my $i=0; $i<3; $i++) { # -- adjust any non-set scale factors
- $s->[$i] = $ns, $adj++ if($s->[$i]==0);
- }
- printf ", scale %.2f,%.2f,%.2f",$s->[0],$s->[1],$s->[2] if(!$conf{verbose} && !$conf{quiet});
- print ", adjusted scale: @$s, " if($conf{verbose} && $adj);
- for(my $i=0; $i<3; $i++) { # -- update size
- $p->{size}->[$i] *= $s->[$i];
- }
- my $pn = partTransform($p,sub {
- my(@p) = @_;
- return ($p[0]*$s->[0],$p[1]*$s->[1],$p[2]*$s->[2]);
- });
- push(@{$pn->{process}},{type=>'scale',data=>$s,time=>time()});
- return $pn;
-}
-
-sub partRotate {
- my($p,$s) = @_;
- my(@r) = ($s->[0] * pi/180,$s->[1] * pi/180,$s->[2] * pi/180);
- printf ", rotate %.1f,%.1f,%.1f",$s->[0],$s->[1],$s->[2] if(!$conf{verbose} && !$conf{quiet});
- print ", rotate: @$s" if($conf{verbose});
- my $pn = partTransform($p,sub {
- my(@p) = @_;
- my(@pn);
- # -- https://ch.mathworks.com/matlabcentral/answers/123763-how-to-rotate-entire-3d-data-with-x-y-z-values-along-a-particular-axis-say-x-axis
- # -- x
- $pn[0] = $p[0];
- $pn[1] = $p[1]*cos($r[0]) - $p[2]*sin($r[0]);
- $pn[2] = $p[1]*sin($r[0]) + $p[2]*cos($r[0]);
- @p = @pn;
- # -- y
- $pn[0] = $p[0]*cos($r[1]) + $p[2]*sin($r[1]);
- $pn[1] = $p[1];
- $pn[2] = $p[2]*cos($r[1]) - $p[0]*sin($r[1]);
- @p = @pn;
- # -- z
- $pn[0] = $p[0]*cos($r[2]) - $p[1]*sin($r[2]);
- $pn[1] = $p[0]*sin($r[2]) + $p[1]*cos($r[2]);
- $pn[2] = $p[2];
- return (@pn);
- });
- push(@{$pn->{process}},{type=>'rotate',data=>$s,time=>time()});
- return $pn;
-}
-
-sub partTranslate {
- my($p,$s) = @_;
- printf ", translate %.1f,%.1f,%.1f",$s->[0],$s->[1],$s->[2] if(!$conf{verbose} && !$conf{quiet});
- print ", translate: @$s" if($conf{verbose});
- my $pn = partTransform($p,sub {
- my(@p) = @_;
- return ($p[0]+$s->[0],$p[1]+$s->[1],$p[2]+$s->[2]);
- });
- push(@{$pn->{process}},{type=>'translate',data=>$s});
- return $pn;
-}
-
-sub partMirror {
- my($p,$s) = @_;
- printf ", mirror %d,%d,%d",$s->[0],$s->[1],$s->[2] if(!$conf{verbose} && !$conf{quiet});
- print ", mirror: @$s" if($conf{verbose});
- my $pn = partTransform($p,sub {
- my(@p) = @_;
- return ($p[0]*($s->[0]?-1:1),$p[1]*($s->[1]?-1:1),$p[2]*($s->[2]?-1:1));
- });
- push(@{$pn->{process}},{type=>'mirror',data=>$s});
- return $pn;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub evalExpr {
- my($e) = @_;
-
- # { ... } eval expression
- # $ replace variable
- $e =~ s#\{([^}]+)\}#
- my $ex = $1;
- $ex =~ s"\$(\w+)"
- my $k = $1;
- if(!(defined $conf{$k} ||$printer->{$k})) {
- print \"$me: variable \$$k not defined for '$e'\n\";
- exit -1;
- }
- $conf{$k} || $printer->{$k};
- "eg;
- eval($ex);
- #eg;
- return $e;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub gconsole {
- my($cmd,$com,$cpath) = @_;
-
- $cmd =~ s/^\s+//;
- $cmd =~ s/\s+$//;
-
- my(@a) = split(/\s+/,$cmd);
-
- if(lc($a[0]) eq 'quit' || lc($a[0]) eq 'exit') {
- exit 0;
-
- } elsif(lc($a[0]) eq 'help' ) {
- my @h;
- push(@h,"quit","exit","reset");
- foreach my $p (".",@paths) {
- opendir(my $dh,"$p/gconsole/commands/");
- push(@h,grep(!/^\./,readdir($dh)));
- closedir($dh);
- }
- print "available commands: ",join(", ",sort @h),"\n";
- return("",0);
-
- } elsif(lc($a[0]) eq 'reset' ) {
- # -- reset board
- if($conf{serialif}eq'termios') {
- print "WARN: command not available with serialif=$conf{serialif}\n";
- } else {
- $com->pulse_dtr_on(100);
- }
- return("",0);
-
- } elsif(-e "$cpath/gconsole/commands/$a[0]") {
- my(@o);
- print "$me: execute command <$a[0]>\n" if($conf{verbose});
- open(my $fh,"<","$cpath/gconsole/commands/$a[0]");
- while(<$fh>) {
- chop;
- s/\$(\d+)/$a[$1]/g;
- push(@o,$_);
- }
- close $fh;
- return (join("\n",@o),1);
-
- } else {
- return ($cmd,0);
- }
-}
-
-sub uid { # -- 00000000-00000000-00000000-00000000
- return join("-",map { sprintf("%08x",(rand()*(1<<32))&0xffffffff) } (0..3));
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub openSerial {
- my($d,$uuid) = @_;
- my $com;
-
- $uuid = $uuid || $conf{machine_uuid};
-
- if($d=~/^auto/i) { # -- help out via machine-uuid
- if(!$conf{machine_uuid}) {
- error("define machine-uuid in command-line or printer profile, otherwise machine cannot be found");
- }
- if($d=~/auto:([\w\.,]+)/) { # -- extract hostname(s)
- my $hs = $1;
- foreach my $h (split(/,/,$hs)) {
- my $p = 0;
- while(tcpPing($h,3380+$p)) {
- my $c = openSerial("tcp:$h:$p",$uuid);
- return $c if($c);
- }
- }
- } else { # -- probe locally only
- my $p = 0;
- while(-e "/dev/ttyUSB$p") { # -- local
- my $c = openSerial("/dev/ttyUSB$p",$uuid);
- return $c if($c);
- $p++;
- }
- }
- error("wasn't able to find machine with uuid:$conf{machine_uuid}");
-
- } elsif($d=~/^tcp:(\S+)/i) { # -- tcp device?
- $d = $1;
- my $sdev = "/tmp/print3r-device-$d";
- $SIG{CHLD} = 'IGNORE';
- my $p = 3380;
- $p += $1*1 if($d=~s/:(\d+)$//);
- if(!which('socat')) {
- error("socat not found or installed");
- }
- print "$me: connect $d:$p (socat)\n" if($conf{verbose});
- if(!-e $sdev) {
- if(fork()==0) {
- if(fork()==0) {
- print "$me: launch socat $d:$p\n" if($conf{verbose});
- exec("socat","pty,raw,echo=0,b$conf{baudrate},link=$sdev","tcp:$d:$p");
- }
- wait;
- print "$me: socat ended\n" if($conf{verbose});
- unlink $sdev;
- exit 0;
- }
- #wait;
- sleep 0.5;
- }
- print "$me: reroute $d:$p => $sdev\n" if($conf{verbose});
- $d = $sdev;
- }
- $com = Device::SerialPort->new($d || $conf{device}, 1);
- error("can't open $conf{device}") if(!$com);
-
- my $done;
- foreach my $b ($com->baudrate) { # -- we check availability of baudrate to set
- if($b*1==$conf{baudrate}*1) {
- $done++;
- last;
- }
- }
-
- if(!$done || $conf{serialif}eq'termios') {
- $com->close();
-
- $conf{serialif} = 'termios';
-
- print "$me: using termios interface to connect\n" if($conf{verbose});
-
- # -- Note: Device::SerialPort does NOT support arbitrary baudrates like default 250000 in Marlin, but 230400 or 115200
- # as alternative IO::Termios and Linux::Termios2
- # $com->read() works, but $com->status() doesn't exist
- require IO::Termios;
- require Linux::Termios2;
- use Fcntl qw( O_NOCTTY O_NDELAY );
-
- $com = IO::Termios->open($conf{device},$conf{baudrate}.",8,n,1",O_NOCTTY|O_NDELAY);
-
- error("can't open $conf{device}") if(!$com);
-
- $com->setflag_echo(0);
- $com->blocking(0);
- $com->autoflush();
-
- #sleep 1; # -- essential wait
- #
- #my $buff;
- #while(read($com,$buff,3)) { # -- slurp the manifest
- # sleep 0.005;
- #}
-
- } else {
- $com = Device::SerialPort->new($d || $conf{device}, 1);
- error("can't open $conf{device}") if(!$com);
-
- if($conf{baudrate} && $conf{baudrate}ne'auto') {
- if($com->can_arbitrary_baud) {
- $com->baudrate($conf{baudrate}*1);
- } else {
- my $done;
- foreach my $b ($com->baudrate) {
- if($b == $conf{baudrate}) {
- $com->baudrate($conf{baudrate}*1);
- $done++;
- }
- }
- unless($done) {
- error("could not set $conf{baudrate}, as it's not valid baudrate (only ".join(",",sort { $a<=>$b } $com->baudrate)." available)");
- }
- }
-
- } else {
- # -- probe baudrate (not yet used, mostly untested)
- my $bb;
- print "$me: print: configure serial\r" if(!$conf{quiet});
- foreach my $b (sort { $b<=>$a } $com->baudrate) {
- my $st = time();
-
- $com->purge_all;
- $com->baudrate($b);
-
- sleep 0.5;
-
- print "probe $b\n" if($conf{verbose}>1);
-
- printerSend($com,"M115\n");
-
- sleep 0.2;
-
- my($rd) = printerResponse($com,"M115\n",{timeout => 1, callback => sub {
- my($rd,$com,$cmd) = @_;
- $rd =~ s/[\t\r\n]//g;
- print "> $rd\n" if($conf{verbose}>2);
- }});
-
- if($rd=~/echo/) {
- $bb = $b;
- last;
- } elsif($rd=~/[\0-\037]/) { # -- gibberish
- last;
- } else {
- #$bb = $b;
- #last;
- }
-
- last if($bb);
-
- sleep 0.3;
- }
- print "baudrate: $bb\n" if($conf{verbose});
- sleep 0.1;
- if(!$bb) {
- error("no viable baudrate for $conf{device} found, abort.");
- }
- }
- }
-
- sleep 2; # -- allow the board to (re)boot
-
- $process->{serial_backend} = $conf{serialif};
- printerResponse($com,"M115\n",{timeout=>1.5, callback=>sub {
- my($m) = @_;
- # -- slurp manifest ... (whatever is left to get)
- }});
-
- # -- retrieve (again) the firmware version & uuid of the machine
- foreach my $gcode ("M115\n","M122\n") { # -- Marlin uses M115, RRF uses M122 to report UUID
- sleep 0.8;
- printerSend($com,$gcode);
- my($resp) = printerResponse($com,$gcode,{timeout=>1.5});
- $printer->{firmware} = $resp, $printer->{uuid} = $1, last if($resp=~/UUID\s*:\s*(\S+)/); # Marlin
- $printer->{firmware} = $resp, $printer->{uuid} = $1, last if($resp=~/Board ID\s*:\s*(\S+)/); # RRF [1]
- $printer->{firmware} = $resp, $printer->{uuid} = $1, last if($resp=~/MAC address\s*(\S+)/); # RRF [2]: as last resort we get MAC address (ethernet or wifi)
- }
-
- if($uuid) { # -- metadata like UUID requested
- if($printer->{uuid} && $printer->{uuid} ne $uuid) {
- if($conf{device}) {
- error("UUID mismatch: '$conf{machine_uuid}' != '$printer->{uuid}', abort\n");
- } else {
- return undef; # -- no device=... set, therefore we are probing devices, and fail with 'undef'
- }
- } elsif(!defined $printer->{uuid}) {
- print "$me: WARN: retrieve of machine-uuid (UUID) failed, ignored\n";
- } else {
- print "$me: authenticated \"$conf{machine_name}\" ($conf{machine_uuid}) at $conf{device}\n";
- }
- }
-
- foreach my $gcode ("M503\n") { # -- read out EEPROM/settings
- sleep 0.8;
- printerSend($com,$gcode);
- my($resp) = printerResponse($com,$gcode,{timeout=>1.5});
- $printer->{firmware_eeprom} = $resp;
- }
-
- return $com;
-}
-
-sub tcpPing {
- my($h,$p) = @_;
- print "$me: probing $h:$p\n" if($conf{verbose}>1);
- my $s = new IO::Socket::INET(PeerHost=>$h, PeerPort=>$p, Proto=>'tcp');
- return $s && $s->close() || 0;
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub webgui {
- my $server = IO::Socket::INET->new(
- LocalPort => $conf{webgui_port} || 9082,
- Type => SOCK_STREAM,
- Reuse => 1,
- Listen => 10 ) # or SOMAXCONN
- or die "can't start a tcp server on port $conf{webgui_port}: $!\n";
-
- use IO::Socket;
- use IO::Select;
-
- print STDERR "$me: listening port $conf{webgui_port}\n" if($conf{verbose});
-
- $SIG{PIPE} = 'IGNORE';
- $SIG{CHLD} = 'IGNORE';
-
- my(%g);
- my $info;
-
- my $rs = new IO::Select();
- $rs->add($server);
- while(1) {
- my($rhs) = IO::Select->select($rs,undef,undef,0.1);
- foreach my $rh (@$rhs) {
- if($rh==$server) {
- my $c = $rh->accept();
- $rs->add($c);
-
- } else {
- processRequestHeader($rh);
- $rs->remove($rh);
- }
- }
- }
-}
-
-sub processRequestHeader {
- my($client) = @_;
-
- $client->autoflush(1);
- $_ = <$client>;
- if($_) {
- my($i);
-
- s/[\n\r]$//g;
-
- my($cmd) = ($_=~/^(\S+)/);
-
- # -- first line of request, "GET / HTTP/1.1"
- $i->{Header}->{RequestType} = $1,
- $i->{Header}->{RequestURL} = $2,
- $i->{Header}->{Version} = $3 if(/^(\S+)\s*(\S*)\s*(\S*)/);
- $i->{Header}->{RemoteAddr} = $client->peerhost();
-
- if($i->{Header}->{RequestURL}=~s/\?(\S*)//) {
- $i->{Header}->{QueryString} = $1;
- foreach my $kv (split(/&/,$i->{Header}->{QueryString})) {
- my($k,$v) = split(/=/,$kv);
- $v =~ s/\+/ /g; $v =~ s/%(\X\X)/sprintf("%c",hex($1))/eg; $v =~ s/%%/%/g;
- $i->{Variable}->{$k} = $v;
- }
- }
- while(<$client>) {
- s/[\r\n]//g;
- if($cmd eq 'PUT'||$cmd eq 'POST'&&length($_)==0) { # -- end of PUT header
- read($client,$i->{Content}->{Body},$i->{Header}->{'Content-Length'});
- $i->{Content}->{Length} = $i->{Header}->{'Content-Length'};
-
- if($cmd eq 'POST') {
- foreach my $kv (split(/&/,$i->{Content}->{Body})) {
- my($k,$v) = split(/=/,$kv);
- $v =~ s/\+/ /g; $v =~ s/%(\X\X)/sprintf("%c",hex($1))/eg; $v =~ s/%%/%/g;
- $i->{Variable}->{$k} = $v;
- }
- }
- print "C: $i->{Content}->{Body}\n" if($conf{verbose}>1);
- last;
-
- } elsif(length($_)==0) { # -- end of header (of any command)
- last;
- }
- }
- if(fork()==0) {
- processRequest($client,$i);
- close $client;
- exit 0;
- }
- }
- close $client;
-}
-
-sub processRequest {
- my($c,$i) = @_;
- print toJSON($i) if($conf{verbose}>1);
- my $p = $i->{Header}->{RequestURL};
- $p .= "index.html" if($p=~/\/$/);
- if(-f "$conf{webgui_root}/www/$p") { # -- something locally and static?
- processLocalStatic($c,$p);
- } else {
- print $c "HTTP/1.1 404 NOT FOUND\n\n";
- }
-}
-
-sub processLocalStatic {
- my($c,$p) = @_;
- my $mime = "text/plain";
-
- $mime = "text/html" if($p=~/\.html$/i);
- $mime = "image/jpeg" if($p=~/\.jpg$/i);
- $mime = "image/png" if($p=~/\.png$/i);
-
- if(open(my $fh,'<',"$conf{webgui_root}/www/$p")) {
- print $c "HTTP/1.1 200 OK\nContent-Type: $mime\n\n";
- binmode($fh);
- my $buff;
- my $n;
- while($n=read($fh,$buff,4096)) {
- print $c $buff;
- }
- close($fh);
-
- } else {
- print $c "HTTP/1.1 404 NOT FOUND\n\n";
- }
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub logReference {
- my($no) = @_;
- my $n = 1;
- open(my $fh,"<","$ENV{HOME}/.print3r/log.json");
- while(<$fh>) {
- if($no == $n) {
- my $d = eval { from_json($_); };
- #print to_json($d,{pretty=>1,canonical=>1});
- #%conf = %{$d->{settings}};
- foreach my $k (keys %{$d->{settings}}) {
- next if $k eq 'device';
- next if $k eq 'uuid';
- $conf{$k} = $d->{settings}->{$k};
- }
- @f = ();
- push(@f,@{$d->{file_list}});
- last;
- }
- $n++;
- }
- close $fh;
-}
-
-sub versions {
- my(@vs);
- my $fnc = "$ENV{HOME}/.print3r/versions.json";
-
- # -- cache it for 24 hrs, as probing is slow (can take several seconds)
- if((!-e "$ENV{HOME}/.print3r/versions.json") || (stat($fnc))[9] < time()-24*60*60) {
- my(@apps) = map { $slicer->{$_}->{exe} } keys %$slicer;
- push(@apps,'openscad','scriptcad'); # -- TODO: openscad reports version to stderr
- #push(@apps,$conf{gviewer}) if($conf{gviewer});
- foreach my $a (@apps) {
- my $v = `$a --version 2> /dev/null`;
- chop($v);
- $v =~ s/\n.*//mg;
- $v = '?.?.?' if(!($v=~/\d\./));
- $v = "$a $v" if($v=~/^\d\./ || $v =~ /^\?/);
- push(@vs,$v);
- }
- writeJSON($fnc,\@vs);
- return \@vs;
- } else {
- my $v = readJSON($fnc);
- return $v;
- }
-}
-
-# ---------------------------------------------------------------------------------------------------------------
-
-sub fromJSON {
- return eval { JSON->new->allow_nonref->relaxed([1])->decode($_[0]) };
-}
-
-sub toJSON {
- my($v,$a) = @_;
- my $j = JSON->new->allow_nonref->allow_blessed->canonical;
- $j = $j->pretty unless($a&&!$a->{pretty});
- return $j->encode($v);
-}
-
-sub readJSON {
- my($fn) = @_;
- local $/;
- open(my $fh,"<",$fn);
- my($d) = <$fh>;
- close $fh;
- return fromJSON($d);
-}
-
-sub writeJSON {
- my($fn,$d) = @_;
- if(open(my $fh,">",$fn)) {
- print $fh toJSON($d);
- close $fh;
- } else {
- die "$NAME: ERROR: cannot write to $fn: $@\n";
- }
-}
-
-# ----------------------------------------------------------------------------------------------------------------
-
-sub inline_args {
- my($s) = @_;
- return split(/,/,$s);
-}
-
-sub inline_function {
- my($n) = shift;
- print "$me: calling inline_$n() with @_\n" if($conf{verbose});
- @_ = eval("inline_$n(\@_)");
- print "$me: => results: @_\n" if($conf{verbose});
- print "$me: ERROR: inline_$n() failed: $@\n" if($@);
- return "@_";
-}
-
-sub inline_phases {
- my($r,$n,$p,$opts) = @_;
- my %v;
- my(%m) = ('A'=>'a', 'B'=>'b', 'C'=>'c');
-
- if($conf{multicolor_map}) {
- (%m) = map { /(\w+)\s*[:=]\s*(\S+)/; ($1, $2); } split(/,/,$conf{multicolor_map});
- }
-
- if($n==2) {
- if($n==2) {
- $v{'a'} = $r < 1/2 ? 1-$r*2 : ($r-1/2)*2; # 1..0..1
- $v{'b'} = $r < 1/2 ? $r*2 : 1-($r-1/2)*2; # 0..1..0
- } else {
- $v{'a'} = 1 - $r;
- $v{'b'} = $r;
- }
- return "A$v{$m{'B'}} B$v{$m{'B'}}";
- } else {
- if($p==3) {
- $v{'a'} = $r < 1/2 ? 1-$r*2 : 0; # 1..0..0
- $v{'b'} = $r < 1/2 ? $r*2 : 1 - ($r-1/2)*2; # 0..1..0
- $v{'c'} = $r >= 1/2 ? ($r-1/2)*2 : 0; # 0..0..1
- } else {
- $v{'a'} = $r < 1/3 ? 1-$r*3 : $r >= 2/3 ? ($r-2/3)*3 : 0; # 1..0..0..1
- $v{'b'} = $r < 1/3 ? $r*3 : $r <= 2/3 ? 1 - ($r-1/3)*3 : 0; # 0..1..0..0
- $v{'c'} = $r >= 1/3 && $r < 2/3 ? ($r-1/3)*3 : $r >= 2/3 ? 1 - ($r-2/3)*3 : 0; # 0..0..1..0
- }
- return "A$v{$m{'A'}} B$v{$m{'B'}} C$v{$m{'C'}}";
- }
-}
-
-sub inline_hsl2cmy {
- my($h,$s,$l,$opts) = @_;
- my $r = (($h+180)%360)/360;
- my %v;
- my(%m) = ('A'=>'c', 'B'=>'m', 'C'=>'y', 'D'=>'k', 'E'=>'w');
-
- if($conf{multicolor_cmymap}) {
- (%m) = map { /(\w+)\s*[:=]\s*(\S+)/; ($1, $2); } split(/,/,$conf{multicolor_cmymap});
- }
- $v{'c'} = $r < 1/3 ? 1-$r*3 : $r >= 2/3 ? ($r-2/3)*3 : 0; # 1..0..0..1
- $v{'m'} = $r < 1/3 ? $r*3 : $r <= 2/3 ? 1 - ($r-1/3)*3 : 0; # 0..1..0..0
- $v{'y'} = $r >= 1/3 && $r < 2/3 ? ($r-1/3)*3 : $r >= 2/3 ? 1 - ($r-2/3)*3 : 0; # 0..0..1..0
- $v{'k'} = 0;
- $v{'w'} = 0;
- return "A$v{$m{'A'}} B$v{$m{'B'}} C$v{$m{'Y'}} D$v{$m{'K'}} E$v{$m{'W'}}";
-}
-
-sub inline_toolcolor {
- my($n,$a,$b,$c,$d,$e) = @_;
- $a = $a || 0;
- $b = $b || 0;
- $c = $c || 0;
- $d = $d || 0;
- $e = $e || 0;
- my $f = 1.0;
- $a *= $f;
- $b *= $f;
- $c *= $f;
- $d *= $f;
- $e *= $f;
- return "M163 S0 P$a\nM163 S1 P$b\nM163 S2 P$c\nM163 S3 P$d\nM163 S4 P$e\nM164 S$n\n";
-}
diff --git a/software/Print3r/settings/gconsole/commands/back b/software/Print3r/settings/gconsole/commands/back
deleted file mode 100644
index d3c7b0c2..00000000
--- a/software/Print3r/settings/gconsole/commands/back
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 Y$1
diff --git a/software/Print3r/settings/gconsole/commands/bed b/software/Print3r/settings/gconsole/commands/bed
deleted file mode 100644
index 1352d3fa..00000000
--- a/software/Print3r/settings/gconsole/commands/bed
+++ /dev/null
@@ -1 +0,0 @@
-M140 S$1
diff --git a/software/Print3r/settings/gconsole/commands/down b/software/Print3r/settings/gconsole/commands/down
deleted file mode 100644
index 186e94d9..00000000
--- a/software/Print3r/settings/gconsole/commands/down
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 Z-$1
diff --git a/software/Print3r/settings/gconsole/commands/fan b/software/Print3r/settings/gconsole/commands/fan
deleted file mode 100644
index 4b5231f0..00000000
--- a/software/Print3r/settings/gconsole/commands/fan
+++ /dev/null
@@ -1 +0,0 @@
-M106 S$1
diff --git a/software/Print3r/settings/gconsole/commands/forward b/software/Print3r/settings/gconsole/commands/forward
deleted file mode 100644
index e24dde68..00000000
--- a/software/Print3r/settings/gconsole/commands/forward
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 Y-$1
diff --git a/software/Print3r/settings/gconsole/commands/home b/software/Print3r/settings/gconsole/commands/home
deleted file mode 100644
index 89e9e093..00000000
--- a/software/Print3r/settings/gconsole/commands/home
+++ /dev/null
@@ -1 +0,0 @@
-G28 X Y Z
diff --git a/software/Print3r/settings/gconsole/commands/homex b/software/Print3r/settings/gconsole/commands/homex
deleted file mode 100644
index 8b5d65f6..00000000
--- a/software/Print3r/settings/gconsole/commands/homex
+++ /dev/null
@@ -1 +0,0 @@
-G28 X
diff --git a/software/Print3r/settings/gconsole/commands/homey b/software/Print3r/settings/gconsole/commands/homey
deleted file mode 100644
index 6382b826..00000000
--- a/software/Print3r/settings/gconsole/commands/homey
+++ /dev/null
@@ -1 +0,0 @@
-G28 Y
diff --git a/software/Print3r/settings/gconsole/commands/homez b/software/Print3r/settings/gconsole/commands/homez
deleted file mode 100644
index c52d5f37..00000000
--- a/software/Print3r/settings/gconsole/commands/homez
+++ /dev/null
@@ -1 +0,0 @@
-G28 Z
diff --git a/software/Print3r/settings/gconsole/commands/hx b/software/Print3r/settings/gconsole/commands/hx
deleted file mode 100644
index 8b5d65f6..00000000
--- a/software/Print3r/settings/gconsole/commands/hx
+++ /dev/null
@@ -1 +0,0 @@
-G28 X
diff --git a/software/Print3r/settings/gconsole/commands/hy b/software/Print3r/settings/gconsole/commands/hy
deleted file mode 100644
index 6382b826..00000000
--- a/software/Print3r/settings/gconsole/commands/hy
+++ /dev/null
@@ -1 +0,0 @@
-G28 Y
diff --git a/software/Print3r/settings/gconsole/commands/hz b/software/Print3r/settings/gconsole/commands/hz
deleted file mode 100644
index c52d5f37..00000000
--- a/software/Print3r/settings/gconsole/commands/hz
+++ /dev/null
@@ -1 +0,0 @@
-G28 Z
diff --git a/software/Print3r/settings/gconsole/commands/left b/software/Print3r/settings/gconsole/commands/left
deleted file mode 100644
index 88dca6c7..00000000
--- a/software/Print3r/settings/gconsole/commands/left
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 X-$1
diff --git a/software/Print3r/settings/gconsole/commands/nozzle b/software/Print3r/settings/gconsole/commands/nozzle
deleted file mode 100644
index 8393dffb..00000000
--- a/software/Print3r/settings/gconsole/commands/nozzle
+++ /dev/null
@@ -1 +0,0 @@
-M104 S$1
diff --git a/software/Print3r/settings/gconsole/commands/off b/software/Print3r/settings/gconsole/commands/off
deleted file mode 100644
index e21cb72c..00000000
--- a/software/Print3r/settings/gconsole/commands/off
+++ /dev/null
@@ -1,3 +0,0 @@
-M84
-M104 S0
-M140 S0
diff --git a/software/Print3r/settings/gconsole/commands/right b/software/Print3r/settings/gconsole/commands/right
deleted file mode 100644
index ff9c5f2a..00000000
--- a/software/Print3r/settings/gconsole/commands/right
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 X$1
diff --git a/software/Print3r/settings/gconsole/commands/stop b/software/Print3r/settings/gconsole/commands/stop
deleted file mode 100644
index 26326667..00000000
--- a/software/Print3r/settings/gconsole/commands/stop
+++ /dev/null
@@ -1 +0,0 @@
-M84
diff --git a/software/Print3r/settings/gconsole/commands/up b/software/Print3r/settings/gconsole/commands/up
deleted file mode 100644
index beae902f..00000000
--- a/software/Print3r/settings/gconsole/commands/up
+++ /dev/null
@@ -1,2 +0,0 @@
-G91
-G1 Z$1
diff --git a/software/Print3r/settings/gconsole/commands/x b/software/Print3r/settings/gconsole/commands/x
deleted file mode 100644
index 34b0363f..00000000
--- a/software/Print3r/settings/gconsole/commands/x
+++ /dev/null
@@ -1,2 +0,0 @@
-G92
-G1 X$1
diff --git a/software/Print3r/settings/gconsole/commands/y b/software/Print3r/settings/gconsole/commands/y
deleted file mode 100644
index 02cde819..00000000
--- a/software/Print3r/settings/gconsole/commands/y
+++ /dev/null
@@ -1,2 +0,0 @@
-G92
-G1 Y$1
diff --git a/software/Print3r/settings/gconsole/commands/z b/software/Print3r/settings/gconsole/commands/z
deleted file mode 100644
index 2dc5afa4..00000000
--- a/software/Print3r/settings/gconsole/commands/z
+++ /dev/null
@@ -1,2 +0,0 @@
-G92
-G1 Z$1
diff --git a/software/Print3r/settings/macro/coarse.ini b/software/Print3r/settings/macro/coarse.ini
deleted file mode 100644
index b58ac915..00000000
--- a/software/Print3r/settings/macro/coarse.ini
+++ /dev/null
@@ -1 +0,0 @@
-layer-height={int($nozzle_diameter*0.8*100)/100}
diff --git a/software/Print3r/settings/macro/feather.ini b/software/Print3r/settings/macro/feather.ini
deleted file mode 100644
index 377f5046..00000000
--- a/software/Print3r/settings/macro/feather.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-top-layers=1
-bottom-layers=1
-perimeters=1
-infill-density=15
diff --git a/software/Print3r/settings/macro/filament/noveste.ini b/software/Print3r/settings/macro/filament/noveste.ini
deleted file mode 100644
index 4f8cf62b..00000000
--- a/software/Print3r/settings/macro/filament/noveste.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-temperature = 200
-first-layer-temperature = 210
diff --git a/software/Print3r/settings/macro/filament/sienoc.ini b/software/Print3r/settings/macro/filament/sienoc.ini
deleted file mode 100644
index 858f0944..00000000
--- a/software/Print3r/settings/macro/filament/sienoc.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-temperature = 195
-first-layer-temperature = 210
diff --git a/software/Print3r/settings/macro/fine.ini b/software/Print3r/settings/macro/fine.ini
deleted file mode 100644
index 0fec462f..00000000
--- a/software/Print3r/settings/macro/fine.ini
+++ /dev/null
@@ -1 +0,0 @@
-layer-height={int($nozzle_diameter*0.5*0.5*100)/100}
diff --git a/software/Print3r/settings/macro/heavy.ini b/software/Print3r/settings/macro/heavy.ini
deleted file mode 100644
index db05c11d..00000000
--- a/software/Print3r/settings/macro/heavy.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-top-thickness=1.5
-bottom-thickness=1.5
-wall-thickness=1.5
-fill-density=30
diff --git a/software/Print3r/settings/macro/hollow.ini b/software/Print3r/settings/macro/hollow.ini
deleted file mode 100644
index c1352147..00000000
--- a/software/Print3r/settings/macro/hollow.ini
+++ /dev/null
@@ -1 +0,0 @@
-fill-density=0
diff --git a/software/Print3r/settings/macro/light.ini b/software/Print3r/settings/macro/light.ini
deleted file mode 100644
index 50342da0..00000000
--- a/software/Print3r/settings/macro/light.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-top-thickness=0.8
-bottom-thickness=0.8
-wall-thickness=0.8
-fill-density=20
diff --git a/software/Print3r/settings/macro/medium.ini b/software/Print3r/settings/macro/medium.ini
deleted file mode 100644
index 69d8ada7..00000000
--- a/software/Print3r/settings/macro/medium.ini
+++ /dev/null
@@ -1 +0,0 @@
-layer-height={int($nozzle_diameter*0.5*100)/100}
diff --git a/software/Print3r/settings/macro/revo-blue.ini b/software/Print3r/settings/macro/revo-blue.ini
deleted file mode 100644
index a0cb933a..00000000
--- a/software/Print3r/settings/macro/revo-blue.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-nozzle-diameter=0.6
-layer-height=0.45
diff --git a/software/Print3r/settings/macro/revo-green.ini b/software/Print3r/settings/macro/revo-green.ini
deleted file mode 100644
index b99b7e75..00000000
--- a/software/Print3r/settings/macro/revo-green.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-nozzle-diameter=0.8
-layer-height=0.50
diff --git a/software/Print3r/settings/macro/revo-pink.ini b/software/Print3r/settings/macro/revo-pink.ini
deleted file mode 100644
index 20fbb39f..00000000
--- a/software/Print3r/settings/macro/revo-pink.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-nozzle-diameter=0.15
-layer-height=0.1
diff --git a/software/Print3r/settings/macro/revo-red.ini b/software/Print3r/settings/macro/revo-red.ini
deleted file mode 100644
index 5c7b2ec1..00000000
--- a/software/Print3r/settings/macro/revo-red.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-nozzle-diameter=0.4
-layer-height=0.25
diff --git a/software/Print3r/settings/macro/revo-yellow.ini b/software/Print3r/settings/macro/revo-yellow.ini
deleted file mode 100644
index 00c187e4..00000000
--- a/software/Print3r/settings/macro/revo-yellow.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-nozzle-diameter=0.25
-layer-height=0.2
diff --git a/software/Print3r/settings/macro/thin.ini b/software/Print3r/settings/macro/thin.ini
deleted file mode 100644
index 0133fce4..00000000
--- a/software/Print3r/settings/macro/thin.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-perimeters=1
-top-layers=2
-bottom-layers=2
diff --git a/software/Print3r/settings/printer/ashtar-k-40x30.ini b/software/Print3r/settings/printer/ashtar-k-40x30.ini
deleted file mode 100644
index 0bd70998..00000000
--- a/software/Print3r/settings/printer/ashtar-k-40x30.ini
+++ /dev/null
@@ -1,36 +0,0 @@
-# -- slicer independent settings
-machine-name = "Ashtar K 38x30x33"
-machine-width = 348
-machine-height = 330
-machine-depth = 300
-
-filament-diameter = 1.75
-nozzle-diameter = 0.5
-layer-height = 0.4
-
-fill-density = 20
-
-temperature = 195
-first-layer-temperature = 210
-bed-temperature = 0
-
-first-layer-height = 0.25
-first-layer-speed = 20
-
-skirts = 2
-
-# -- init values so no warnings are thrown
-top-thickness = 0
-bottom-thickness = 0
-wall-thickness = 0
-
-# -- absolutely define layers top/bottom/wall as default
-perimeters = 2
-top-layers = 3
-bottom-layers = 3
-
-# -- Note: either define z_offset for each slicer (cura 3.5.x doesn't have this feature yet) OR define M206 Z0.15
-start-gcode = "G28 X0 Y0\nG1 X180 F6000\nG28 Z0\nM206 X0 Y-25 Z0.15\n"
-end-gcode = "G1 Y290 F6000\nM104 S0\nM140 S0\nM84\n"
-
-retraction-length = 2
diff --git a/software/Print3r/settings/printer/ctc-diy-i3.ini b/software/Print3r/settings/printer/ctc-diy-i3.ini
deleted file mode 100644
index 20403e91..00000000
--- a/software/Print3r/settings/printer/ctc-diy-i3.ini
+++ /dev/null
@@ -1,39 +0,0 @@
-# -- slicer independent settings
-machine-name = "CTC DIY I3 Pro B"
-machine-width = 200
-machine-depth = 200
-machine-height = 180
-baudrate = 250000
-
-temperature = 195
-first-layer-temperature = 210
-bed-temperature = 55
-
-filament-diameter = 1.75
-nozzle-diameter = 0.4
-layer-height = 0.3
-
-fill-density = 20
-
-first-layer-height = 0.25
-first-layer-speed = 20
-
-skirts = 2
-fill-density = 20
-
-# -- init values so no warnings are thrown
-top-thickness = 0
-bottom-thickness = 0
-wall-thickness = 0
-
-# -- absolutely define layers top/bottom/wall as default
-perimeters = 3
-top-layers = 3
-bottom-layers = 3
-
-# -- Note: either define z_offset for each slicer (cura 3.5.x doesn't have this feature yet) OR define M206 Z0.15 (older Marlin Z-0.15 required)
-start-gcode = "G21\nG90\nM92 X100 Y100 E95 Z3200\nM206 X0 Y0 Z0.15\nG28 X0 Y0\nG1 X100 F6000\nG28 Z0\n"
-end-gcode = "G1 Y180 F6000\nM104 S0\nM140 S0\nM84\n"
-
-retraction-length = 4
-
diff --git a/software/Print3r/settings/printer/default.ini b/software/Print3r/settings/printer/default.ini
deleted file mode 100644
index 1b2ef462..00000000
--- a/software/Print3r/settings/printer/default.ini
+++ /dev/null
@@ -1,61 +0,0 @@
-# -- slicer independent settings
-
-machine-name = "Prusa i3"
-machine-width = 200
-machine-depth = 200
-machine-height = 180
-
-filament-diameter = 1.75
-nozzle-diameter = 0.4
-layer-height = 0.3
-
-fill-density = 20
-
-temperature = 200
-first-layer-temperature = 210
-bed-temperature = 60
-
-first-layer-height = 0.25
-first-layer-speed = 20
-
-skirts = 2
-brims = 0
-rafts = 0
-
-support = none
-support_angle = 60
-
-seam = aligned
-
-# -- init values so no warnings are thrown
-top-thickness = 0
-bottom-thickness = 0
-wall-thickness = 0
-
-perimeters = 2
-top-layers = 2
-bottom-layers = 2
-
-# -- Note: either define z_offset for each slicer (cura 3.5.x doesn't have this feature yet) OR define M206 Z0.15
-start-gcode = "G28 X0 Y0\nG1 X100 F6000\nG28 Z0\nM206 X0 Y-25 Z0.15\n"
-end-gcode = "G1 Y290 F6000\nM104 S0\nM140 S0\nM84\n"
-abort-gcode ="M104 S0 ; extruder heater off\nM140 S0 ; heated bed heater off (if you have it)\nG1 X10 F9000 ; go way to the left\nM84 ; motors off\n"
-
-retraction-length = 2
-
-print-speed = 60
-travel-speed = 130
-
-perimeter-speed = 60
-small-perimeter-speed = 15
-
-infill-speed = 80
-bridge-speed = 60
-retract-speed = 40
-
-extruders-count = 1
-
-cool_fan_speed = 100
-cool_fan_speed_min = 30
-cool_fan_speed_max = 100
-
diff --git a/software/Print3r/settings/slicer/5dmaker/base.ini b/software/Print3r/settings/slicer/5dmaker/base.ini
deleted file mode 100644
index 2c7ed931..00000000
--- a/software/Print3r/settings/slicer/5dmaker/base.ini
+++ /dev/null
@@ -1 +0,0 @@
-retract_speed=120
diff --git a/software/Print3r/settings/slicer/5dmaker/map.ini b/software/Print3r/settings/slicer/5dmaker/map.ini
deleted file mode 100644
index e2c46e68..00000000
--- a/software/Print3r/settings/slicer/5dmaker/map.ini
+++ /dev/null
@@ -1,47 +0,0 @@
-#infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-#machine_nozzle_diameter=$nozzle_diameter
-#machine_material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-#wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_length
-#machine_start_gcode=$start_gcode
-#machine_end_gcode=$end_gcode
-#retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-print_speed_layer_0=$first_layer_speed
-material_print_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-#line_width=$nozzle_diameter
-#infill_line_width=$nozzle_diameter
-#prime_tower_line_width=$nozzle_diameter
-#raft_surface_line_width=$nozzle_diameter
-#roofing_line_width=$nozzle_diameter
-#skin_line_width=$nozzle_diameter
-#skirt_brim_line_width=$nozzle_diameter
-#support_bottom_line_width=$nozzle_diameter
-#support_interface_line_width=$nozzle_diameter
-#support_line_width=$nozzle_diameter
-#support_roof_line_width=$nozzle_diameter
-#wall_line_width_0=$nozzle_diameter
-#wall_line_width=$nozzle_diameter
-#wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-#material_print_temperature=$temperature
-#material_print_bed_temperature=$bed_temperature
-#material_bed_temperature_layer_0=$bed_temperature
-#material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-#speed_print=$print_speed
-#speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-#speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:80}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-#brim_line_count=$brims
-#skirt_line_count=$skirts
-#raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/cura-legacy/base.ini b/software/Print3r/settings/slicer/cura-legacy/base.ini
deleted file mode 100644
index 5ef8a0ed..00000000
--- a/software/Print3r/settings/slicer/cura-legacy/base.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-nozzleSize=400
-filamentDiameter=1750
-sparseInfillLineDistance=2000
-layerThickness=200
-startCode="M107\nM104 S200\nG28 X0 Y0\nG1 X100\nG28 Z0\nM109 S200"
-printSpeed=60
-infillSpeed=80
-skinSpeed=20
-autoCenter=0
-upSkinCount=3
-downSkinCount=3
diff --git a/software/Print3r/settings/slicer/cura-legacy/map.ini b/software/Print3r/settings/slicer/cura-legacy/map.ini
deleted file mode 100644
index 5ed1bf85..00000000
--- a/software/Print3r/settings/slicer/cura-legacy/map.ini
+++ /dev/null
@@ -1,22 +0,0 @@
-layerThickness={$layer_height*1000}
-filamentDiameter{$filament_diameter*1000}
-#sparseInfillLineDistance={1/($fill_density+0.001)}
-sparseInfillLineDistance={$fill_density==0?2000000:$nozzle_diameter*100/$fill_density*1000}
-nozzleSize={$nozzle_diameter*1000}
-filamentDiameter={$filament_diameter*1000}
-startCode=$start_gcode
-endCode=$end_gcode
-upSkinCount={$top_thickness?int($top_thickness/$layer_height+0.5):$top_layers}
-downSkinCount={$bottom_thickness?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-insetCount={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retractionAmount={$retraction_length*1000}
-printSpeed=$print_speed
-initialLayerSpeed=$first_layer_speed
-skinSpeed={$perimeter_speed?$perimeter_speed*0.5:$print_speed*0.8}
-insetXSpeed=$perimeter_speed
-inset0Speed=$perimeter_speed
-infillSpeed={$infill_speed?$infill_speed:$print_speed*1.5}
-retractionSpeed={$retract_speed?$retract_speed:40}
-moveSpeed=$travel_speed
-supportEverywhere={'$support' eq 'bed' ? 0 : 1 }
-supportAngle={'$support'ne'none'?50:-1}
diff --git a/software/Print3r/settings/slicer/cura-slicer/base.ini b/software/Print3r/settings/slicer/cura-slicer/base.ini
deleted file mode 100644
index 7ef6e53a..00000000
--- a/software/Print3r/settings/slicer/cura-slicer/base.ini
+++ /dev/null
@@ -1,531 +0,0 @@
-acceleration_enabled="False"
-acceleration_infill="3000"
-acceleration_ironing="3000"
-acceleration_layer_0="3000"
-acceleration_prime_tower="3000"
-acceleration_print="3000"
-acceleration_print_layer_0="3000"
-acceleration_roofing="3000"
-acceleration_skirt_brim="3000"
-acceleration_support="3000"
-acceleration_support_bottom="3000"
-acceleration_support_infill="3000"
-acceleration_support_interface="3000"
-acceleration_support_roof="3000"
-acceleration_topbottom="3000"
-acceleration_travel="5000"
-acceleration_travel_layer_0="5000.0"
-acceleration_wall="3000"
-acceleration_wall_0="3000"
-acceleration_wall_x="3000"
-adaptive_layer_height_enabled="False"
-adaptive_layer_height_threshold="200.0"
-adaptive_layer_height_variation="0.1"
-adaptive_layer_height_variation_step="0.01"
-adhesion_extruder_nr="0"
-adhesion_type="skirt"
-alternate_carve_order="True"
-alternate_extra_perimeter="False"
-anti_overhang_mesh="False"
-blackmagic="0"
-bottom_layers="2"
-bottom_skin_expand_distance="1.0"
-bottom_skin_preshrink="1.0"
-bottom_thickness="0.8"
-bridge_enable_more_layers="True"
-bridge_fan_speed="100"
-bridge_fan_speed_2="0"
-bridge_fan_speed_3="0"
-bridge_settings_enabled="False"
-bridge_skin_density="100"
-bridge_skin_density_2="75"
-bridge_skin_density_3="80"
-bridge_skin_material_flow="60"
-bridge_skin_material_flow_2="100"
-bridge_skin_material_flow_3="110"
-bridge_skin_speed="15.0"
-bridge_skin_speed_2="15.0"
-bridge_skin_speed_3="15.0"
-bridge_skin_support_threshold="50"
-bridge_wall_coast="100"
-bridge_wall_material_flow="50"
-bridge_wall_min_length="5"
-bridge_wall_speed="15.0"
-brim_line_count="20"
-brim_outside_only="True"
-brim_width="8.0"
-carve_multiple_volumes="False"
-center_object="False"
-coasting_enable="False"
-coasting_min_volume="0.8"
-coasting_speed="90"
-coasting_volume="0.064"
-command_line_settings="0"
-conical_overhang_angle="50"
-conical_overhang_enabled="False"
-connect_infill_polygons="False"
-connect_skin_polygons="False"
-cool_fan_enabled="True"
-cool_fan_full_at_height="0.35"
-cool_fan_full_layer="2"
-cool_fan_speed="100.0"
-cool_fan_speed_0="0"
-cool_fan_speed_max="100.0"
-cool_fan_speed_min="100.0"
-cool_lift_head="False"
-cool_min_layer_time="5"
-cool_min_layer_time_fan_speed_max="10"
-cool_min_speed="10"
-cooling="0"
-cross_infill_pocket_size="4.0"
-cutting_mesh="False"
-date="14-10-2018"
-day="Sun"
-default_material_bed_temperature="60"
-default_material_print_temperature="210"
-draft_shield_dist="10"
-draft_shield_enabled="False"
-draft_shield_height="10"
-draft_shield_height_limitation="full"
-dual="0"
-expand_skins_expand_distance="1.0"
-experimental="0"
-extruder_nr="0"
-extruder_prime_pos_abs="False"
-extruder_prime_pos_x="0"
-extruder_prime_pos_y="0"
-extruder_prime_pos_z="0"
-extruders_enabled_count="1"
-fill_outline_gaps="False"
-fill_perimeter_gaps="everywhere"
-filter_out_tiny_gaps="True"
-flow_rate_extrusion_offset_factor="100"
-flow_rate_max_extrusion_offset="0"
-gantry_height="55"
-gradual_infill_step_height="1.5"
-gradual_infill_steps="0"
-gradual_support_infill_step_height="1"
-gradual_support_infill_steps="0"
-infill="0"
-infill_angles="[ ]"
-infill_before_walls="True"
-infill_enable_travel_optimization="False"
-infill_extruder_nr="-1"
-infill_line_distance="4.0"
-infill_line_width="0.5"
-infill_mesh="False"
-infill_mesh_order="0"
-infill_multiplier="1"
-infill_offset_x="0"
-infill_offset_y="0"
-infill_overlap="10"
-infill_overlap_mm="0.05"
-infill_pattern="grid"
-infill_sparse_density="20"
-infill_sparse_thickness="0.4"
-infill_support_angle="40"
-infill_support_enabled="False"
-infill_wall_line_count="0"
-infill_wipe_dist="0.125"
-initial_extruder_nr="0"
-initial_layer_line_width_factor="100.0"
-ironing_enabled="False"
-ironing_flow="10.0"
-ironing_inset="0.25"
-ironing_line_spacing="0.1"
-ironing_only_highest_layer="False"
-ironing_pattern="zigzag"
-jerk_enabled="False"
-jerk_infill="20"
-jerk_ironing="20"
-jerk_layer_0="20"
-jerk_prime_tower="20"
-jerk_print="20"
-jerk_print_layer_0="20"
-jerk_roofing="20"
-jerk_skirt_brim="20"
-jerk_support="20"
-jerk_support_bottom="20"
-jerk_support_infill="20"
-jerk_support_interface="20"
-jerk_support_roof="20"
-jerk_topbottom="20"
-jerk_travel="30"
-jerk_travel_layer_0="30.0"
-jerk_wall="20"
-jerk_wall_0="20"
-jerk_wall_x="20"
-layer_0_z_overlap="0.15"
-layer_height="0.4"
-layer_height_0="0.35"
-layer_start_x="0.0"
-layer_start_y="0.0"
-limit_support_retractions="True"
-line_width="0.5"
-machine_acceleration="4000"
-machine_buildplate_type="glass"
-machine_center_is_zero="False"
-machine_depth="200"
-machine_disallowed_areas="[]"
-machine_end_gcode="M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n;G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG28 X0\nG90\nG1 Y290 F9000\nM84 ;steppers off\nG90 ;absolute positioning"
-machine_endstop_positive_direction_x="False"
-machine_endstop_positive_direction_y="False"
-machine_endstop_positive_direction_z="True"
-machine_extruder_count="1"
-machine_extruder_cooling_fan_number="0"
-machine_extruder_end_pos_abs="False"
-machine_extruder_end_pos_x="0"
-machine_extruder_end_pos_y="0"
-machine_extruder_start_pos_abs="False"
-machine_extruder_start_pos_x="0"
-machine_extruder_start_pos_y="0"
-machine_feeder_wheel_diameter="10.0"
-machine_filament_park_distance="16"
-machine_firmware_retract="False"
-machine_gcode_flavor="RepRap (Marlin/Sprinter)"
-machine_head_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_head_with_fans_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_heat_zone_length="16"
-machine_heated_bed="True"
-machine_height="210"
-machine_max_acceleration_e="10000"
-machine_max_acceleration_x="9000"
-machine_max_acceleration_y="9000"
-machine_max_acceleration_z="100"
-machine_max_feedrate_e="299792458000"
-machine_max_feedrate_x="500"
-machine_max_feedrate_y="500"
-machine_max_feedrate_z="5"
-machine_max_jerk_e="5.0"
-machine_max_jerk_xy="20.0"
-machine_max_jerk_z="0.4"
-machine_min_cool_heat_time_window="50.0"
-machine_minimum_feedrate="0.0"
-machine_name="Prusa i3"
-machine_nozzle_cool_down_speed="2.0"
-machine_nozzle_expansion_angle="45"
-machine_nozzle_head_distance="3"
-machine_nozzle_heat_up_speed="2.0"
-machine_nozzle_id="unknown"
-machine_nozzle_offset_x="0"
-machine_nozzle_offset_y="0"
-machine_nozzle_size="0.5"
-machine_nozzle_temp_enabled="True"
-machine_nozzle_tip_outer_diameter="1"
-machine_settings="0"
-machine_shape="rectangular"
-machine_show_variants="False"
-machine_start_gcode="G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM206 X0 Y0\n;M92 X100 Y100 E95 ; metal 16 teeth pulley\n;M92 Z3200; M6 z-axis\n;G1 Z15; move up\nG28 X0 Y0 ;move X/Y to min endstops\nG1 X40; move away to avoid crashing into bed mount\nG28 Z0 ;move Z to min endstops\n;G1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X10.0 E9.0 F1000.0 ; intro line\nG1 X60.0 E21.5 F1000.0 ; intro line\nG1 X20.0 E30.0 F1000\nG92 E0 ;zero the extruded length again\n;G1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
-machine_steps_per_mm_e="1600"
-machine_steps_per_mm_x="50"
-machine_steps_per_mm_y="50"
-machine_steps_per_mm_z="50"
-machine_use_extruder_offset_to_offset_coords="True"
-machine_width="210"
-magic_fuzzy_skin_enabled="False"
-magic_fuzzy_skin_point_density="1.25"
-magic_fuzzy_skin_point_dist="0.8"
-magic_fuzzy_skin_thickness="0.3"
-magic_mesh_surface_mode="normal"
-magic_spiralize="False"
-material="0"
-material_adhesion_tendency="10"
-material_bed_temp_prepend="True"
-material_bed_temp_wait="True"
-material_bed_temperature="0"
-material_bed_temperature_layer_0="0"
-material_diameter="1.75"
-material_extrusion_cool_down_speed="0.7"
-material_final_print_temperature="195"
-material_flow="100"
-material_flow_dependent_temperature="False"
-material_flow_layer_0="100"
-material_flow_temp_graph="[[3.5,200],[7.0,240]]"
-material_guid="0ff92885-617b-4144-a03c-9989872454bc"
-material_initial_print_temperature="200"
-material_print_temp_prepend="True"
-material_print_temp_wait="True"
-material_print_temperature="210"
-material_print_temperature_layer_0="210"
-material_shrinkage_percentage="0"
-material_standby_temperature="175"
-material_surface_energy="100"
-max_feedrate_z_override="0"
-max_skin_angle_for_expansion="90"
-mesh_position_x="0"
-mesh_position_y="0"
-mesh_position_z="0"
-mesh_rotation_matrix="[[1,0,0], [0,1,0], [0,0,1]]"
-meshfix="0"
-meshfix_extensive_stitching="False"
-meshfix_keep_open_polygons="False"
-meshfix_maximum_resolution="0.01"
-meshfix_maximum_travel_resolution="0.02"
-meshfix_union_all="True"
-meshfix_union_all_remove_holes="False"
-min_infill_area="0"
-min_skin_width_for_expansion="4.898587196589413e-17"
-minimum_polygon_circumference="1.0"
-mold_angle="40"
-mold_enabled="False"
-mold_roof_height="0.5"
-mold_width="5"
-multiple_mesh_overlap="0.15"
-nozzle_disallowed_areas="[]"
-ooze_shield_angle="60"
-ooze_shield_dist="2"
-ooze_shield_enabled="False"
-optimize_wall_printing_order="False"
-outer_inset_first="False"
-platform_adhesion="0"
-prime_blob_enable="True"
-prime_tower_circular="True"
-prime_tower_enable="False"
-prime_tower_flow="100"
-prime_tower_line_width="0.5"
-prime_tower_min_volume="6"
-prime_tower_position_x="375.3"
-prime_tower_position_y="275.3"
-prime_tower_size="20"
-prime_tower_wipe_enabled="True"
-print_bed_temperature="0"
-print_sequence="all_at_once"
-print_temperature="210"
-raft_acceleration="3000"
-raft_airgap="0.3"
-raft_base_acceleration="3000"
-raft_base_fan_speed="0"
-raft_base_jerk="20"
-raft_base_line_spacing="2.0"
-raft_base_line_width="1.0"
-raft_base_speed="22.5"
-raft_base_thickness="0.42"
-raft_fan_speed="0"
-raft_interface_acceleration="3000"
-raft_interface_fan_speed="0"
-raft_interface_jerk="20"
-raft_interface_line_spacing="1.2"
-raft_interface_line_width="1.0"
-raft_interface_speed="22.5"
-raft_interface_thickness="0.6000000000000001"
-raft_jerk="20"
-raft_margin="15"
-raft_smoothing="5"
-raft_speed="30.0"
-raft_surface_acceleration="3000"
-raft_surface_fan_speed="0"
-raft_surface_jerk="20"
-raft_surface_layers="2"
-raft_surface_line_spacing="0.5"
-raft_surface_line_width="0.5"
-raft_surface_speed="30.0"
-raft_surface_thickness="0.4"
-relative_extrusion="False"
-remove_empty_first_layers="True"
-resolution="0"
-retract_at_layer_change="False"
-retraction_amount="6.5"
-retraction_combing="all"
-retraction_combing_max_distance="0"
-retraction_count_max="90"
-retraction_enable="True"
-retraction_extra_prime_amount="0"
-retraction_extrusion_window="6.5"
-retraction_hop="1"
-retraction_hop_after_extruder_switch="True"
-retraction_hop_enabled="False"
-retraction_hop_only_when_collides="False"
-retraction_min_travel="1.0"
-retraction_prime_speed="35"
-retraction_retract_speed="35"
-retraction_speed="35"
-roofing_angles="[ ]"
-roofing_extruder_nr="-1"
-roofing_layer_count="0"
-roofing_line_width="0.5"
-roofing_pattern="lines"
-shell="0"
-skin_alternate_rotation="False"
-skin_angles="[ ]"
-skin_line_width="0.5"
-skin_no_small_gaps_heuristic="True"
-skin_outline_count="1"
-skin_overlap="5"
-skin_overlap_mm="0.025"
-skin_preshrink="1.0"
-skirt_brim_line_width="0.5"
-skirt_brim_minimal_length="250"
-skirt_brim_speed="30.0"
-skirt_gap="3"
-skirt_line_count="1"
-slicing_tolerance="middle"
-smooth_spiralized_contours="True"
-spaghetti_flow="20"
-spaghetti_infill_enabled="False"
-spaghetti_infill_extra_volume="0"
-spaghetti_infill_stepped="True"
-spaghetti_inset="0.2"
-spaghetti_max_height="2.0"
-spaghetti_max_infill_angle="10"
-speed="0"
-speed_equalize_flow_enabled="False"
-speed_equalize_flow_max="150"
-speed_infill="80"
-speed_ironing="20.0"
-speed_layer_0="30.0"
-speed_prime_tower="60"
-speed_print="60"
-speed_print_layer_0="30.0"
-speed_roofing="30.0"
-speed_slowdown_layers="2"
-speed_support="60"
-speed_support_bottom="40.0"
-speed_support_infill="60"
-speed_support_interface="40.0"
-speed_support_roof="40.0"
-speed_topbottom="30.0"
-speed_travel="120"
-speed_travel_layer_0="60.0"
-speed_wall="30.0"
-speed_wall_0="30.0"
-speed_wall_x="60.0"
-start_layers_at_same_position="False"
-sub_div_rad_add="0.5"
-support="0"
-support_angle="50"
-support_bottom_density="100"
-support_bottom_distance="0"
-support_bottom_enable="False"
-support_bottom_extruder_nr="0"
-support_bottom_height="1"
-support_bottom_line_distance="0.5"
-support_bottom_line_width="0.5"
-support_bottom_pattern="concentric"
-support_bottom_stair_step_height="0.3"
-support_bottom_stair_step_width="5.0"
-support_conical_angle="30"
-support_conical_enabled="False"
-support_conical_min_width="5.0"
-support_connect_zigzags="True"
-support_enable="False"
-support_extruder_nr="0"
-support_extruder_nr_layer_0="0"
-support_fan_enable="False"
-support_infill_angle="0"
-support_infill_extruder_nr="0"
-support_infill_rate="15"
-support_infill_sparse_thickness="0.4"
-support_initial_layer_line_distance="3.3333333333333335"
-support_interface_density="100"
-support_interface_enable="False"
-support_interface_extruder_nr="0"
-support_interface_height="1"
-support_interface_line_width="0.5"
-support_interface_pattern="concentric"
-support_interface_skip_height="0.3"
-support_join_distance="2.0"
-support_line_distance="3.3333333333333335"
-support_line_width="0.5"
-support_mesh="False"
-support_mesh_drop_down="True"
-support_minimal_diameter="3.0"
-support_offset="0.2"
-support_pattern="zigzag"
-support_roof_density="100"
-support_roof_enable="False"
-support_roof_extruder_nr="0"
-support_roof_height="1"
-support_roof_line_distance="0.5"
-support_roof_line_width="0.5"
-support_roof_pattern="concentric"
-support_skip_some_zags="False"
-support_skip_zag_per_mm="20"
-support_supported_skin_fan_speed="100"
-support_top_distance="0.1"
-support_tower_diameter="3.0"
-support_tower_roof_angle="65"
-support_tree_angle="40"
-support_tree_branch_diameter="2"
-support_tree_branch_diameter_angle="5"
-support_tree_branch_distance="1"
-support_tree_collision_resolution="0.25"
-support_tree_enable="False"
-support_tree_wall_count="1"
-support_tree_wall_thickness="0.5"
-support_type="buildplate"
-support_use_towers="True"
-support_wall_count="0"
-support_xy_distance="0.7"
-support_xy_distance_overhang="0.25"
-support_xy_overrides_z="z_overrides_xy"
-support_z_distance="0.1"
-support_zag_skip_count="8"
-switch_extruder_prime_speed="20"
-switch_extruder_retraction_amount="16"
-switch_extruder_retraction_speed="20"
-switch_extruder_retraction_speeds="20"
-time="09:46:45"
-top_bottom_extruder_nr="-1"
-top_bottom_pattern="lines"
-top_bottom_pattern_0="lines"
-top_bottom_thickness="0.8"
-top_layers="2"
-top_skin_expand_distance="1.0"
-top_skin_preshrink="1.0"
-top_thickness="0.8"
-travel="0"
-travel_avoid_distance="0.625"
-travel_avoid_other_parts="True"
-travel_avoid_supports="False"
-travel_compensate_overlapping_walls_0_enabled="True"
-travel_compensate_overlapping_walls_enabled="True"
-travel_compensate_overlapping_walls_x_enabled="True"
-travel_retract_before_outer_wall="False"
-wall_0_extruder_nr="-1"
-wall_0_inset="0"
-wall_0_wipe_dist="0.25"
-wall_extruder_nr="-1"
-wall_line_count="2"
-wall_line_width="0.5"
-wall_line_width_0="0.5"
-wall_line_width_x="0.5"
-wall_min_flow="0"
-wall_min_flow_retract="False"
-wall_overhang_angle="90"
-wall_overhang_speed_factor="100"
-wall_thickness="0.8"
-wall_x_extruder_nr="-1"
-wireframe_bottom_delay="0"
-wireframe_drag_along="0.6"
-wireframe_enabled="False"
-wireframe_fall_down="0.5"
-wireframe_flat_delay="0.1"
-wireframe_flow="100"
-wireframe_flow_connection="100"
-wireframe_flow_flat="100"
-wireframe_height="3"
-wireframe_nozzle_clearance="1"
-wireframe_printspeed="5"
-wireframe_printspeed_bottom="5"
-wireframe_printspeed_down="5"
-wireframe_printspeed_flat="5"
-wireframe_printspeed_up="5"
-wireframe_roof_drag_along="0.8"
-wireframe_roof_fall_down="2"
-wireframe_roof_inset="3"
-wireframe_roof_outer_delay="0.2"
-wireframe_straight_before_down="20"
-wireframe_strategy="compensate"
-wireframe_top_delay="0"
-wireframe_top_jump="0.6"
-wireframe_up_half_speed="0.3"
-xy_offset="0"
-xy_offset_layer_0="0"
-z_seam_corner="z_seam_corner_inner"
-z_seam_relative="False"
-z_seam_type="sharpest_corner"
-z_seam_x="190.0"
-z_seam_y="900"
-zig_zaggify_infill="False"
-zig_zaggify_support="False"
-machine_extruder_start_code=""
diff --git a/software/Print3r/settings/slicer/cura-slicer/map.ini b/software/Print3r/settings/slicer/cura-slicer/map.ini
deleted file mode 100644
index 266160e0..00000000
--- a/software/Print3r/settings/slicer/cura-slicer/map.ini
+++ /dev/null
@@ -1,49 +0,0 @@
-infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-machine_nozzle_diameter=$nozzle_diameter
-machine_material_diameter=$filament_diameter
-material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-initial_bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_length
-machine_start_gcode=$start_gcode
-machine_end_gcode=$end_gcode
-retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-speed_print_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-line_width=$nozzle_diameter
-infill_line_width=$nozzle_diameter
-prime_tower_line_width=$nozzle_diameter
-raft_surface_line_width=$nozzle_diameter
-roofing_line_width=$nozzle_diameter
-skin_line_width=$nozzle_diameter
-skirt_brim_line_width=$nozzle_diameter
-support_bottom_line_width=$nozzle_diameter
-support_interface_line_width=$nozzle_diameter
-support_line_width=$nozzle_diameter
-support_roof_line_width=$nozzle_diameter
-wall_line_width_0=$nozzle_diameter
-wall_line_width=$nozzle_diameter
-wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-material_print_temperature=$temperature
-material_print_bed_temperature=$bed_temperature
-material_bed_temperature_layer_0=$bed_temperature
-material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-speed_print=$print_speed
-speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:40}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-brim_line_count=$brims
-skirt_line_count=$skirts
-raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/cura/base.ini b/software/Print3r/settings/slicer/cura/base.ini
deleted file mode 100644
index bad474e9..00000000
--- a/software/Print3r/settings/slicer/cura/base.ini
+++ /dev/null
@@ -1,555 +0,0 @@
-acceleration_enabled="False"
-acceleration_infill="3000"
-acceleration_ironing="3000"
-acceleration_layer_0="3000"
-acceleration_prime_tower="3000"
-acceleration_print="3000"
-acceleration_print_layer_0="3000"
-acceleration_roofing="3000"
-acceleration_skirt_brim="3000"
-acceleration_support="3000"
-acceleration_support_bottom="3000"
-acceleration_support_infill="3000"
-acceleration_support_interface="3000"
-acceleration_support_roof="3000"
-acceleration_topbottom="3000"
-acceleration_travel="5000"
-acceleration_travel_layer_0="5000.0"
-acceleration_wall="3000"
-acceleration_wall_0="3000"
-acceleration_wall_x="3000"
-adaptive_layer_height_enabled="False"
-adaptive_layer_height_threshold="200.0"
-adaptive_layer_height_variation="0.1"
-adaptive_layer_height_variation_step="0.01"
-adhesion_extruder_nr="0"
-adhesion_type="skirt"
-alternate_carve_order="True"
-alternate_extra_perimeter="False"
-anti_overhang_mesh="False"
-blackmagic="0"
-bottom_layers="2"
-bottom_skin_expand_distance="1.0"
-bottom_skin_preshrink="1.0"
-bottom_thickness="0.8"
-bridge_enable_more_layers="True"
-bridge_fan_speed="100"
-bridge_fan_speed_2="0"
-bridge_fan_speed_3="0"
-bridge_settings_enabled="False"
-bridge_skin_density="100"
-bridge_skin_density_2="75"
-bridge_skin_density_3="80"
-bridge_skin_material_flow="60"
-bridge_skin_material_flow_2="100"
-bridge_skin_material_flow_3="110"
-bridge_skin_speed="15.0"
-bridge_skin_speed_2="15.0"
-bridge_skin_speed_3="15.0"
-bridge_skin_support_threshold="50"
-bridge_wall_coast="100"
-bridge_wall_material_flow="50"
-bridge_wall_min_length="5"
-bridge_wall_speed="15.0"
-brim_line_count="20"
-brim_outside_only="True"
-brim_width="8.0"
-carve_multiple_volumes="False"
-center_object="False"
-coasting_enable="False"
-coasting_min_volume="0.8"
-coasting_speed="90"
-coasting_volume="0.064"
-command_line_settings="0"
-conical_overhang_angle="50"
-conical_overhang_enabled="False"
-connect_infill_polygons="False"
-connect_skin_polygons="False"
-cool_fan_enabled="True"
-cool_fan_full_at_height="0.35"
-cool_fan_full_layer="2"
-cool_fan_speed="100.0"
-cool_fan_speed_0="0"
-cool_fan_speed_max="100.0"
-cool_fan_speed_min="100.0"
-cool_lift_head="False"
-cool_min_layer_time="5"
-cool_min_layer_time_fan_speed_max="10"
-cool_min_speed="10"
-cooling="0"
-cross_infill_pocket_size="4.0"
-cutting_mesh="False"
-date="14-10-2018"
-day="Sun"
-default_material_bed_temperature="60"
-default_material_print_temperature="210"
-draft_shield_dist="10"
-draft_shield_enabled="False"
-draft_shield_height="10"
-draft_shield_height_limitation="full"
-dual="0"
-expand_skins_expand_distance="1.0"
-experimental="0"
-extruder_nr="0"
-extruder_prime_pos_abs="False"
-extruder_prime_pos_x="0"
-extruder_prime_pos_y="0"
-extruder_prime_pos_z="0"
-extruders_enabled_count="1"
-fill_outline_gaps="False"
-fill_perimeter_gaps="everywhere"
-filter_out_tiny_gaps="True"
-flow_rate_extrusion_offset_factor="100"
-flow_rate_max_extrusion_offset="0"
-gantry_height="55"
-gradual_infill_step_height="1.5"
-gradual_infill_steps="0"
-gradual_support_infill_step_height="1"
-gradual_support_infill_steps="0"
-infill="0"
-infill_angles="[ ]"
-infill_before_walls="True"
-infill_enable_travel_optimization="False"
-infill_extruder_nr="-1"
-infill_line_distance="4.0"
-infill_line_width="0.5"
-infill_mesh="False"
-infill_mesh_order="0"
-infill_multiplier="1"
-infill_offset_x="0"
-infill_offset_y="0"
-infill_overlap="10"
-infill_overlap_mm="0.05"
-infill_pattern="grid"
-infill_sparse_density="20"
-infill_sparse_thickness="0.4"
-infill_support_angle="40"
-infill_support_enabled="False"
-infill_wall_line_count="0"
-infill_wipe_dist="0.125"
-initial_extruder_nr="0"
-initial_layer_line_width_factor="100.0"
-ironing_enabled="False"
-ironing_flow="10.0"
-ironing_inset="0.25"
-ironing_line_spacing="0.1"
-ironing_only_highest_layer="False"
-ironing_pattern="zigzag"
-jerk_enabled="False"
-jerk_infill="20"
-jerk_ironing="20"
-jerk_layer_0="20"
-jerk_prime_tower="20"
-jerk_print="20"
-jerk_print_layer_0="20"
-jerk_roofing="20"
-jerk_skirt_brim="20"
-jerk_support="20"
-jerk_support_bottom="20"
-jerk_support_infill="20"
-jerk_support_interface="20"
-jerk_support_roof="20"
-jerk_topbottom="20"
-jerk_travel="30"
-jerk_travel_layer_0="30.0"
-jerk_wall="20"
-jerk_wall_0="20"
-jerk_wall_x="20"
-layer_0_z_overlap="0.15"
-layer_height="0.4"
-layer_height_0="0.35"
-layer_start_x="0.0"
-layer_start_y="0.0"
-limit_support_retractions="True"
-line_width="0.5"
-machine_acceleration="4000"
-machine_buildplate_type="glass"
-machine_center_is_zero="False"
-machine_depth="200"
-machine_disallowed_areas="[]"
-machine_end_gcode="M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n;G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG28 X0\nG90\nG1 Y290 F9000\nM84 ;steppers off\nG90 ;absolute positioning"
-machine_endstop_positive_direction_x="False"
-machine_endstop_positive_direction_y="False"
-machine_endstop_positive_direction_z="True"
-machine_extruder_count="1"
-machine_extruder_cooling_fan_number="0"
-machine_extruder_end_pos_abs="False"
-machine_extruder_end_pos_x="0"
-machine_extruder_end_pos_y="0"
-machine_extruder_start_pos_abs="False"
-machine_extruder_start_pos_x="0"
-machine_extruder_start_pos_y="0"
-machine_feeder_wheel_diameter="10.0"
-machine_filament_park_distance="16"
-machine_firmware_retract="False"
-machine_gcode_flavor="RepRap (Marlin/Sprinter)"
-machine_head_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_head_with_fans_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_heat_zone_length="16"
-machine_heated_bed="True"
-machine_height="210"
-machine_max_acceleration_e="10000"
-machine_max_acceleration_x="9000"
-machine_max_acceleration_y="9000"
-machine_max_acceleration_z="100"
-machine_max_feedrate_e="299792458000"
-machine_max_feedrate_x="500"
-machine_max_feedrate_y="500"
-machine_max_feedrate_z="5"
-machine_max_jerk_e="5.0"
-machine_max_jerk_xy="20.0"
-machine_max_jerk_z="0.4"
-machine_min_cool_heat_time_window="50.0"
-machine_minimum_feedrate="0.0"
-machine_name="Prusa i3"
-machine_nozzle_cool_down_speed="2.0"
-machine_nozzle_expansion_angle="45"
-machine_nozzle_head_distance="3"
-machine_nozzle_heat_up_speed="2.0"
-machine_nozzle_id="unknown"
-machine_nozzle_offset_x="0"
-machine_nozzle_offset_y="0"
-machine_nozzle_size="0.5"
-machine_nozzle_temp_enabled="True"
-machine_nozzle_tip_outer_diameter="1"
-machine_settings="0"
-machine_shape="rectangular"
-machine_show_variants="False"
-machine_start_gcode="G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM206 X0 Y0\n;M92 X100 Y100 E95 ; metal 16 teeth pulley\n;M92 Z3200; M6 z-axis\n;G1 Z15; move up\nG28 X0 Y0 ;move X/Y to min endstops\nG1 X40; move away to avoid crashing into bed mount\nG28 Z0 ;move Z to min endstops\n;G1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X10.0 E9.0 F1000.0 ; intro line\nG1 X60.0 E21.5 F1000.0 ; intro line\nG1 X20.0 E30.0 F1000\nG92 E0 ;zero the extruded length again\n;G1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
-machine_steps_per_mm_e="1600"
-machine_steps_per_mm_x="50"
-machine_steps_per_mm_y="50"
-machine_steps_per_mm_z="50"
-machine_use_extruder_offset_to_offset_coords="True"
-machine_width="210"
-magic_fuzzy_skin_enabled="False"
-magic_fuzzy_skin_point_density="1.25"
-magic_fuzzy_skin_point_dist="0.8"
-magic_fuzzy_skin_thickness="0.3"
-magic_mesh_surface_mode="normal"
-magic_spiralize="False"
-material="0"
-material_adhesion_tendency="10"
-material_bed_temp_prepend="True"
-material_bed_temp_wait="True"
-material_bed_temperature="0"
-material_bed_temperature_layer_0="0"
-material_diameter="1.75"
-material_extrusion_cool_down_speed="0.7"
-material_final_print_temperature="195"
-material_flow="100"
-material_flow_dependent_temperature="False"
-material_flow_layer_0="100"
-material_flow_temp_graph="[[3.5,200],[7.0,240]]"
-material_guid="0ff92885-617b-4144-a03c-9989872454bc"
-material_initial_print_temperature="200"
-material_print_temp_prepend="True"
-material_print_temp_wait="True"
-material_print_temperature="210"
-material_print_temperature_layer_0="210"
-material_shrinkage_percentage="0"
-material_standby_temperature="175"
-material_surface_energy="100"
-max_feedrate_z_override="0"
-max_skin_angle_for_expansion="90"
-mesh_position_x="0"
-mesh_position_y="0"
-mesh_position_z="0"
-mesh_rotation_matrix="[[1,0,0], [0,1,0], [0,0,1]]"
-meshfix="0"
-meshfix_extensive_stitching="False"
-meshfix_keep_open_polygons="False"
-meshfix_maximum_resolution="0.01"
-meshfix_maximum_travel_resolution="0.02"
-meshfix_union_all="True"
-meshfix_union_all_remove_holes="False"
-min_infill_area="0"
-min_skin_width_for_expansion="4.898587196589413e-17"
-minimum_polygon_circumference="1.0"
-mold_angle="40"
-mold_enabled="False"
-mold_roof_height="0.5"
-mold_width="5"
-multiple_mesh_overlap="0.15"
-nozzle_disallowed_areas="[]"
-ooze_shield_angle="60"
-ooze_shield_dist="2"
-ooze_shield_enabled="False"
-optimize_wall_printing_order="False"
-outer_inset_first="False"
-platform_adhesion="0"
-prime_blob_enable="True"
-prime_tower_circular="True"
-prime_tower_enable="False"
-prime_tower_flow="100"
-prime_tower_line_width="0.5"
-prime_tower_min_volume="6"
-prime_tower_position_x="375.3"
-prime_tower_position_y="275.3"
-prime_tower_size="20"
-prime_tower_wipe_enabled="True"
-print_bed_temperature="0"
-print_sequence="all_at_once"
-print_temperature="210"
-raft_acceleration="3000"
-raft_airgap="0.3"
-raft_base_acceleration="3000"
-raft_base_fan_speed="0"
-raft_base_jerk="20"
-raft_base_line_spacing="2.0"
-raft_base_line_width="1.0"
-raft_base_speed="22.5"
-raft_base_thickness="0.42"
-raft_fan_speed="0"
-raft_interface_acceleration="3000"
-raft_interface_fan_speed="0"
-raft_interface_jerk="20"
-raft_interface_line_spacing="1.2"
-raft_interface_line_width="1.0"
-raft_interface_speed="22.5"
-raft_interface_thickness="0.6000000000000001"
-raft_jerk="20"
-raft_margin="15"
-raft_smoothing="5"
-raft_speed="30.0"
-raft_surface_acceleration="3000"
-raft_surface_fan_speed="0"
-raft_surface_jerk="20"
-raft_surface_layers="2"
-raft_surface_line_spacing="0.5"
-raft_surface_line_width="0.5"
-raft_surface_speed="30.0"
-raft_surface_thickness="0.4"
-relative_extrusion="False"
-remove_empty_first_layers="True"
-resolution="0"
-retract_at_layer_change="False"
-retraction_amount="6.5"
-retraction_combing="all"
-retraction_combing_max_distance="0"
-retraction_count_max="90"
-retraction_enable="True"
-retraction_extra_prime_amount="0"
-retraction_extrusion_window="6.5"
-retraction_hop="1"
-retraction_hop_after_extruder_switch="True"
-retraction_hop_enabled="False"
-retraction_hop_only_when_collides="False"
-retraction_min_travel="1.0"
-retraction_prime_speed="35"
-retraction_retract_speed="35"
-retraction_speed="35"
-roofing_angles="[ ]"
-roofing_extruder_nr="-1"
-roofing_layer_count="0"
-roofing_line_width="0.5"
-roofing_pattern="lines"
-shell="0"
-skin_alternate_rotation="False"
-skin_angles="[ ]"
-skin_line_width="0.5"
-skin_no_small_gaps_heuristic="True"
-skin_outline_count="1"
-skin_overlap="5"
-skin_overlap_mm="0.025"
-skin_preshrink="1.0"
-skirt_brim_line_width="0.5"
-skirt_brim_minimal_length="250"
-skirt_brim_speed="30.0"
-skirt_gap="3"
-skirt_line_count="1"
-slicing_tolerance="middle"
-smooth_spiralized_contours="True"
-spaghetti_flow="20"
-spaghetti_infill_enabled="False"
-spaghetti_infill_extra_volume="0"
-spaghetti_infill_stepped="True"
-spaghetti_inset="0.2"
-spaghetti_max_height="2.0"
-spaghetti_max_infill_angle="10"
-speed="0"
-speed_equalize_flow_enabled="False"
-speed_equalize_flow_max="150"
-speed_infill="80"
-speed_ironing="20.0"
-speed_layer_0="30.0"
-speed_prime_tower="60"
-speed_print="60"
-speed_print_layer_0="30.0"
-speed_roofing="30.0"
-speed_slowdown_layers="2"
-speed_support="60"
-speed_support_bottom="40.0"
-speed_support_infill="60"
-speed_support_interface="40.0"
-speed_support_roof="40.0"
-speed_topbottom="30.0"
-speed_travel="120"
-speed_travel_layer_0="60.0"
-speed_wall="30.0"
-speed_wall_0="30.0"
-speed_wall_x="60.0"
-start_layers_at_same_position="False"
-sub_div_rad_add="0.5"
-support="0"
-support_angle="50"
-support_bottom_density="100"
-support_bottom_distance="0"
-support_bottom_enable="False"
-support_bottom_extruder_nr="0"
-support_bottom_height="1"
-support_bottom_line_distance="0.5"
-support_bottom_line_width="0.5"
-support_bottom_pattern="concentric"
-support_bottom_stair_step_height="0.3"
-support_bottom_stair_step_width="5.0"
-support_conical_angle="30"
-support_conical_enabled="False"
-support_conical_min_width="5.0"
-support_connect_zigzags="True"
-support_enable="False"
-support_extruder_nr="0"
-support_extruder_nr_layer_0="0"
-support_fan_enable="False"
-support_infill_angle="0"
-support_infill_extruder_nr="0"
-support_infill_rate="15"
-support_infill_sparse_thickness="0.4"
-support_initial_layer_line_distance="3.3333333333333335"
-support_interface_density="100"
-support_interface_enable="False"
-support_interface_extruder_nr="0"
-support_interface_height="1"
-support_interface_line_width="0.5"
-support_interface_pattern="concentric"
-support_interface_skip_height="0.3"
-support_join_distance="2.0"
-support_line_distance="3.3333333333333335"
-support_line_width="0.5"
-support_mesh="False"
-support_mesh_drop_down="True"
-support_minimal_diameter="3.0"
-support_offset="0.2"
-support_pattern="zigzag"
-support_roof_density="100"
-support_roof_enable="False"
-support_roof_extruder_nr="0"
-support_roof_height="1"
-support_roof_line_distance="0.5"
-support_roof_line_width="0.5"
-support_roof_pattern="concentric"
-support_skip_some_zags="False"
-support_skip_zag_per_mm="20"
-support_supported_skin_fan_speed="100"
-support_top_distance="0.1"
-support_tower_diameter="3.0"
-support_tower_roof_angle="65"
-support_tree_angle="40"
-support_tree_branch_diameter="2"
-support_tree_branch_diameter_angle="5"
-support_tree_branch_distance="1"
-support_tree_collision_resolution="0.25"
-support_tree_enable="False"
-support_tree_wall_count="1"
-support_tree_wall_thickness="0.5"
-support_type="buildplate"
-support_use_towers="True"
-support_wall_count="0"
-support_xy_distance="0.7"
-support_xy_distance_overhang="0.25"
-support_xy_overrides_z="z_overrides_xy"
-support_z_distance="0.1"
-support_zag_skip_count="8"
-switch_extruder_prime_speed="20"
-switch_extruder_retraction_amount="16"
-switch_extruder_retraction_speed="20"
-switch_extruder_retraction_speeds="20"
-time="09:46:45"
-top_bottom_extruder_nr="-1"
-top_bottom_pattern="lines"
-top_bottom_pattern_0="lines"
-top_bottom_thickness="0.8"
-top_layers="2"
-top_skin_expand_distance="1.0"
-top_skin_preshrink="1.0"
-top_thickness="0.8"
-travel="0"
-travel_avoid_distance="0.625"
-travel_avoid_other_parts="True"
-travel_avoid_supports="False"
-travel_compensate_overlapping_walls_0_enabled="True"
-travel_compensate_overlapping_walls_enabled="True"
-travel_compensate_overlapping_walls_x_enabled="True"
-travel_retract_before_outer_wall="False"
-wall_0_extruder_nr="-1"
-wall_0_inset="0"
-wall_0_wipe_dist="0.25"
-wall_extruder_nr="-1"
-wall_line_count="2"
-wall_line_width="0.5"
-wall_line_width_0="0.5"
-wall_line_width_x="0.5"
-wall_min_flow="0"
-wall_min_flow_retract="False"
-wall_overhang_angle="90"
-wall_overhang_speed_factor="100"
-wall_thickness="0.8"
-wall_x_extruder_nr="-1"
-wireframe_bottom_delay="0"
-wireframe_drag_along="0.6"
-wireframe_enabled="False"
-wireframe_fall_down="0.5"
-wireframe_flat_delay="0.1"
-wireframe_flow="100"
-wireframe_flow_connection="100"
-wireframe_flow_flat="100"
-wireframe_height="3"
-wireframe_nozzle_clearance="1"
-wireframe_printspeed="5"
-wireframe_printspeed_bottom="5"
-wireframe_printspeed_down="5"
-wireframe_printspeed_flat="5"
-wireframe_printspeed_up="5"
-wireframe_roof_drag_along="0.8"
-wireframe_roof_fall_down="2"
-wireframe_roof_inset="3"
-wireframe_roof_outer_delay="0.2"
-wireframe_straight_before_down="20"
-wireframe_strategy="compensate"
-wireframe_top_delay="0"
-wireframe_top_jump="0.6"
-wireframe_up_half_speed="0.3"
-xy_offset="0"
-xy_offset_layer_0="0"
-z_seam_corner="z_seam_corner_inner"
-z_seam_relative="False"
-z_seam_type="sharpest_corner"
-z_seam_x="190.0"
-z_seam_y="900"
-zig_zaggify_infill="False"
-zig_zaggify_support="False"
-machine_extruders_share_nozzle="false"
-machine_always_write_active_tool="false"
-machine_heated_build_volume="false"
-retraction_hop_after_extruder_switch_height="false"
-wipe_retraction_enable="false"
-wipe_retraction_amount="0"
-wipe_retraction_retract_speed="60"
-wipe_retraction_prime_speed="60"
-wipe_retraction_extra_prime_amount="60"
-wipe_pause="0"
-wipe_hop_enable="false"
-wipe_hop_amount="0"
-wipe_hop_speed="60"
-wipe_brush_pos_x="0"
-wipe_repeat_count="3"
-wipe_move_distance="5"
-max_extrusion_before_wipe="10"
-clean_between_layers="false"
-machine_extruders_share_heater="false"
-machine_extruder_start_code=""
-machine_extruder_end_code=""
-support_infill_angles="[60,30]"
-support_roof_angles="[60,30]"
-support_bottom_angles="[60,30]"
-
diff --git a/software/Print3r/settings/slicer/cura/fdmprinter.def.json b/software/Print3r/settings/slicer/cura/fdmprinter.def.json
deleted file mode 100644
index 823635a6..00000000
--- a/software/Print3r/settings/slicer/cura/fdmprinter.def.json
+++ /dev/null
@@ -1,6825 +0,0 @@
-{
- "name": "FDM Printer Base Description",
- "version": 2,
- "metadata":
- {
- "type": "machine",
- "author": "Ultimaker",
- "category": "Other",
- "manufacturer": "Unknown",
- "setting_version": 1,
- "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
- "visible": false,
- "has_materials": true,
- "preferred_material": "generic_pla",
- "preferred_quality_type": "normal",
- "machine_extruder_trains":
- {
- "0": "fdmextruder"
- },
- "supports_usb_connection": true
- },
- "settings":
- {
- "machine_settings":
- {
- "label": "Machine",
- "type": "category",
- "description": "Machine specific settings",
- "icon": "category_machine",
- "children":
- {
- "machine_name":
- {
- "label": "Machine Type",
- "description": "The name of your 3D printer model.",
- "default_value": "Unknown",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_show_variants":
- {
- "label": "Show Machine Variants",
- "description": "Whether to show the different variants of this machine, which are described in separate json files.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_start_gcode":
- {
- "label": "Start G-code",
- "description": "G-code commands to be executed at the very start - separated by \\n.",
- "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_end_gcode":
- {
- "label": "End G-code",
- "description": "G-code commands to be executed at the very end - separated by \\n.",
- "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_guid":
- {
- "label": "Material GUID",
- "description": "GUID of the material. This is set automatically. ",
- "default_value": "",
- "type": "str",
- "enabled": false
- },
- "material_diameter":
- {
- "label": "Diameter",
- "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.85,
- "minimum_value": "0.0001",
- "minimum_value_warning": "0.4",
- "maximum_value_warning": "3.5",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_bed_temp_wait":
- {
- "label": "Wait for Build Plate Heatup",
- "description": "Whether to insert a command to wait until the build plate temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_wait":
- {
- "label": "Wait for Nozzle Heatup",
- "description": "Whether to wait until the nozzle temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_prepend":
- {
- "label": "Include Material Temperatures",
- "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temp_prepend":
- {
- "label": "Include Build Plate Temperature",
- "description": "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_width":
- {
- "label": "Machine Width",
- "description": "The width (X-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_depth":
- {
- "label": "Machine Depth",
- "description": "The depth (Y-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_shape":
- {
- "label": "Build Plate Shape",
- "description": "The shape of the build plate without taking unprintable areas into account.",
- "default_value": "rectangular",
- "type": "enum",
- "options":
- {
- "rectangular": "Rectangular",
- "elliptic": "Elliptic"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_buildplate_type":
- {
- "label": "Build Plate Material",
- "description": "The material of the build plate installed on the printer.",
- "default_value": "glass",
- "type": "enum",
- "options":
- {
- "glass": "Glass",
- "aluminum": "Aluminum"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_height":
- {
- "label": "Machine Height",
- "description": "The height (Z-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heated_bed":
- {
- "label": "Has Heated Build Plate",
- "description": "Whether the machine has a heated build plate present.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_center_is_zero":
- {
- "label": "Is Center Origin",
- "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruder_count":
- {
- "label": "Number of Extruders",
- "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruders_enabled_count":
- {
- "label": "Number of Extruders that are enabled",
- "description": "Number of extruder trains that are enabled; automatically set in software",
- "value": "machine_extruder_count",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_tip_outer_diameter":
- {
- "label": "Outer nozzle diameter",
- "description": "The outer diameter of the tip of the nozzle.",
- "unit": "mm",
- "default_value": 1,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "machine_nozzle_head_distance":
- {
- "label": "Nozzle length",
- "description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
- "unit": "mm",
- "default_value": 3,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_expansion_angle":
- {
- "label": "Nozzle angle",
- "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.",
- "unit": "°",
- "type": "int",
- "default_value": 45,
- "maximum_value": "89",
- "minimum_value": "1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heat_zone_length":
- {
- "label": "Heat zone length",
- "description": "The distance from the tip of the nozzle in which heat from the nozzle is transferred to the filament.",
- "unit": "mm",
- "default_value": 16,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_filament_park_distance":
- {
- "label": "Filament Park Distance",
- "description": "The distance from the tip of the nozzle where to park the filament when an extruder is no longer used.",
- "unit": "mm",
- "default_value": 16,
- "value": "machine_heat_zone_length",
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_temp_enabled":
- {
- "label": "Enable Nozzle Temperature Control",
- "description": "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura.",
- "default_value": true,
- "value": "machine_gcode_flavor != \"UltiGCode\"",
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_heat_up_speed":
- {
- "label": "Heat up speed",
- "description": "The speed (°C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_cool_down_speed":
- {
- "label": "Cool down speed",
- "description": "The speed (°C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_min_cool_heat_time_window":
- {
- "label": "Minimal Time Standby Temperature",
- "description": "The minimal time an extruder has to be inactive before the nozzle is cooled. Only when an extruder is not used for longer than this time will it be allowed to cool down to the standby temperature.",
- "default_value": 50.0,
- "unit": "s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_gcode_flavor":
- {
- "label": "G-code flavour",
- "description": "The type of g-code to be generated.",
- "type": "enum",
- "options":
- {
- "RepRap (Marlin/Sprinter)": "Marlin",
- "RepRap (Volumetric)": "Marlin (Volumetric)",
- "RepRap (RepRap)": "RepRap",
- "UltiGCode": "Ultimaker 2",
- "Griffin": "Griffin",
- "Makerbot": "Makerbot",
- "BFB": "Bits from Bytes",
- "MACH3": "Mach3",
- "Repetier": "Repetier"
- },
- "default_value": "RepRap (Marlin/Sprinter)",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_firmware_retract":
- {
- "label": "Firmware Retraction",
- "description": "Whether to use firmware retract commands (G10/G11) instead of using the E property in G1 commands to retract the material.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor == 'RepRap (Volumetric)' or machine_gcode_flavor == 'UltiGCode' or machine_gcode_flavor == 'BFB'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_disallowed_areas":
- {
- "label": "Disallowed areas",
- "description": "A list of polygons with areas the print head is not allowed to enter.",
- "type": "polygons",
- "default_value":
- [
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "nozzle_disallowed_areas":
- {
- "label": "Nozzle Disallowed Areas",
- "description": "A list of polygons with areas the nozzle is not allowed to enter.",
- "type": "polygons",
- "default_value":
- [
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_head_polygon":
- {
- "label": "Machine head polygon",
- "description": "A 2D silhouette of the print head (fan caps excluded).",
- "type": "polygon",
- "default_value":
- [
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ]
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_head_with_fans_polygon":
- {
- "label": "Machine head & Fan polygon",
- "description": "A 2D silhouette of the print head (fan caps included).",
- "type": "polygon",
- "default_value":
- [
- [
- -20,
- 10
- ],
- [
- 10,
- 10
- ],
- [
- 10,
- -10
- ],
- [
- -20,
- -10
- ]
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "gantry_height":
- {
- "label": "Gantry height",
- "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
- "default_value": 99999999999,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_id":
- {
- "label": "Nozzle ID",
- "description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".",
- "type": "str",
- "default_value": "unknown",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_size":
- {
- "label": "Nozzle Diameter",
- "description": "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_use_extruder_offset_to_offset_coords":
- {
- "label": "Offset With Extruder",
- "description": "Apply the extruder offset to the coordinate system.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruder_prime_pos_z":
- {
- "label": "Extruder Prime Z Position",
- "description": "The Z coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value": "machine_height",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "extruder_prime_pos_abs":
- {
- "label": "Absolute Extruder Prime Position",
- "description": "Make the extruder prime position absolute rather than relative to the last-known location of the head.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_max_feedrate_x":
- {
- "label": "Maximum Speed X",
- "description": "The maximum speed for the motor of the X-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 500,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_y":
- {
- "label": "Maximum Speed Y",
- "description": "The maximum speed for the motor of the Y-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 500,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_z":
- {
- "label": "Maximum Speed Z",
- "description": "The maximum speed for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_e":
- {
- "label": "Maximum Feedrate",
- "description": "The maximum speed of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_x":
- {
- "label": "Maximum Acceleration X",
- "description": "Maximum acceleration for the motor of the X-direction",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_y":
- {
- "label": "Maximum Acceleration Y",
- "description": "Maximum acceleration for the motor of the Y-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_z":
- {
- "label": "Maximum Acceleration Z",
- "description": "Maximum acceleration for the motor of the Z-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 100,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_e":
- {
- "label": "Maximum Filament Acceleration",
- "description": "Maximum acceleration for the motor of the filament.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 10000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_acceleration":
- {
- "label": "Default Acceleration",
- "description": "The default acceleration of print head movement.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 4000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_xy":
- {
- "label": "Default X-Y Jerk",
- "description": "Default jerk for movement in the horizontal plane.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_z":
- {
- "label": "Default Z Jerk",
- "description": "Default jerk for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_e":
- {
- "label": "Default Filament Jerk",
- "description": "Default jerk for the motor of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_steps_per_mm_x":
- {
- "label": "Steps per Millimeter (X)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the X direction.",
- "type": "int",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_y":
- {
- "label": "Steps per Millimeter (Y)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Y direction.",
- "type": "int",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_z":
- {
- "label": "Steps per Millimeter (Z)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Z direction.",
- "type": "int",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_e":
- {
- "label": "Steps per Millimeter (E)",
- "description": "How many steps of the stepper motors will result in one millimeter of extrusion.",
- "type": "int",
- "default_value": 1600,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_x":
- {
- "label": "X Endstop in Positive Direction",
- "description": "Whether the endstop of the X axis is in the positive direction (high X coordinate) or negative (low X coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_y":
- {
- "label": "Y Endstop in Positive Direction",
- "description": "Whether the endstop of the Y axis is in the positive direction (high Y coordinate) or negative (low Y coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_z":
- {
- "label": "Z Endstop in Positive Direction",
- "description": "Whether the endstop of the Z axis is in the positive direction (high Z coordinate) or negative (low Z coordinate).",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_minimum_feedrate":
- {
- "label": "Minimum Feedrate",
- "description": "The minimal movement speed of the print head.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_feeder_wheel_diameter":
- {
- "label": "Feeder Wheel Diameter",
- "description": "The diameter of the wheel that drives the material in the feeder.",
- "unit": "mm",
- "type": "float",
- "default_value": 10.0,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "resolution":
- {
- "label": "Quality",
- "type": "category",
- "icon": "category_layer_height",
- "description": "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)",
- "children":
- {
- "layer_height":
- {
- "label": "Layer Height",
- "description": "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "layer_height_0":
- {
- "label": "Initial Layer Height",
- "description": "The height of the initial layer in mm. A thicker initial layer makes adhesion to the build plate easier.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "resolve": "min(extruderValues('layer_height_0'))",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "line_width":
- {
- "label": "Line Width",
- "description": "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "machine_nozzle_size",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width":
- {
- "label": "Wall Line Width",
- "description": "Width of a single wall line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "value": "line_width",
- "default_value": 0.4,
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width_0":
- {
- "label": "Outer Wall Line Width",
- "description": "Width of the outermost wall line. By lowering this value, higher levels of detail can be printed.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "(0.1 + 0.4 * machine_nozzle_size) if outer_inset_first else 0.1 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_line_width_x":
- {
- "label": "Inner Wall(s) Line Width",
- "description": "Width of a single wall line for all wall lines except the outermost one.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "skin_line_width":
- {
- "label": "Top/Bottom Line Width",
- "description": "Width of a single top/bottom line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_line_width":
- {
- "label": "Infill Line Width",
- "description": "Width of a single infill line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skirt_brim_line_width":
- {
- "label": "Skirt/Brim Line Width",
- "description": "Width of a single skirt or brim line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_line_width":
- {
- "label": "Support Line Width",
- "description": "Width of a single support structure line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "enabled": "support_enable",
- "value": "line_width",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_interface_line_width":
- {
- "label": "Support Interface Line Width",
- "description": "Width of a single line of support roof or floor.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "support_enable and support_interface_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_width":
- {
- "label": "Support Roof Line Width",
- "description": "Width of a single support roof line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "support_enable and support_roof_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_line_width":
- {
- "label": "Support Floor Line Width",
- "description": "Width of a single support floor line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "support_enable and support_bottom_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "prime_tower_line_width":
- {
- "label": "Prime Tower Line Width",
- "description": "Width of a single prime tower line.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "initial_layer_line_width_factor":
- {
- "label": "Initial Layer Line Width",
- "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.",
- "type": "float",
- "unit": "%",
- "default_value": 100.0,
- "minimum_value": "0.001",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "shell":
- {
- "label": "Shell",
- "icon": "category_shell",
- "description": "Shell",
- "type": "category",
- "children":
- {
- "wall_extruder_nr":
- {
- "label": "Wall Extruder",
- "description": "The extruder train used for printing the walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1",
- "children": {
- "wall_0_extruder_nr":
- {
- "label": "Outer Wall Extruder",
- "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "wall_x_extruder_nr":
- {
- "label": "Inner Wall Extruder",
- "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- }
- }
- },
- "wall_thickness":
- {
- "label": "Wall Thickness",
- "description": "The thickness of the walls in the horizontal direction. This value divided by the wall line width defines the number of walls.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "line_width",
- "maximum_value_warning": "10 * line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_count":
- {
- "label": "Wall Line Count",
- "description": "The number of walls. When calculated by the wall thickness, this value is rounded to a whole number.",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "10",
- "type": "int",
- "value": "1 if magic_spiralize else max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1) if wall_thickness != 0 else 0",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "wall_0_wipe_dist":
- {
- "label": "Outer Wall Wipe Distance",
- "description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "roofing_extruder_nr":
- {
- "label": "Top Surface Skin Extruder",
- "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "value": "top_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
- },
- "roofing_layer_count":
- {
- "label": "Top Surface Skin Layers",
- "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "top_layers - 1",
- "type": "int",
- "value": "0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "top_layers > 0"
- },
- "top_bottom_extruder_nr":
- {
- "label": "Top/Bottom Extruder",
- "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "top_bottom_thickness":
- {
- "label": "Top/Bottom Thickness",
- "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.6",
- "maximum_value": "machine_height",
- "type": "float",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_thickness":
- {
- "label": "Top Thickness",
- "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "maximum_value": "machine_height",
- "type": "float",
- "value": "top_bottom_thickness",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_layers":
- {
- "label": "Top Layers",
- "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.",
- "default_value": 8,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "int",
- "minimum_value_warning": "2",
- "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "bottom_thickness":
- {
- "label": "Bottom Thickness",
- "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "type": "float",
- "value": "top_bottom_thickness",
- "maximum_value": "machine_height",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "bottom_layers":
- {
- "label": "Bottom Layers",
- "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "type": "int",
- "value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "top_bottom_pattern":
- {
- "label": "Top/Bottom Pattern",
- "description": "The pattern of the top/bottom layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "top_bottom_pattern_0":
- {
- "label": "Bottom Pattern Initial Layer",
- "description": "The pattern on the bottom of the print on the first layer.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_skin_polygons":
- {
- "label": "Connect Top/Bottom Polygons",
- "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality.",
- "type": "bool",
- "default_value": false,
- "enabled": "top_bottom_pattern == 'concentric'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_angles":
- {
- "label": "Top/Bottom Line Directions",
- "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_0_inset":
- {
- "label": "Outer Wall Inset",
- "description": "Inset applied to the path of the outer wall. If the outer wall is smaller than the nozzle, and printed after the inner walls, use this offset to get the hole in the nozzle to overlap with the inner walls instead of the outside of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "(machine_nozzle_size - wall_line_width_0) / 2 if (wall_line_width_0 < machine_nozzle_size and not outer_inset_first) else 0",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "optimize_wall_printing_order":
- {
- "label": "Optimize Wall Printing Order",
- "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "outer_inset_first":
- {
- "label": "Outer Before Inner Walls",
- "description": "Prints walls in order of outside to inside when enabled. This can help improve dimensional accuracy in X and Y when using a high viscosity plastic like ABS; however it can decrease outer surface print quality, especially on overhangs.",
- "type": "bool",
- "default_value": false,
- "enabled": "wall_0_extruder_nr == wall_x_extruder_nr",
- "settable_per_mesh": true
- },
- "alternate_extra_perimeter":
- {
- "label": "Alternate Extra Wall",
- "description": "Prints an extra wall at every other layer. This way infill gets caught between these extra walls, resulting in stronger prints.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "travel_compensate_overlapping_walls_enabled":
- {
- "label": "Compensate Wall Overlaps",
- "description": "Compensate the flow for parts of a wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "travel_compensate_overlapping_walls_0_enabled":
- {
- "label": "Compensate Outer Wall Overlaps",
- "description": "Compensate the flow for parts of an outer wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "value": "travel_compensate_overlapping_walls_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "travel_compensate_overlapping_walls_x_enabled":
- {
- "label": "Compensate Inner Wall Overlaps",
- "description": "Compensate the flow for parts of an inner wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "value": "travel_compensate_overlapping_walls_enabled",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "wall_min_flow":
- {
- "label": "Minimum Wall Flow",
- "description": "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "wall_min_flow_retract":
- {
- "label": "Prefer Retract",
- "description": "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold.",
- "type": "bool",
- "default_value": false,
- "enabled": "(travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled) and wall_min_flow > 0",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "fill_perimeter_gaps":
- {
- "label": "Fill Gaps Between Walls",
- "description": "Fills the gaps between walls where no walls fit.",
- "type": "enum",
- "options": {
- "nowhere": "Nowhere",
- "everywhere": "Everywhere"
- },
- "default_value": "everywhere",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "filter_out_tiny_gaps":
- {
- "label": "Filter Out Tiny Gaps",
- "description": "Filter out tiny gaps to reduce blobs on outside of model.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "fill_outline_gaps": {
- "label": "Print Thin Walls",
- "description": "Print pieces of the model which are horizontally thinner than the nozzle size.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "xy_offset":
- {
- "label": "Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "xy_offset_layer_0":
- {
- "label": "Initial Layer Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in the first layer. A negative value can compensate for squishing of the first layer known as \"elephant's foot\".",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "value": "xy_offset",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_type":
- {
- "label": "Z Seam Alignment",
- "description": "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker.",
- "type": "enum",
- "options":
- {
- "back": "User Specified",
- "shortest": "Shortest",
- "random": "Random",
- "sharpest_corner": "Sharpest Corner"
- },
- "default_value": "sharpest_corner",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_x":
- {
- "label": "Z Seam X",
- "description": "The X coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "machine_width / 2",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_y":
- {
- "label": "Z Seam Y",
- "description": "The Y coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "machine_depth * 3",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_corner":
- {
- "label": "Seam Corner Preference",
- "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner.",
- "type": "enum",
- "options":
- {
- "z_seam_corner_none": "None",
- "z_seam_corner_inner": "Hide Seam",
- "z_seam_corner_outer": "Expose Seam",
- "z_seam_corner_any": "Hide or Expose Seam"
- },
- "default_value": "z_seam_corner_inner",
- "enabled": "z_seam_type != 'random'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_relative":
- {
- "label": "Z Seam Relative",
- "description": "When enabled, the z seam coordinates are relative to each part's centre. When disabled, the coordinates define an absolute position on the build plate.",
- "unit": "mm",
- "type": "bool",
- "default_value": false,
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_no_small_gaps_heuristic":
- {
- "label": "Ignore Small Z Gaps",
- "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_outline_count":
- {
- "label": "Extra Skin Wall Count",
- "description": "Replaces the outermost part of the top/bottom pattern with a number of concentric lines. Using one or two lines improves roofs that start on infill material.",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "type": "int",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_enabled":
- {
- "label": "Enable Ironing",
- "description": "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_only_highest_layer":
- {
- "label": "Iron Only Highest Layer",
- "description": "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish.",
- "type": "bool",
- "default_value": false,
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_pattern":
- {
- "label": "Ironing Pattern",
- "description": "The pattern to use for ironing top surfaces.",
- "type": "enum",
- "options":
- {
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "zigzag",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_line_spacing":
- {
- "label": "Ironing Line Spacing",
- "description": "The distance between the lines of ironing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_flow":
- {
- "label": "Ironing Flow",
- "description": "The amount of material, relative to a normal skin line, to extrude during ironing. Keeping the nozzle filled helps filling some of the crevices of the top surface, but too much results in overextrusion and blips on the side of the surface.",
- "type": "float",
- "unit": "%",
- "default_value": 10.0,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_inset":
- {
- "label": "Ironing Inset",
- "description": "A distance to keep from the edges of the model. Ironing all the way to the edge of the mesh may result in a jagged edge on your print.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.35,
- "value": "wall_line_width_0 / 2",
- "minimum_value_warning": "0",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_ironing":
- {
- "label": "Ironing Speed",
- "description": "The speed at which to pass over the top surface.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 20.0,
- "value": "speed_topbottom * 20 / 30",
- "minimum_value": "0.001",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_ironing":
- {
- "label": "Ironing Acceleration",
- "description": "The acceleration with which ironing is performed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_ironing":
- {
- "label": "Ironing Jerk",
- "description": "The maximum instantaneous velocity change while performing ironing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "infill":
- {
- "label": "Infill",
- "icon": "category_infill",
- "description": "Infill",
- "type": "category",
- "children":
- {
- "infill_extruder_nr":
- {
- "label": "Infill Extruder",
- "description": "The extruder train used for printing infill. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "infill_sparse_density":
- {
- "label": "Infill Density",
- "description": "Adjusts the density of infill of the print.",
- "unit": "%",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_line_distance":
- {
- "label": "Infill Line Distance",
- "description": "Distance between the printed infill lines. This setting is calculated by the infill density and the infill line width.",
- "unit": "mm",
- "type": "float",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "infill_line_width",
- "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else 1))))",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "infill_pattern":
- {
- "label": "Infill Pattern",
- "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.",
- "type": "enum",
- "options":
- {
- "grid": "Grid",
- "lines": "Lines",
- "triangles": "Triangles",
- "trihexagon": "Tri-Hexagon",
- "cubic": "Cubic",
- "cubicsubdiv": "Cubic Subdivision",
- "tetrahedral": "Octet",
- "quarter_cubic": "Quarter Cubic",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross",
- "cross_3d": "Cross 3D"
- },
- "default_value": "grid",
- "enabled": "infill_sparse_density > 0",
- "value": "'lines' if infill_sparse_density > 25 else 'grid'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "zig_zaggify_infill":
- {
- "label": "Connect Infill Lines",
- "description": "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used.",
- "type": "bool",
- "default_value": false,
- "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_infill_polygons":
- {
- "label": "Connect Infill Polygons",
- "description": "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time.",
- "type": "bool",
- "default_value": true,
- "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_angles":
- {
- "label": "Infill Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "infill_pattern != 'concentric' and infill_pattern != 'cubicsubdiv' and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_x":
- {
- "label": "Infill X Offset",
- "description": "The infill pattern is moved this distance along the X axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_y":
- {
- "label": "Infill Y Offset",
- "description": "The infill pattern is moved this distance along the Y axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_multiplier":
- {
- "label": "Infill Line Multiplier",
- "description": "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage.",
- "default_value": 1,
- "type": "int",
- "minimum_value": "1",
- "maximum_value_warning": "infill_line_distance / infill_line_width",
- "enabled": "infill_sparse_density > 0 and not spaghetti_infill_enabled and infill_pattern != 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_wall_line_count":
- {
- "label": "Extra Infill Wall Count",
- "description": "Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "enabled": "infill_sparse_density > 0 and not spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "sub_div_rad_add":
- {
- "label": "Cubic Subdivision Shell",
- "description": "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "wall_line_width_x",
- "minimum_value_warning": "-1 * infill_line_distance",
- "maximum_value_warning": "5 * infill_line_distance",
- "enabled": "infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_overlap":
- {
- "label": "Infill Overlap Percentage",
- "description": "The amount of overlap between the infill and the walls as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "%",
- "type": "float",
- "default_value": 10,
- "value": "10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_overlap_mm":
- {
- "label": "Infill Overlap",
- "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (infill_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "skin_overlap":
- {
- "label": "Skin Overlap Percentage",
- "description": "The amount of overlap between the skin and the walls as a percentage of the skin line width. A slight overlap allows the walls to connect firmly to the skin. This is a percentage of the average line widths of the skin lines and the innermost wall.",
- "unit": "%",
- "type": "float",
- "default_value": 5,
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "value": "5 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "skin_overlap_mm":
- {
- "label": "Skin Overlap",
- "description": "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.02,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "top_bottom_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "infill_wipe_dist":
- {
- "label": "Infill Wipe Distance",
- "description": "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "value": "wall_line_width_0 / 4 if wall_line_count == 1 else wall_line_width_x / 4",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_sparse_thickness":
- {
- "label": "Infill Layer Thickness",
- "description": "The thickness per layer of infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height') if infill_line_distance > 0 else -999999",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8) if infill_line_distance > 0 else 999999",
- "value": "resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0 and not spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_steps":
- {
- "label": "Gradual Infill Steps",
- "description": "Number of times to reduce the infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (infill_pattern == 'cross' or infill_pattern == 'cross_3d' or support_pattern == 'concentric') else 5",
- "maximum_value": "0 if spaghetti_infill_enabled else (999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2)))",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv' and not spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_step_height":
- {
- "label": "Gradual Infill Step Height",
- "description": "The height of infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0 and gradual_infill_steps > 0 and infill_pattern != 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_before_walls":
- {
- "label": "Infill Before Walls",
- "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.",
- "type": "bool",
- "default_value": true,
- "enabled": "infill_sparse_density > 0 and wall_x_extruder_nr == infill_extruder_nr",
- "settable_per_mesh": true
- },
- "min_infill_area":
- {
- "label": "Minimum Infill Area",
- "description": "Don't generate areas of infill smaller than this (use skin instead).",
- "unit": "mm²",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_enabled":
- {
- "label": "Infill Support",
- "description": "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength.",
- "type": "bool",
- "default_value": false,
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_angle":
- {
- "label": "Infill Overhang Angle",
- "description": "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 40,
- "enabled": "infill_sparse_density > 0 and infill_support_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_preshrink":
- {
- "label": "Skin Removal Width",
- "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_preshrink":
- {
- "label": "Top Skin Removal Width",
- "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "skin_preshrink",
- "minimum_value": "0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_preshrink":
- {
- "label": "Bottom Skin Removal Width",
- "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "skin_preshrink",
- "minimum_value": "0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "expand_skins_expand_distance":
- {
- "label": "Skin Expand Distance",
- "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.8,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "-skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_expand_distance":
- {
- "label": "Top Skin Expand Distance",
- "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.8,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-top_skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_expand_distance":
- {
- "label": "Bottom Skin Expand Distance",
- "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.8,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-bottom_skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "max_skin_angle_for_expansion":
- {
- "label": "Maximum Skin Angle for Expansion",
- "description": "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "min_skin_width_for_expansion":
- {
- "label": "Minimum Skin Width for Expansion",
- "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.24,
- "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
- "minimum_value": "0",
- "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "material":
- {
- "label": "Material",
- "icon": "category_material",
- "description": "Material",
- "type": "category",
- "children":
- {
- "default_material_print_temperature":
- {
- "label": "Default Printing Temperature",
- "description": "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_extruder": true,
- "settable_per_mesh": false,
- "minimum_value": "-273.15"
- },
- "material_print_temperature":
- {
- "label": "Printing Temperature",
- "description": "The temperature used for printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "value": "default_material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "enabled": "machine_nozzle_temp_enabled and not (material_flow_dependent_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_print_temperature_layer_0":
- {
- "label": "Printing Temperature Initial Layer",
- "description": "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer.",
- "unit": "°C",
- "type": "float",
- "default_value": 215,
- "value": "material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_initial_print_temperature":
- {
- "label": "Initial Printing Temperature",
- "description": "The minimal temperature while heating up to the Printing Temperature at which printing can already start.",
- "unit": "°C",
- "type": "float",
- "default_value": 200,
- "value": "max(-273.15, material_print_temperature - 10)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_final_print_temperature":
- {
- "label": "Final Printing Temperature",
- "description": "The temperature to which to already start cooling down just before the end of printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 195,
- "value": "max(-273.15, material_print_temperature - 15)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_extrusion_cool_down_speed":
- {
- "label": "Extrusion Cool Down Speed Modifier",
- "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.",
- "unit": "°C/s",
- "type": "float",
- "default_value": 0.7,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "maximum_value": "machine_nozzle_heat_up_speed",
- "enabled": "material_flow_dependent_temperature or (extruders_enabled_count > 1 and material_final_print_temperature != material_print_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "default_material_bed_temperature":
- {
- "label": "Default Build Plate Temperature",
- "description": "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('default_material_bed_temperature'))",
- "default_value": 60,
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "130",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature":
- {
- "label": "Build Plate Temperature",
- "description": "The temperature used for the heated build plate. If this is 0, the bed temperature will not be adjusted.",
- "unit": "°C",
- "type": "float",
- "default_value": 60,
- "value": "default_material_bed_temperature",
- "resolve": "max(extruderValues('material_bed_temperature'))",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "130",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature_layer_0":
- {
- "label": "Build Plate Temperature Initial Layer",
- "description": "The temperature used for the heated build plate at the first layer.",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('material_bed_temperature_layer_0'))",
- "default_value": 60,
- "value": "resolveOrValue('material_bed_temperature')",
- "minimum_value": "-273.15",
- "minimum_value_warning": "max(extruderValues('material_bed_temperature'))",
- "maximum_value_warning": "130",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_adhesion_tendency":
- {
- "label": "Adhesion Tendency",
- "description": "Surface adhesion tendency.",
- "type": "int",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "10",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_surface_energy":
- {
- "label": "Surface Energy",
- "description": "Surface energy.",
- "unit": "%",
- "type": "int",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_shrinkage_percentage":
- {
- "label": "Shrinkage Ratio",
- "description": "Shrinkage ratio in percentage.",
- "unit": "%",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flow":
- {
- "label": "Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": true
- },
- "material_flow_layer_0":
- {
- "label": "Initial Layer Flow",
- "description": "Flow compensation for the first layer: the amount of material extruded on the initial layer is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "value": "material_flow",
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": true
- },
- "retraction_enable":
- {
- "label": "Enable Retraction",
- "description": "Retract the filament when the nozzle is moving over a non-printed area. ",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retract_at_layer_change":
- {
- "label": "Retract at Layer Change",
- "description": "Retract the filament when the nozzle is moving to the next layer.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_amount":
- {
- "label": "Retraction Distance",
- "description": "The length of material retracted during a retraction move.",
- "unit": "mm",
- "type": "float",
- "default_value": 6.5,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_speed":
- {
- "label": "Retraction Speed",
- "description": "The speed at which the filament is retracted and primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "retraction_retract_speed":
- {
- "label": "Retraction Retract Speed",
- "description": "The speed at which the filament is retracted during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_prime_speed":
- {
- "label": "Retraction Prime Speed",
- "description": "The speed at which the filament is primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "retraction_extra_prime_amount":
- {
- "label": "Retraction Extra Prime Amount",
- "description": "Some material can ooze away during a travel move, which can be compensated for here.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "5.0",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_min_travel":
- {
- "label": "Retraction Minimum Travel",
- "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "value": "line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "line_width * 1.5",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_count_max":
- {
- "label": "Maximum Retraction Count",
- "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.",
- "default_value": 90,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "int",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_extrusion_window":
- {
- "label": "Minimum Extrusion Distance Window",
- "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.",
- "unit": "mm",
- "type": "float",
- "default_value": 4.5,
- "minimum_value": "0",
- "maximum_value_warning": "retraction_amount * 2",
- "value": "retraction_amount",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "limit_support_retractions":
- {
- "label": "Limit Support Retractions",
- "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_enable and support_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_standby_temperature":
- {
- "label": "Standby Temperature",
- "description": "The temperature of the nozzle when another nozzle is currently used for printing.",
- "type": "float",
- "unit": "°C",
- "default_value": 150,
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "260",
- "enabled": "extruders_enabled_count > 1 and machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_retraction_amount":
- {
- "label": "Nozzle Switch Retraction Distance",
- "description": "The amount of retraction: Set at 0 for no retraction at all. This should generally be the same as the length of the heat zone.",
- "type": "float",
- "unit": "mm",
- "enabled": "retraction_enable",
- "default_value": 20,
- "value": "machine_heat_zone_length",
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_retraction_speeds":
- {
- "label": "Nozzle Switch Retraction Speed",
- "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable",
- "default_value": 20,
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "switch_extruder_retraction_speed":
- {
- "label": "Nozzle Switch Retract Speed",
- "description": "The speed at which the filament is retracted during a nozzle switch retract.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_prime_speed":
- {
- "label": "Nozzle Switch Prime Speed",
- "description": "The speed at which the filament is pushed back after a nozzle switch retraction.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "speed":
- {
- "label": "Speed",
- "icon": "category_speed",
- "description": "Speed",
- "type": "category",
- "children":
- {
- "speed_print":
- {
- "label": "Print Speed",
- "description": "The speed at which printing happens.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value_warning": "150",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "default_value": 60,
- "settable_per_mesh": true,
- "children":
- {
- "speed_infill":
- {
- "label": "Infill Speed",
- "description": "The speed at which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall":
- {
- "label": "Wall Speed",
- "description": "The speed at which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "settable_per_mesh": true,
- "children":
- {
- "speed_wall_0":
- {
- "label": "Outer Wall Speed",
- "description": "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_wall",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall_x":
- {
- "label": "Inner Wall Speed",
- "description": "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_wall * 2",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "speed_roofing":
- {
- "label": "Top Surface Skin Speed",
- "description": "The speed at which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 25,
- "value": "speed_topbottom",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "speed_topbottom":
- {
- "label": "Top/Bottom Speed",
- "description": "The speed at which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_support":
- {
- "label": "Support Speed",
- "description": "The speed at which the support structure is printed. Printing support at higher speeds can greatly reduce printing time. The surface quality of the support structure is not important since it is removed after printing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "support_enable",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_infill":
- {
- "label": "Support Infill Speed",
- "description": "The speed at which the infill of support is printed. Printing the infill at lower speeds improves stability.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 60,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "value": "speed_support",
- "enabled": "support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_interface":
- {
- "label": "Support Interface Speed",
- "description": "The speed at which the roofs and floors of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_interface_enable and support_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "speed_support / 1.5",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_roof":
- {
- "label": "Support Roof Speed",
- "description": "The speed at which the roofs of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_roof_enable and support_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_bottom":
- {
- "label": "Support Floor Speed",
- "description": "The speed at which the floor of support is printed. Printing it at lower speed can improve adhesion of support on top of your model.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_bottom_enable and support_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "speed_prime_tower":
- {
- "label": "Prime Tower Speed",
- "description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 60,
- "value": "speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "speed_travel":
- {
- "label": "Travel Speed",
- "description": "The speed at which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 120,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_print if magic_spiralize else 120",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_layer_0":
- {
- "label": "Initial Layer Speed",
- "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "value": "speed_print * 30 / 60",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true,
- "children":
- {
- "speed_print_layer_0":
- {
- "label": "Initial Layer Print Speed",
- "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "value": "speed_layer_0",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true
- },
- "speed_travel_layer_0":
- {
- "label": "Initial Layer Travel Speed",
- "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 60,
- "value": "speed_layer_0 * speed_travel / speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "skirt_brim_speed":
- {
- "label": "Skirt/Brim Speed",
- "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_layer_0",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "max_feedrate_z_override":
- {
- "label": "Maximum Z Speed",
- "description": "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value": "299792458000",
- "maximum_value_warning": "machine_max_feedrate_z",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_slowdown_layers":
- {
- "label": "Number of Slower Layers",
- "description": "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers.",
- "type": "int",
- "default_value": 2,
- "resolve": "round(sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers')))",
- "minimum_value": "0",
- "maximum_value_warning": "3.2 / resolveOrValue('layer_height')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "speed_equalize_flow_enabled":
- {
- "label": "Equalize Filament Flow",
- "description": "Print thinner than normal lines faster so that the amount of material extruded per second remains the same. Thin pieces in your model might require lines printed with smaller line width than provided in the settings. This setting controls the speed changes for such lines.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_equalize_flow_max":
- {
- "label": "Maximum Speed for Flow Equalization",
- "description": "Maximum print speed when adjusting the print speed in order to equalize flow.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "speed_equalize_flow_enabled",
- "default_value": 150,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_enabled":
- {
- "label": "Enable Acceleration Control",
- "description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('acceleration_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "acceleration_print":
- {
- "label": "Print Acceleration",
- "description": "The acceleration with which printing happens.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_infill":
- {
- "label": "Infill Acceleration",
- "description": "The acceleration with which infill is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall":
- {
- "label": "Wall Acceleration",
- "description": "The acceleration with which the walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_wall_0":
- {
- "label": "Outer Wall Acceleration",
- "description": "The acceleration with which the outermost walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall_x":
- {
- "label": "Inner Wall Acceleration",
- "description": "The acceleration with which all inner walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "acceleration_roofing":
- {
- "label": "Top Surface Skin Acceleration",
- "description": "The acceleration with which top surface skin layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_topbottom":
- {
- "label": "Top/Bottom Acceleration",
- "description": "The acceleration with which top/bottom layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_support":
- {
- "label": "Support Acceleration",
- "description": "The acceleration with which the support structure is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and support_enable",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_infill":
- {
- "label": "Support Infill Acceleration",
- "description": "The acceleration with which the infill of support is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_interface":
- {
- "label": "Support Interface Acceleration",
- "description": "The acceleration with which the roofs and floors of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and support_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_roof":
- {
- "label": "Support Roof Acceleration",
- "description": "The acceleration with which the roofs of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_roof_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_roof_enable and support_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_bottom":
- {
- "label": "Support Floor Acceleration",
- "description": "The acceleration with which the floors of support are printed. Printing them at lower acceleration can improve adhesion of support on top of your model.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_bottom_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_bottom_enable and support_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "acceleration_prime_tower":
- {
- "label": "Prime Tower Acceleration",
- "description": "The acceleration with which the prime tower is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_travel":
- {
- "label": "Travel Acceleration",
- "description": "The acceleration with which travel moves are made.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 5000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print if magic_spiralize else 5000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false
- },
- "acceleration_layer_0":
- {
- "label": "Initial Layer Acceleration",
- "description": "The acceleration for the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_print_layer_0":
- {
- "label": "Initial Layer Print Acceleration",
- "description": "The acceleration during the printing of the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true
- },
- "acceleration_travel_layer_0":
- {
- "label": "Initial Layer Travel Acceleration",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0 * acceleration_travel / acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_skirt_brim":
- {
- "label": "Skirt/Brim Acceleration",
- "description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "jerk_enabled":
- {
- "label": "Enable Jerk Control",
- "description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('jerk_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "jerk_print":
- {
- "label": "Print Jerk",
- "description": "The maximum instantaneous velocity change of the print head.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_infill":
- {
- "label": "Infill Jerk",
- "description": "The maximum instantaneous velocity change with which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall":
- {
- "label": "Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_wall_0":
- {
- "label": "Outer Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the outermost walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall_x":
- {
- "label": "Inner Wall Jerk",
- "description": "The maximum instantaneous velocity change with which all inner walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "jerk_roofing":
- {
- "label": "Top Surface Skin Jerk",
- "description": "The maximum instantaneous velocity change with which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_topbottom":
- {
- "label": "Top/Bottom Jerk",
- "description": "The maximum instantaneous velocity change with which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_support":
- {
- "label": "Support Jerk",
- "description": "The maximum instantaneous velocity change with which the support structure is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and support_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_extruder_nr",
- "children":
- {
- "jerk_support_infill":
- {
- "label": "Support Infill Jerk",
- "description": "The maximum instantaneous velocity change with which the infill of support is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_interface":
- {
- "label": "Support Interface Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs and floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and support_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "jerk_support_roof":
- {
- "label": "Support Roof Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and support_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_bottom":
- {
- "label": "Support Floor Jerk",
- "description": "The maximum instantaneous velocity change with which the floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and support_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "jerk_prime_tower":
- {
- "label": "Prime Tower Jerk",
- "description": "The maximum instantaneous velocity change with which the prime tower is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "jerk_travel":
- {
- "label": "Travel Jerk",
- "description": "The maximum instantaneous velocity change with which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_print if magic_spiralize else 30",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false
- },
- "jerk_layer_0":
- {
- "label": "Initial Layer Jerk",
- "description": "The print maximum instantaneous velocity change for the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_print_layer_0":
- {
- "label": "Initial Layer Print Jerk",
- "description": "The maximum instantaneous velocity change during the printing of the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true
- },
- "jerk_travel_layer_0":
- {
- "label": "Initial Layer Travel Jerk",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0 * jerk_travel / jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "jerk_skirt_brim":
- {
- "label": "Skirt/Brim Jerk",
- "description": "The maximum instantaneous velocity change with which the skirt and brim are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_layer_0",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "travel":
- {
- "label": "Travel",
- "icon": "category_travel",
- "description": "travel",
- "type": "category",
- "children":
- {
- "retraction_combing":
- {
- "label": "Combing Mode",
- "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases.",
- "type": "enum",
- "options":
- {
- "off": "Off",
- "all": "All",
- "noskin": "Not in Skin",
- "infill": "Within Infill"
- },
- "default_value": "all",
- "resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "retraction_combing_max_distance":
- {
- "label": "Max Comb Distance With No Retract",
- "description": "When non-zero, combing travel moves that are longer than this distance will use retraction.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_retract_before_outer_wall":
- {
- "label": "Retract Before Outer Wall",
- "description": "Always retract when moving to start an outer wall.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "travel_avoid_other_parts":
- {
- "label": "Avoid Printed Parts When Traveling",
- "description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_supports":
- {
- "label": "Avoid Supports When Traveling",
- "description": "The nozzle avoids already printed supports when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": false,
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_distance":
- {
- "label": "Travel Avoid Distance",
- "description": "The distance between the nozzle and already printed parts when avoiding during travel moves.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.625,
- "value": "machine_nozzle_tip_outer_diameter / 2 * 1.25",
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_tip_outer_diameter * 0.5",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter * 5",
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "start_layers_at_same_position":
- {
- "label": "Start Layers with the Same Part",
- "description": "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time.",
- "type": "bool",
- "default_value": false,
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "layer_start_x":
- {
- "label": "Layer Start X",
- "description": "The X coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_width / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "layer_start_y":
- {
- "label": "Layer Start Y",
- "description": "The Y coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "retraction_hop_enabled": {
- "label": "Z Hop When Retracted",
- "description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_only_when_collides": {
- "label": "Z Hop Only Over Printed Parts",
- "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop": {
- "label": "Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_after_extruder_switch": {
- "label": "Z Hop After Extruder Switch",
- "description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_hop_enabled and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cooling":
- {
- "label": "Cooling",
- "icon": "category_cool",
- "description": "Cooling",
- "type": "category",
- "children":
- {
- "cool_fan_enabled":
- {
- "label": "Enable Print Cooling",
- "description": "Enables the print cooling fans while printing. The fans improve print quality on layers with short layer times and bridging / overhangs.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed":
- {
- "label": "Fan Speed",
- "description": "The speed at which the print cooling fans spin.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "value": "100.0 if cool_fan_enabled else 0.0",
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_speed_min":
- {
- "label": "Regular Fan Speed",
- "description": "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "value": "cool_fan_speed",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_max":
- {
- "label": "Maximum Fan Speed",
- "description": "The speed at which the fans spin on the minimum layer time. The fan speed gradually increases between the regular fan speed and maximum fan speed when the threshold is hit.",
- "unit": "%",
- "type": "float",
- "minimum_value": "max(0, cool_fan_speed_min)",
- "maximum_value": "100",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "value": "cool_fan_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time_fan_speed_max":
- {
- "label": "Regular/Maximum Fan Speed Threshold",
- "description": "The layer time which sets the threshold between regular fan speed and maximum fan speed. Layers that print slower than this time use regular fan speed. For faster layers the fan speed gradually increases towards the maximum fan speed.",
- "unit": "s",
- "type": "float",
- "default_value": 10,
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_0":
- {
- "label": "Initial Fan Speed",
- "description": "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_full_at_height":
- {
- "label": "Regular Fan Speed at Height",
- "description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.5,
- "value": "0 if resolveOrValue('adhesion_type') == 'raft' else resolveOrValue('layer_height_0')",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_full_layer":
- {
- "label": "Regular Fan Speed at Layer",
- "description": "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "1",
- "maximum_value_warning": "10 / resolveOrValue('layer_height')",
- "value": "max(1, int(math.floor((cool_fan_full_at_height - resolveOrValue('layer_height_0')) / resolveOrValue('layer_height')) + 2))",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time":
- {
- "label": "Minimum Layer Time",
- "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.",
- "unit": "s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_min_speed":
- {
- "label": "Minimum Speed",
- "description": "The minimum print speed, despite slowing down due to the minimum layer time. When the printer would slow down too much, the pressure in the nozzle would be too low and result in bad print quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_lift_head":
- {
- "label": "Lift Head",
- "description": "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support":
- {
- "label": "Support",
- "type": "category",
- "icon": "category_support",
- "description": "Support",
- "children":
- {
- "support_enable":
- {
- "label": "Generate Support",
- "description": "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_extruder_nr":
- {
- "label": "Support Extruder",
- "description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "defaultExtruderPosition()",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children": {
- "support_infill_extruder_nr":
- {
- "label": "Support Infill Extruder",
- "description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_extruder_nr_layer_0":
- {
- "label": "First Layer Support Extruder",
- "description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_interface_extruder_nr":
- {
- "label": "Support Interface Extruder",
- "description": "The extruder train to use for printing the roofs and floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children":
- {
- "support_roof_extruder_nr":
- {
- "label": "Support Roof Extruder",
- "description": "The extruder train to use for printing the roofs of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_bottom_extruder_nr":
- {
- "label": "Support Floor Extruder",
- "description": "The extruder train to use for printing the floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- }
- }
- },
- "support_type":
- {
- "label": "Support Placement",
- "description": "Adjusts the placement of the support structures. The placement can be set to touching build plate or everywhere. When set to everywhere the support structures will also be printed on the model.",
- "type": "enum",
- "options":
- {
- "buildplate": "Touching Buildplate",
- "everywhere": "Everywhere"
- },
- "default_value": "everywhere",
- "resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else 'buildplate'",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_angle":
- {
- "label": "Support Overhang Angle",
- "description": "The minimum angle of overhangs for which support is added. At a value of 0° all overhangs are supported, 90° will not provide any support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "80",
- "default_value": 50,
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true
- },
- "support_pattern":
- {
- "label": "Support Pattern",
- "description": "The pattern of the support structures of the print. The different options available result in sturdy or easy to remove support.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross"
- },
- "default_value": "zigzag",
- "enabled": "support_enable or support_tree_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_wall_count":
- {
- "label": "Support Wall Line Count",
- "description": "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used.",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "1 if support_pattern == 'concentric' else 0",
- "maximum_value_warning": "3",
- "type": "int",
- "value": "1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0",
- "enabled": "support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "zig_zaggify_support":
- {
- "label": "Connect Support Lines",
- "description": "Connect the ends of the support lines together. Enabling this setting can make your support more sturdy and reduce underextrusion, but it will cost more material.",
- "type": "bool",
- "default_value": false,
- "value": "support_pattern == 'cross'",
- "enabled": "support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_connect_zigzags":
- {
- "label": "Connect Support ZigZags",
- "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "(support_enable or support_tree_enable) and support_pattern == 'zigzag'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_infill_rate":
- {
- "label": "Support Density",
- "description": "Adjusts the density of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 15,
- "value": "15 if support_enable else 0 if support_tree_enable else 15",
- "enabled": "support_enable or support_tree_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_line_distance":
- {
- "label": "Support Line Distance",
- "description": "Distance between the printed support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_tree_enable",
- "value": "0 if support_infill_rate == 0 else (support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_initial_layer_line_distance":
- {
- "label": "Initial Layer Support Line Distance",
- "description": "Distance between the printed initial layer support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_tree_enable",
- "value": "support_line_distance",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_infill_angle":
- {
- "label": "Support Infill Line Direction",
- "description": "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-180",
- "maximum_value": "180",
- "default_value": 0,
- "enabled": "support_enable and support_pattern != 'concentric' and support_infill_rate > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_z_distance":
- {
- "label": "Support Z Distance",
- "description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true,
- "children":
- {
- "support_top_distance":
- {
- "label": "Support Top Distance",
- "description": "Distance from the top of the support to the print.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "type": "float",
- "enabled": "support_enable or support_tree_enable",
- "value": "extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance')",
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_bottom_distance":
- {
- "label": "Support Bottom Distance",
- "description": "Distance from the print to the bottom of the support.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "value": "extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0",
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "type": "float",
- "enabled": "(support_enable or support_tree_enable) and resolveOrValue('support_type') == 'everywhere'",
- "settable_per_mesh": true
- }
- }
- },
- "support_xy_distance":
- {
- "label": "Support X/Y Distance",
- "description": "Distance of the support structure from the print in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "1.5 * machine_nozzle_tip_outer_diameter",
- "default_value": 0.7,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true
- },
- "support_xy_overrides_z":
- {
- "label": "Support Distance Priority",
- "description": "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs.",
- "type": "enum",
- "options":
- {
- "xy_overrides_z": "X/Y overrides Z",
- "z_overrides_xy": "Z overrides X/Y"
- },
- "default_value": "z_overrides_xy",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_xy_distance_overhang":
- {
- "label": "Minimum Support X/Y Distance",
- "description": "Distance of the support structure from the overhang in the X/Y directions. ",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "support_xy_distance",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_xy_overrides_z == 'z_overrides_xy'",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_height":
- {
- "label": "Support Stair Step Height",
- "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures. Set to zero to turn off the stair-like behaviour.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_width":
- {
- "label": "Support Stair Step Maximum Width",
- "description": "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.",
- "unit": "mm",
- "type": "float",
- "default_value": 5.0,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_join_distance":
- {
- "label": "Support Join Distance",
- "description": "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_offset":
- {
- "label": "Support Horizontal Expansion",
- "description": "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.2,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "-1 * machine_nozzle_size",
- "maximum_value_warning": "10 * machine_nozzle_size",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_infill_sparse_thickness":
- {
- "label": "Support Infill Layer Thickness",
- "description": "The thickness per layer of support infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height')",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * 8",
- "value": "resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false
- },
- "gradual_support_infill_steps":
- {
- "label": "Gradual Support Infill Steps",
- "description": "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (support_pattern == 'cross' or support_pattern == 'lines' or support_pattern == 'zigzag' or support_pattern == 'concentric') else 5",
- "maximum_value": "999999 if support_line_distance == 0 else (20 - math.log(support_line_distance) / math.log(2))",
- "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false
- },
- "gradual_support_infill_step_height":
- {
- "label": "Gradual Support Infill Step Height",
- "description": "The height of support infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0 and gradual_support_infill_steps > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false
- },
- "support_interface_enable":
- {
- "label": "Enable Support Interface",
- "description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_enable":
- {
- "label": "Enable Support Roof",
- "description": "Generate a dense slab of material between the top of support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true
- },
- "support_bottom_enable":
- {
- "label": "Enable Support Floor",
- "description": "Generate a dense slab of material between the bottom of the support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_enable or support_tree_enable",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_height":
- {
- "label": "Support Interface Thickness",
- "description": "The thickness of the interface of the support where it touches with the model on the bottom or the top.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + layer_height",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_height":
- {
- "label": "Support Roof Thickness",
- "description": "The thickness of the support roofs. This controls the amount of dense layers at the top of the support on which the model rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + layer_height",
- "maximum_value_warning": "10",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": true
- },
- "support_bottom_height":
- {
- "label": "Support Floor Thickness",
- "description": "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_height')",
- "minimum_value": "0",
- "minimum_value_warning": "min(0.2 + layer_height, support_bottom_stair_step_height)",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_skip_height": {
- "label": "Support Interface Resolution",
- "description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "support_interface_height",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and support_enable",
- "settable_per_mesh": true
- },
- "support_interface_density":
- {
- "label": "Support Interface Density",
- "description": "Adjusts the density of the roofs and floors of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_density":
- {
- "label": "Support Roof Density",
- "description": "The density of the roofs of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_tree_enable)",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_distance":
- {
- "label": "Support Roof Line Distance",
- "description": "Distance between the printed support roof lines. This setting is calculated by the Support Roof Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_roof_line_width - 0.0001",
- "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_bottom_density":
- {
- "label": "Support Floor Density",
- "description": "The density of the floors of the support structure. A higher value results in better adhesion of the support on top of the model.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_tree_enable)",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_bottom_line_distance":
- {
- "label": "Support Floor Line Distance",
- "description": "Distance between the printed support floor lines. This setting is calculated by the Support Floor Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_bottom_line_width - 0.0001",
- "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "support_interface_pattern":
- {
- "label": "Support Interface Pattern",
- "description": "The pattern with which the interface of the support with the model is printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_pattern":
- {
- "label": "Support Roof Pattern",
- "description": "The pattern with which the roofs of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_pattern":
- {
- "label": "Support Floor Pattern",
- "description": "The pattern with which the floors of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_tree_enable)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_fan_enable":
- {
- "label": "Fan Speed Override",
- "description": "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable",
- "settable_per_mesh": false
- },
- "support_supported_skin_fan_speed":
- {
- "label": "Supported Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "support_enable and support_fan_enable",
- "settable_per_mesh": false
- },
- "support_use_towers":
- {
- "label": "Use Towers",
- "description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_tower_diameter":
- {
- "label": "Tower Diameter",
- "description": "The diameter of a special tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "support_enable and support_use_towers",
- "settable_per_mesh": true
- },
- "support_minimal_diameter":
- {
- "label": "Minimum Diameter",
- "description": "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "maximum_value": "support_tower_diameter",
- "enabled": "support_enable and support_use_towers",
- "settable_per_mesh": true
- },
- "support_tower_roof_angle":
- {
- "label": "Tower Roof Angle",
- "description": "The angle of a rooftop of a tower. A higher value results in pointed tower roofs, a lower value results in flattened tower roofs.",
- "unit": "°",
- "type": "int",
- "minimum_value": "0",
- "maximum_value": "90",
- "default_value": 65,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_use_towers",
- "settable_per_mesh": true
- },
- "support_mesh_drop_down":
- {
- "label": "Drop Down Support Mesh",
- "description": "Make support everywhere below the support mesh, so that there's no overhang in the support mesh.",
- "type": "bool",
- "default_value": true,
- "enabled": "support_mesh",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- }
- }
- },
- "platform_adhesion":
- {
- "label": "Build Plate Adhesion",
- "type": "category",
- "icon": "category_adhesion",
- "description": "Adhesion",
- "children":
- {
- "prime_blob_enable":
- {
- "label": "Enable Prime Blob",
- "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.",
- "type": "bool",
- "resolve": "any(extruderValues('prime_blob_enable'))",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "extruder_prime_pos_x":
- {
- "label": "Extruder Prime X Position",
- "description": "The X coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_width / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_width / 2 if machine_center_is_zero else machine_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "extruder_prime_pos_y":
- {
- "label": "Extruder Prime Y Position",
- "description": "The Y coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_depth / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_depth / 2 if machine_center_is_zero else machine_depth",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "adhesion_type":
- {
- "label": "Build Plate Adhesion Type",
- "description": "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model.",
- "type": "enum",
- "options":
- {
- "skirt": "Skirt",
- "brim": "Brim",
- "raft": "Raft",
- "none": "None"
- },
- "default_value": "brim",
- "resolve": "extruderValue(adhesion_extruder_nr, 'adhesion_type')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "adhesion_extruder_nr":
- {
- "label": "Build Plate Adhesion Extruder",
- "description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "defaultExtruderPosition()",
- "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') != 'none'",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "skirt_line_count":
- {
- "label": "Skirt Line Count",
- "description": "Multiple skirt lines help to prime your extrusion better for small models. Setting this to 0 will disable the skirt.",
- "type": "int",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "skirt_gap":
- {
- "label": "Skirt Distance",
- "description": "The horizontal distance between the skirt and the first layer of the print.\nThis is the minimum distance. Multiple skirt lines will extend outwards from this distance.",
- "unit": "mm",
- "type": "float",
- "default_value": 3,
- "minimum_value_warning": "max(extruderValues('machine_nozzle_size'))",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "skirt_brim_minimal_length":
- {
- "label": "Skirt/Brim Minimum Length",
- "description": "The minimum length of the skirt or brim. If this length is not reached by all skirt or brim lines together, more skirt or brim lines will be added until the minimum length is reached. Note: If the line count is set to 0 this is ignored.",
- "unit": "mm",
- "type": "float",
- "default_value": 250,
- "minimum_value": "0",
- "minimum_value_warning": "25",
- "maximum_value_warning": "2500",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "brim_width":
- {
- "label": "Brim Width",
- "description": "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area.",
- "type": "float",
- "unit": "mm",
- "default_value": 8.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "50.0",
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "brim_line_count":
- {
- "label": "Brim Line Count",
- "description": "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area.",
- "type": "int",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50 / skirt_brim_line_width",
- "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "brim_outside_only":
- {
- "label": "Brim Only on Outside",
- "description": "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_margin":
- {
- "label": "Raft Extra Margin",
- "description": "If the raft is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.",
- "unit": "mm",
- "type": "float",
- "default_value": 15,
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_smoothing":
- {
- "label": "Raft Smoothing",
- "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.",
- "unit": "mm",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_airgap":
- {
- "label": "Raft Air Gap",
- "description": "The gap between the final raft layer and the first layer of the model. Only the first layer is raised by this amount to lower the bonding between the raft layer and the model. Makes it easier to peel off the raft.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "min(extruderValues('machine_nozzle_size'))",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "layer_0_z_overlap":
- {
- "label": "Initial Layer Z Overlap",
- "description": "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.22,
- "value": "raft_airgap / 2",
- "minimum_value": "0",
- "maximum_value_warning": "raft_airgap",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_layers":
- {
- "label": "Raft Top Layers",
- "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_thickness":
- {
- "label": "Raft Top Layer Thickness",
- "description": "Layer thickness of the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "value": "resolveOrValue('layer_height')",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_line_width":
- {
- "label": "Raft Top Line Width",
- "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.1",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_line_spacing":
- {
- "label": "Raft Top Spacing",
- "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "raft_surface_line_width",
- "maximum_value_warning": "raft_surface_line_width * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "raft_surface_line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_thickness":
- {
- "label": "Raft Middle Thickness",
- "description": "Layer thickness of the middle raft layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.15,
- "value": "resolveOrValue('layer_height') * 1.5",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_line_width":
- {
- "label": "Raft Middle Line Width",
- "description": "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.7,
- "value": "line_width * 2",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_line_spacing":
- {
- "label": "Raft Middle Spacing",
- "description": "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.9,
- "value": "raft_interface_line_width + 0.2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "15.0",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_thickness":
- {
- "label": "Raft Base Thickness",
- "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "value": "resolveOrValue('layer_height_0') * 1.2",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * raft_base_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_line_width":
- {
- "label": "Raft Base Line Width",
- "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0.001",
- "value": "machine_nozzle_size * 2",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_line_spacing":
- {
- "label": "Raft Base Line Spacing",
- "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.6,
- "value": "raft_base_line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_base_line_width",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_speed":
- {
- "label": "Raft Print Speed",
- "description": "The speed at which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "speed_print / 60 * 30",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_speed":
- {
- "label": "Raft Top Print Speed",
- "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_speed":
- {
- "label": "Raft Middle Print Speed",
- "description": "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "value": "raft_speed * 0.75",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_speed":
- {
- "label": "Raft Base Print Speed",
- "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "0.75 * raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_acceleration":
- {
- "label": "Raft Print Acceleration",
- "description": "The acceleration with which the raft is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_acceleration":
- {
- "label": "Raft Top Print Acceleration",
- "description": "The acceleration with which the top raft layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_acceleration":
- {
- "label": "Raft Middle Print Acceleration",
- "description": "The acceleration with which the middle raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_acceleration":
- {
- "label": "Raft Base Print Acceleration",
- "description": "The acceleration with which the base raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_jerk":
- {
- "label": "Raft Print Jerk",
- "description": "The jerk with which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "value": "jerk_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_jerk":
- {
- "label": "Raft Top Print Jerk",
- "description": "The jerk with which the top raft layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_jerk":
- {
- "label": "Raft Middle Print Jerk",
- "description": "The jerk with which the middle raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_jerk":
- {
- "label": "Raft Base Print Jerk",
- "description": "The jerk with which the base raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_fan_speed":
- {
- "label": "Raft Fan Speed",
- "description": "The fan speed for the raft.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_fan_speed":
- {
- "label": "Raft Top Fan Speed",
- "description": "The fan speed for the top raft layers.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_fan_speed":
- {
- "label": "Raft Middle Fan Speed",
- "description": "The fan speed for the middle raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_fan_speed":
- {
- "label": "Raft Base Fan Speed",
- "description": "The fan speed for the base raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- }
- }
- },
- "dual":
- {
- "label": "Dual Extrusion",
- "type": "category",
- "icon": "category_dual",
- "description": "Settings used for printing with multiple extruders.",
- "children":
- {
- "prime_tower_enable":
- {
- "label": "Enable Prime Tower",
- "description": "Print a tower next to the print which serves to prime the material after each nozzle switch.",
- "type": "bool",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "resolve": "any(extruderValues('prime_tower_enable'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_circular":
- {
- "label": "Circular Prime Tower",
- "description": "Make the prime tower as a circular shape.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": true,
- "resolve": "any(extruderValues('prime_tower_circular'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_size":
- {
- "label": "Prime Tower Size",
- "description": "The width of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 20,
- "resolve": "max(extruderValues('prime_tower_size'))",
- "minimum_value": "0",
- "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
- "minimum_value_warning": "max(extruderValues('prime_tower_line_width')) * 2",
- "maximum_value_warning": "20",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_min_volume":
- {
- "label": "Prime Tower Minimum Volume",
- "description": "The minimum volume for each layer of the prime tower in order to purge enough material.",
- "unit": "mm³",
- "type": "float",
- "default_value": 6,
- "minimum_value": "0",
- "maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') if prime_tower_circular else resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')) - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_position_x":
- {
- "label": "Prime Tower X Position",
- "description": "The x coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1",
- "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width",
- "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_position_y":
- {
- "label": "Prime Tower Y Position",
- "description": "The y coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1",
- "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')",
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_flow":
- {
- "label": "Prime Tower Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value.",
- "type": "float",
- "unit": "%",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_wipe_enabled":
- {
- "label": "Wipe Inactive Nozzle on Prime Tower",
- "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "ooze_shield_enabled":
- {
- "label": "Enable Ooze Shield",
- "description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.",
- "type": "bool",
- "resolve": "any(extruderValues('ooze_shield_enabled'))",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_angle":
- {
- "label": "Ooze Shield Angle",
- "description": "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material.",
- "type": "float",
- "unit": "°",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 60,
- "resolve": "min(extruderValues('ooze_shield_angle'))",
- "minimum_value": "0",
- "maximum_value": "90",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_dist":
- {
- "label": "Ooze Shield Distance",
- "description": "Distance of the ooze shield from the print, in the X/Y directions.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 2,
- "resolve": "max(extruderValues('ooze_shield_dist'))",
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "meshfix":
- {
- "label": "Mesh Fixes",
- "type": "category",
- "icon": "category_fixes",
- "description": "category_fixes",
- "children":
- {
- "meshfix_union_all":
- {
- "label": "Union Overlapping Volumes",
- "description": "Ignore the internal geometry arising from overlapping volumes within a mesh and print the volumes as one. This may cause unintended internal cavities to disappear.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": true
- },
- "meshfix_union_all_remove_holes":
- {
- "label": "Remove All Holes",
- "description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "meshfix_extensive_stitching":
- {
- "label": "Extensive Stitching",
- "description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "meshfix_keep_open_polygons":
- {
- "label": "Keep Disconnected Faces",
- "description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper g-code.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "multiple_mesh_overlap":
- {
- "label": "Merged Meshes Overlap",
- "description": "Make meshes which are touching each other overlap a bit. This makes them bond together better.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.15,
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "carve_multiple_volumes":
- {
- "label": "Remove Mesh Intersection",
- "description": "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other.",
- "type": "bool",
- "default_value": true,
- "value": "extruders_enabled_count > 1",
- "enabled": "all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "alternate_carve_order":
- {
- "label": "Alternate Mesh Removal",
- "description": "Switch to which mesh intersecting volumes will belong with every layer, so that the overlapping meshes become interwoven. Turning this setting off will cause one of the meshes to obtain all of the volume in the overlap, while it is removed from the other meshes.",
- "type": "bool",
- "default_value": true,
- "enabled": "carve_multiple_volumes and all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "remove_empty_first_layers":
- {
- "label": "Remove Empty First Layers",
- "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.",
- "type": "bool",
- "default_value": true,
- "enabled": "not support_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "blackmagic":
- {
- "label": "Special Modes",
- "type": "category",
- "icon": "category_blackmagic",
- "description": "category_blackmagic",
- "children":
- {
- "print_sequence":
- {
- "label": "Print Sequence",
- "description": "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
- "type": "enum",
- "options":
- {
- "all_at_once": "All at Once",
- "one_at_a_time": "One at a Time"
- },
- "default_value": "all_at_once",
- "enabled": "extruders_enabled_count == 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "infill_mesh":
- {
- "label": "Infill Mesh",
- "description": "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "infill_mesh_order":
- {
- "label": "Infill Mesh Order",
- "description": "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes.",
- "default_value": 0,
- "value": "1 if infill_mesh else 0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "50",
- "type": "int",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "cutting_mesh":
- {
- "label": "Cutting Mesh",
- "description": "Limit the volume of this mesh to within other meshes. You can use this to make certain areas of one mesh print with different settings and with a whole different extruder.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "mold_enabled":
- {
- "label": "Mold",
- "description": "Print models as a mold, which can be cast in order to get a model which resembles the models on the build plate.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "mold_width":
- {
- "label": "Minimal Mold Width",
- "description": "The minimal distance between the ouside of the mold and the outside of the model.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "wall_line_width_0 * 2",
- "maximum_value_warning": "100",
- "default_value": 5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_roof_height":
- {
- "label": "Mold Roof Height",
- "description": "The height above horizontal parts in your model which to print mold.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "5",
- "default_value": 0.5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_angle":
- {
- "label": "Mold Angle",
- "description": "The angle of overhang of the outer walls created for the mold. 0° will make the outer shell of the mold vertical, while 90° will make the outside of the model follow the contour of the model.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value_warning": "support_angle",
- "maximum_value": "90",
- "default_value": 40,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "support_mesh":
- {
- "label": "Support Mesh",
- "description": "Use this mesh to specify support areas. This can be used to generate support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "anti_overhang_mesh":
- {
- "label": "Anti Overhang Mesh",
- "description": "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "magic_mesh_surface_mode":
- {
- "label": "Surface Mode",
- "description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.",
- "type": "enum",
- "options":
- {
- "normal": "Normal",
- "surface": "Surface",
- "both": "Both"
- },
- "default_value": "normal",
- "settable_per_mesh": true
- },
- "magic_spiralize":
- {
- "label": "Spiralize Outer Contour",
- "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature should only be enabled when each layer only contains a single part.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "smooth_spiralized_contours":
- {
- "label": "Smooth Spiralized Contours",
- "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.",
- "type": "bool",
- "default_value": true,
- "enabled": "magic_spiralize",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "relative_extrusion":
- {
- "label": "Relative Extrusion",
- "description": "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the g-code. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any g-code script is output.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor==\"RepRap (RepRap)\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "experimental":
- {
- "label": "Experimental",
- "type": "category",
- "icon": "category_experimental",
- "description": "experimental!",
- "children":
- {
- "support_tree_enable":
- {
- "label": "Tree Support",
- "description": "Generate a tree-like support with branches that support your print. This may reduce material usage and print time, but greatly increases slicing time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_tree_angle":
- {
- "label": "Tree Support Branch Angle",
- "description": "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "60",
- "default_value": 40,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_distance":
- {
- "label": "Tree Support Branch Distance",
- "description": "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "default_value": 1,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": true
- },
- "support_tree_branch_diameter":
- {
- "label": "Tree Support Branch Diameter",
- "description": "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width * 2",
- "default_value": 2,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_diameter_angle":
- {
- "label": "Tree Support Branch Diameter Angle",
- "description": "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "89.9999",
- "maximum_value_warning": "15",
- "default_value": 5,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_collision_resolution":
- {
- "label": "Tree Support Collision Resolution",
- "description": "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width / 4",
- "maximum_value_warning": "support_line_width * 2",
- "default_value": 0.4,
- "value": "support_line_width / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable and support_tree_branch_diameter_angle > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_wall_thickness":
- {
- "label": "Tree Support Wall Thickness",
- "description": "The thickness of the walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "wall_line_width",
- "default_value": 0.8,
- "value": "support_line_width",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_tree_wall_count":
- {
- "label": "Tree Support Wall Line Count",
- "description": "The number of walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.",
- "type": "int",
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "default_value": 1,
- "value": "round(support_tree_wall_thickness / support_line_width)",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_tree_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "slicing_tolerance":
- {
- "label": "Slicing Tolerance",
- "description": "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process.",
- "type": "enum",
- "options":
- {
- "middle": "Middle",
- "exclusive": "Exclusive",
- "inclusive": "Inclusive"
- },
- "default_value": "middle",
- "settable_per_mesh": true
- },
- "roofing_line_width":
- {
- "label": "Top Surface Skin Line Width",
- "description": "Width of a single line of the areas at the top of the print.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "skin_line_width",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_pattern":
- {
- "label": "Top Surface Skin Pattern",
- "description": "The pattern of the top most layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_angles":
- {
- "label": "Top Surface Skin Line Directions",
- "description": "A list of integer line directions to use when the top surface skin layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "skin_angles",
- "enabled": "roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_enable_travel_optimization":
- {
- "label": "Infill Travel Optimization",
- "description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "material_flow_dependent_temperature":
- {
- "label": "Auto Temperature",
- "description": "Change the temperature for each layer automatically with the average flow speed of that layer.",
- "type": "bool",
- "default_value": false,
- "enabled": "machine_nozzle_temp_enabled and False",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flow_temp_graph":
- {
- "label": "Flow Temperature Graph",
- "description": "Data linking material flow (in mm3 per second) to temperature (degrees Celsius).",
- "unit": "[[mm³,°C]]",
- "type": "str",
- "default_value": "[[3.5,200],[7.0,240]]",
- "enabled": "False and machine_nozzle_temp_enabled and material_flow_dependent_temperature",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "minimum_polygon_circumference":
- {
- "label": "Minimum Polygon Circumference",
- "description": "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.0,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.05",
- "maximum_value_warning": "1.0",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "meshfix_maximum_resolution":
- {
- "label": "Maximum Resolution",
- "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.01,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.005",
- "maximum_value_warning": "0.1",
- "settable_per_mesh": true
- },
- "meshfix_maximum_travel_resolution":
- {
- "label": "Maximum Travel Resolution",
- "description": "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.02,
- "value": "meshfix_maximum_resolution * speed_travel / speed_print",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.005",
- "maximum_value_warning": "1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_skip_some_zags":
- {
- "label": "Break Up Support In Chunks",
- "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable and (support_pattern == 'zigzag')",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_skip_zag_per_mm":
- {
- "label": "Support Chunk Size",
- "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.",
- "type": "float",
- "unit": "mm",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "support_line_distance",
- "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_zag_skip_count":
- {
- "label": "Support Chunk Line Count",
- "description": "Skip one in every N connection lines to make the support structure easier to break away.",
- "type": "int",
- "default_value": 5,
- "value": "0 if support_line_distance == 0 else round(support_skip_zag_per_mm / support_line_distance)",
- "minimum_value": "1",
- "minimum_value_warning": "3",
- "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "draft_shield_enabled":
- {
- "label": "Enable Draft Shield",
- "description": "This will create a wall around the model, which traps (hot) air and shields against exterior airflow. Especially useful for materials which warp easily.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_dist":
- {
- "label": "Draft Shield X/Y Distance",
- "description": "Distance of the draft shield from the print, in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 10,
- "resolve": "max(extruderValues('draft_shield_dist'))",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height_limitation":
- {
- "label": "Draft Shield Limitation",
- "description": "Set the height of the draft shield. Choose to print the draft shield at the full height of the model or at a limited height.",
- "type": "enum",
- "options":
- {
- "full": "Full",
- "limited": "Limited"
- },
- "default_value": "full",
- "resolve": "'full' if 'full' in extruderValues('draft_shield_height_limitation') else 'limited'",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height":
- {
- "label": "Draft Shield Height",
- "description": "Height limitation of the draft shield. Above this height no draft shield will be printed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "9999",
- "default_value": 10,
- "value": "10",
- "enabled": "draft_shield_enabled and draft_shield_height_limitation == 'limited'",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "conical_overhang_enabled":
- {
- "label": "Make Overhang Printable",
- "description": "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical.",
- "type": "bool",
- "default_value": false
- },
- "conical_overhang_angle":
- {
- "label": "Maximum Model Angle",
- "description": "The maximum angle of overhangs after the they have been made printable. At a value of 0° all overhangs are replaced by a piece of model connected to the build plate, 90° will not change the model in any way.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value": "89",
- "default_value": 50,
- "enabled": "conical_overhang_enabled"
- },
- "coasting_enable":
- {
- "label": "Enable Coasting",
- "description": "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to print the last piece of the extrusion path in order to reduce stringing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_volume":
- {
- "label": "Coasting Volume",
- "description": "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.064,
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 5",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_min_volume":
- {
- "label": "Minimum Volume Before Coasting",
- "description": "The smallest volume an extrusion path should have before allowing coasting. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_speed":
- {
- "label": "Coasting Speed",
- "description": "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops.",
- "unit": "%",
- "type": "float",
- "default_value": 90,
- "minimum_value": "0.0001",
- "maximum_value_warning": "100",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "skin_alternate_rotation":
- {
- "label": "Alternate Skin Rotation",
- "description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.",
- "type": "bool",
- "default_value": false,
- "enabled": "top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_infill_pocket_size":
- {
- "label": "Cross 3D Pocket Size",
- "description": "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "value": "infill_line_distance",
- "minimum_value": "0",
- "maximum_value_warning": "infill_line_distance * math.sqrt(2)",
- "enabled": "infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_infill_density_image":
- {
- "label": "Cross Infill Density Image",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the infill of the print.",
- "type": "str",
- "default_value": "",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_support_density_image":
- {
- "label": "Cross Fill Density Image for Support",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support.",
- "type": "str",
- "default_value": "",
- "enabled": "support_pattern == 'cross' or support_pattern == 'cross_3d'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "spaghetti_infill_enabled":
- {
- "label": "Spaghetti Infill",
- "description": "Print the infill every so often, so that the filament will curl up chaotically inside the object. This reduces print time, but the behaviour is rather unpredictable.",
- "type": "bool",
- "default_value": false,
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_infill_stepped":
- {
- "label": "Spaghetti Infill Stepping",
- "description": "Whether to print spaghetti infill in steps or extrude all the infill filament at the end of the print.",
- "type": "bool",
- "default_value": true,
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_max_infill_angle":
- {
- "label": "Spaghetti Maximum Infill Angle",
- "description": "The maximum angle w.r.t. the Z axis of the inside of the print for areas which are to be filled with spaghetti infill afterwards. Lowering this value causes more angled parts in your model to be filled on each layer.",
- "unit": "°",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "45",
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled and spaghetti_infill_stepped",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_max_height":
- {
- "label": "Spaghetti Infill Maximum Height",
- "description": "The maximum height of inside space which can be combined and filled from the top.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "minimum_value": "layer_height",
- "maximum_value_warning": "10.0",
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled and spaghetti_infill_stepped",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_inset":
- {
- "label": "Spaghetti Inset",
- "description": "The offset from the walls from where the spaghetti infill will be printed.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.2,
- "minimum_value_warning": "0",
- "maximum_value_warning": "5.0",
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_flow":
- {
- "label": "Spaghetti Flow",
- "description": "Adjusts the density of the spaghetti infill. Note that the Infill Density only controls the line spacing of the filling pattern, not the amount of extrusion for spaghetti infill.",
- "unit": "%",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "spaghetti_infill_extra_volume":
- {
- "label": "Spaghetti Infill Extra Volume",
- "description": "A correction term to adjust the total volume being extruded each time when filling spaghetti.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_enabled":
- {
- "label": "Enable Conical Support",
- "description": "Experimental feature: Make support areas smaller at the bottom than at the overhang.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_angle":
- {
- "label": "Conical Support Angle",
- "description": "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-90",
- "minimum_value_warning": "-45",
- "maximum_value_warning": "45",
- "maximum_value": "90",
- "default_value": 30,
- "enabled": "support_conical_enabled and support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_min_width":
- {
- "label": "Conical Support Minimum Width",
- "description": "Minimum width to which the base of the conical support area is reduced. Small widths can lead to unstable support structures.",
- "unit": "mm",
- "default_value": 5.0,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size * 3",
- "maximum_value_warning": "100.0",
- "type": "float",
- "enabled": "support_conical_enabled and support_enable",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_enabled":
- {
- "label": "Fuzzy Skin",
- "description": "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_thickness":
- {
- "label": "Fuzzy Skin Thickness",
- "description": "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0.001",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_point_density":
- {
- "label": "Fuzzy Skin Density",
- "description": "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution.",
- "type": "float",
- "unit": "1/mm",
- "default_value": 1.25,
- "minimum_value": "0.008",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "maximum_value": "2 / magic_fuzzy_skin_thickness",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "magic_fuzzy_skin_point_dist":
- {
- "label": "Fuzzy Skin Point Distance",
- "description": "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "magic_fuzzy_skin_thickness / 2",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "value": "10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "flow_rate_max_extrusion_offset":
- {
- "label": "Flow rate compensation max extrusion offset",
- "description": "The maximum distance in mm to compensate.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 0,
- "value": "0",
- "enabled": true,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "flow_rate_extrusion_offset_factor":
- {
- "label": "Flow rate compensation factor",
- "description": "The multiplication factor for the flow rate -> distance translation.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 100,
- "value": "100",
- "enabled": true,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_enabled":
- {
- "label": "Wire Printing",
- "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_height":
- {
- "label": "WP Connection Height",
- "description": "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "value": "machine_nozzle_head_distance",
- "minimum_value": "0.0001",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_inset":
- {
- "label": "WP Roof Inset Distance",
- "description": "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "value": "wireframe_height",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed":
- {
- "label": "WP Speed",
- "description": "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_printspeed_bottom":
- {
- "label": "WP Bottom Printing Speed",
- "description": "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_up":
- {
- "label": "WP Upward Printing Speed",
- "description": "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_down":
- {
- "label": "WP Downward Printing Speed",
- "description": "Speed of printing a line diagonally downward. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_flat":
- {
- "label": "WP Horizontal Printing Speed",
- "description": "Speed of printing the horizontal contours of the model. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "value": "wireframe_printspeed",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_flow":
- {
- "label": "WP Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_flow_connection":
- {
- "label": "WP Connection Flow",
- "description": "Flow compensation when going up or down. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flow_flat":
- {
- "label": "WP Flat Flow",
- "description": "Flow compensation when printing flat lines. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_top_delay":
- {
- "label": "WP Top Delay",
- "description": "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_bottom_delay":
- {
- "label": "WP Bottom Delay",
- "description": "Delay time after a downward move. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flat_delay":
- {
- "label": "WP Flat Delay",
- "description": "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0",
- "maximum_value_warning": "0.5",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_up_half_speed":
- {
- "label": "WP Ease Upward",
- "description": "Distance of an upward move which is extruded with half speed.\nThis can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "5.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_top_jump":
- {
- "label": "WP Knot Size",
- "description": "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_fall_down":
- {
- "label": "WP Fall Down",
- "description": "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_drag_along":
- {
- "label": "WP Drag Along",
- "description": "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_strategy":
- {
- "label": "WP Strategy",
- "description": "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted.",
- "type": "enum",
- "options":
- {
- "compensate": "Compensate",
- "knot": "Knot",
- "retract": "Retract"
- },
- "default_value": "compensate",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_straight_before_down":
- {
- "label": "WP Straighten Downward Lines",
- "description": "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing.",
- "type": "float",
- "unit": "%",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_fall_down":
- {
- "label": "WP Roof Fall Down",
- "description": "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 2,
- "minimum_value_warning": "0",
- "maximum_value_warning": "wireframe_roof_inset",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_drag_along":
- {
- "label": "WP Roof Drag Along",
- "description": "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_outer_delay":
- {
- "label": "WP Roof Outer Delay",
- "description": "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing.",
- "type": "float",
- "unit": "s",
- "default_value": 0.2,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_nozzle_clearance":
- {
- "label": "WP Nozzle Clearance",
- "description": "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_enabled":
- {
- "label": "Use adaptive layers",
- "description": "Adaptive layers computes the layer heights depending on the shape of the model.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation":
- {
- "label": "Adaptive layers maximum variation",
- "description": "The maximum allowed height different from the base layer height.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "unit": "mm",
- "default_value": 0.1,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation_step":
- {
- "label": "Adaptive layers variation step size",
- "description": "The difference in height of the next layer height compared to the previous one.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 0.01,
- "unit": "mm",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_threshold":
- {
- "label": "Adaptive layers threshold",
- "description": "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 200.0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wall_overhang_angle":
- {
- "label": "Overhanging Wall Angle",
- "description": "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "settable_per_mesh": true
- },
- "wall_overhang_speed_factor":
- {
- "label": "Overhanging Wall Speed",
- "description": "Overhanging walls will be printed at this percentage of their normal print speed.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "10",
- "minimum_value_warning": "25",
- "maximum_value": "100",
- "settable_per_mesh": true
- },
- "bridge_settings_enabled":
- {
- "label": "Enable Bridge Settings",
- "description": "Detect bridges and modify print speed, flow and fan settings while bridges are printed.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "bridge_wall_min_length":
- {
- "label": "Minimum Bridge Wall Length",
- "description": "Unsupported walls shorter than this will be printed using the normal wall settings. Longer unsupported walls will be printed using the bridge wall settings.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 5,
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "bridge_skin_support_threshold":
- {
- "label": "Bridge Skin Support Threshold",
- "description": "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_coast":
- {
- "label": "Bridge Wall Coasting",
- "description": "This controls the distance the extruder should coast immediately before a bridge wall begins. Coasting before the bridge starts can reduce the pressure in the nozzle and may produce a flatter bridge.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "500",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_speed":
- {
- "label": "Bridge Wall Speed",
- "description": "The speed at which the bridge walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_wall_0 / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_material_flow":
- {
- "label": "Bridge Wall Flow",
- "description": "When printing bridge walls, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed":
- {
- "label": "Bridge Skin Speed",
- "description": "The speed at which bridge skin regions are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_topbottom / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow":
- {
- "label": "Bridge Skin Flow",
- "description": "When printing bridge skin regions, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 60,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_density":
- {
- "label": "Bridge Skin Density",
- "description": "The density of the bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_fan_speed":
- {
- "label": "Bridge Fan Speed",
- "description": "Percentage fan speed to use when printing bridge walls and skin.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_enable_more_layers":
- {
- "label": "Bridge Has Multiple Layers",
- "description": "If enabled, the second and third layers above the air are printed using the following settings. Otherwise, those layers are printed using the normal settings.",
- "type": "bool",
- "default_value": true,
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_2":
- {
- "label": "Bridge Second Skin Speed",
- "description": "Print speed to use when printing the second bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 25,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_2":
- {
- "label": "Bridge Second Skin Flow",
- "description": "When printing the second bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "500",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_2":
- {
- "label": "Bridge Second Skin Density",
- "description": "The density of the second bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 75,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_2":
- {
- "label": "Bridge Second Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the second bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_3":
- {
- "label": "Bridge Third Skin Speed",
- "description": "Print speed to use when printing the third bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_3":
- {
- "label": "Bridge Third Skin Flow",
- "description": "When printing the third bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 110,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "500",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_3":
- {
- "label": "Bridge Third Skin Density",
- "description": "The density of the third bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 80,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_3":
- {
- "label": "Bridge Third Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the third bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- }
- }
- },
- "command_line_settings": {
- "label": "Command Line Settings",
- "description": "Settings which are only used if CuraEngine isn't called from the Cura frontend.",
- "type": "category",
- "enabled": false,
- "children": {
- "center_object": {
- "description": "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved.",
- "type": "bool",
- "label": "Center Object",
- "default_value": false,
- "enabled": false
- },
- "mesh_position_x": {
- "description": "Offset applied to the object in the x direction.",
- "type": "float",
- "label": "Mesh Position X",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_y": {
- "description": "Offset applied to the object in the y direction.",
- "type": "float",
- "label": "Mesh Position Y",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_z": {
- "description": "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'.",
- "type": "float",
- "label": "Mesh Position Z",
- "default_value": 0,
- "enabled": false
- },
- "mesh_rotation_matrix": {
- "label": "Mesh Rotation Matrix",
- "description": "Transformation matrix to be applied to the model when loading it from file.",
- "type": "str",
- "default_value": "[[1,0,0], [0,1,0], [0,0,1]]",
- "enabled": false
- }
- }
- }
- }
-}
diff --git a/software/Print3r/settings/slicer/cura/map.ini b/software/Print3r/settings/slicer/cura/map.ini
deleted file mode 100644
index f3b43753..00000000
--- a/software/Print3r/settings/slicer/cura/map.ini
+++ /dev/null
@@ -1,48 +0,0 @@
-infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-machine_nozzle_diameter=$nozzle_diameter
-machine_material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-initial_bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_length
-machine_start_gcode=$start_gcode
-machine_end_gcode=$end_gcode
-retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-speed_print_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-line_width=$nozzle_diameter
-infill_line_width=$nozzle_diameter
-prime_tower_line_width=$nozzle_diameter
-raft_surface_line_width=$nozzle_diameter
-roofing_line_width=$nozzle_diameter
-skin_line_width=$nozzle_diameter
-skirt_brim_line_width=$nozzle_diameter
-support_bottom_line_width=$nozzle_diameter
-support_interface_line_width=$nozzle_diameter
-support_line_width=$nozzle_diameter
-support_roof_line_width=$nozzle_diameter
-wall_line_width_0=$nozzle_diameter
-wall_line_width=$nozzle_diameter
-wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-material_print_temperature=$temperature
-material_print_bed_temperature=$bed_temperature
-material_bed_temperature_layer_0=$bed_temperature
-material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-speed_print=$print_speed
-speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:40}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-brim_line_count=$brims
-skirt_line_count=$skirts
-raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/cura4/base.ini b/software/Print3r/settings/slicer/cura4/base.ini
deleted file mode 100644
index 7ef6e53a..00000000
--- a/software/Print3r/settings/slicer/cura4/base.ini
+++ /dev/null
@@ -1,531 +0,0 @@
-acceleration_enabled="False"
-acceleration_infill="3000"
-acceleration_ironing="3000"
-acceleration_layer_0="3000"
-acceleration_prime_tower="3000"
-acceleration_print="3000"
-acceleration_print_layer_0="3000"
-acceleration_roofing="3000"
-acceleration_skirt_brim="3000"
-acceleration_support="3000"
-acceleration_support_bottom="3000"
-acceleration_support_infill="3000"
-acceleration_support_interface="3000"
-acceleration_support_roof="3000"
-acceleration_topbottom="3000"
-acceleration_travel="5000"
-acceleration_travel_layer_0="5000.0"
-acceleration_wall="3000"
-acceleration_wall_0="3000"
-acceleration_wall_x="3000"
-adaptive_layer_height_enabled="False"
-adaptive_layer_height_threshold="200.0"
-adaptive_layer_height_variation="0.1"
-adaptive_layer_height_variation_step="0.01"
-adhesion_extruder_nr="0"
-adhesion_type="skirt"
-alternate_carve_order="True"
-alternate_extra_perimeter="False"
-anti_overhang_mesh="False"
-blackmagic="0"
-bottom_layers="2"
-bottom_skin_expand_distance="1.0"
-bottom_skin_preshrink="1.0"
-bottom_thickness="0.8"
-bridge_enable_more_layers="True"
-bridge_fan_speed="100"
-bridge_fan_speed_2="0"
-bridge_fan_speed_3="0"
-bridge_settings_enabled="False"
-bridge_skin_density="100"
-bridge_skin_density_2="75"
-bridge_skin_density_3="80"
-bridge_skin_material_flow="60"
-bridge_skin_material_flow_2="100"
-bridge_skin_material_flow_3="110"
-bridge_skin_speed="15.0"
-bridge_skin_speed_2="15.0"
-bridge_skin_speed_3="15.0"
-bridge_skin_support_threshold="50"
-bridge_wall_coast="100"
-bridge_wall_material_flow="50"
-bridge_wall_min_length="5"
-bridge_wall_speed="15.0"
-brim_line_count="20"
-brim_outside_only="True"
-brim_width="8.0"
-carve_multiple_volumes="False"
-center_object="False"
-coasting_enable="False"
-coasting_min_volume="0.8"
-coasting_speed="90"
-coasting_volume="0.064"
-command_line_settings="0"
-conical_overhang_angle="50"
-conical_overhang_enabled="False"
-connect_infill_polygons="False"
-connect_skin_polygons="False"
-cool_fan_enabled="True"
-cool_fan_full_at_height="0.35"
-cool_fan_full_layer="2"
-cool_fan_speed="100.0"
-cool_fan_speed_0="0"
-cool_fan_speed_max="100.0"
-cool_fan_speed_min="100.0"
-cool_lift_head="False"
-cool_min_layer_time="5"
-cool_min_layer_time_fan_speed_max="10"
-cool_min_speed="10"
-cooling="0"
-cross_infill_pocket_size="4.0"
-cutting_mesh="False"
-date="14-10-2018"
-day="Sun"
-default_material_bed_temperature="60"
-default_material_print_temperature="210"
-draft_shield_dist="10"
-draft_shield_enabled="False"
-draft_shield_height="10"
-draft_shield_height_limitation="full"
-dual="0"
-expand_skins_expand_distance="1.0"
-experimental="0"
-extruder_nr="0"
-extruder_prime_pos_abs="False"
-extruder_prime_pos_x="0"
-extruder_prime_pos_y="0"
-extruder_prime_pos_z="0"
-extruders_enabled_count="1"
-fill_outline_gaps="False"
-fill_perimeter_gaps="everywhere"
-filter_out_tiny_gaps="True"
-flow_rate_extrusion_offset_factor="100"
-flow_rate_max_extrusion_offset="0"
-gantry_height="55"
-gradual_infill_step_height="1.5"
-gradual_infill_steps="0"
-gradual_support_infill_step_height="1"
-gradual_support_infill_steps="0"
-infill="0"
-infill_angles="[ ]"
-infill_before_walls="True"
-infill_enable_travel_optimization="False"
-infill_extruder_nr="-1"
-infill_line_distance="4.0"
-infill_line_width="0.5"
-infill_mesh="False"
-infill_mesh_order="0"
-infill_multiplier="1"
-infill_offset_x="0"
-infill_offset_y="0"
-infill_overlap="10"
-infill_overlap_mm="0.05"
-infill_pattern="grid"
-infill_sparse_density="20"
-infill_sparse_thickness="0.4"
-infill_support_angle="40"
-infill_support_enabled="False"
-infill_wall_line_count="0"
-infill_wipe_dist="0.125"
-initial_extruder_nr="0"
-initial_layer_line_width_factor="100.0"
-ironing_enabled="False"
-ironing_flow="10.0"
-ironing_inset="0.25"
-ironing_line_spacing="0.1"
-ironing_only_highest_layer="False"
-ironing_pattern="zigzag"
-jerk_enabled="False"
-jerk_infill="20"
-jerk_ironing="20"
-jerk_layer_0="20"
-jerk_prime_tower="20"
-jerk_print="20"
-jerk_print_layer_0="20"
-jerk_roofing="20"
-jerk_skirt_brim="20"
-jerk_support="20"
-jerk_support_bottom="20"
-jerk_support_infill="20"
-jerk_support_interface="20"
-jerk_support_roof="20"
-jerk_topbottom="20"
-jerk_travel="30"
-jerk_travel_layer_0="30.0"
-jerk_wall="20"
-jerk_wall_0="20"
-jerk_wall_x="20"
-layer_0_z_overlap="0.15"
-layer_height="0.4"
-layer_height_0="0.35"
-layer_start_x="0.0"
-layer_start_y="0.0"
-limit_support_retractions="True"
-line_width="0.5"
-machine_acceleration="4000"
-machine_buildplate_type="glass"
-machine_center_is_zero="False"
-machine_depth="200"
-machine_disallowed_areas="[]"
-machine_end_gcode="M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n;G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG28 X0\nG90\nG1 Y290 F9000\nM84 ;steppers off\nG90 ;absolute positioning"
-machine_endstop_positive_direction_x="False"
-machine_endstop_positive_direction_y="False"
-machine_endstop_positive_direction_z="True"
-machine_extruder_count="1"
-machine_extruder_cooling_fan_number="0"
-machine_extruder_end_pos_abs="False"
-machine_extruder_end_pos_x="0"
-machine_extruder_end_pos_y="0"
-machine_extruder_start_pos_abs="False"
-machine_extruder_start_pos_x="0"
-machine_extruder_start_pos_y="0"
-machine_feeder_wheel_diameter="10.0"
-machine_filament_park_distance="16"
-machine_firmware_retract="False"
-machine_gcode_flavor="RepRap (Marlin/Sprinter)"
-machine_head_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_head_with_fans_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_heat_zone_length="16"
-machine_heated_bed="True"
-machine_height="210"
-machine_max_acceleration_e="10000"
-machine_max_acceleration_x="9000"
-machine_max_acceleration_y="9000"
-machine_max_acceleration_z="100"
-machine_max_feedrate_e="299792458000"
-machine_max_feedrate_x="500"
-machine_max_feedrate_y="500"
-machine_max_feedrate_z="5"
-machine_max_jerk_e="5.0"
-machine_max_jerk_xy="20.0"
-machine_max_jerk_z="0.4"
-machine_min_cool_heat_time_window="50.0"
-machine_minimum_feedrate="0.0"
-machine_name="Prusa i3"
-machine_nozzle_cool_down_speed="2.0"
-machine_nozzle_expansion_angle="45"
-machine_nozzle_head_distance="3"
-machine_nozzle_heat_up_speed="2.0"
-machine_nozzle_id="unknown"
-machine_nozzle_offset_x="0"
-machine_nozzle_offset_y="0"
-machine_nozzle_size="0.5"
-machine_nozzle_temp_enabled="True"
-machine_nozzle_tip_outer_diameter="1"
-machine_settings="0"
-machine_shape="rectangular"
-machine_show_variants="False"
-machine_start_gcode="G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM206 X0 Y0\n;M92 X100 Y100 E95 ; metal 16 teeth pulley\n;M92 Z3200; M6 z-axis\n;G1 Z15; move up\nG28 X0 Y0 ;move X/Y to min endstops\nG1 X40; move away to avoid crashing into bed mount\nG28 Z0 ;move Z to min endstops\n;G1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X10.0 E9.0 F1000.0 ; intro line\nG1 X60.0 E21.5 F1000.0 ; intro line\nG1 X20.0 E30.0 F1000\nG92 E0 ;zero the extruded length again\n;G1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
-machine_steps_per_mm_e="1600"
-machine_steps_per_mm_x="50"
-machine_steps_per_mm_y="50"
-machine_steps_per_mm_z="50"
-machine_use_extruder_offset_to_offset_coords="True"
-machine_width="210"
-magic_fuzzy_skin_enabled="False"
-magic_fuzzy_skin_point_density="1.25"
-magic_fuzzy_skin_point_dist="0.8"
-magic_fuzzy_skin_thickness="0.3"
-magic_mesh_surface_mode="normal"
-magic_spiralize="False"
-material="0"
-material_adhesion_tendency="10"
-material_bed_temp_prepend="True"
-material_bed_temp_wait="True"
-material_bed_temperature="0"
-material_bed_temperature_layer_0="0"
-material_diameter="1.75"
-material_extrusion_cool_down_speed="0.7"
-material_final_print_temperature="195"
-material_flow="100"
-material_flow_dependent_temperature="False"
-material_flow_layer_0="100"
-material_flow_temp_graph="[[3.5,200],[7.0,240]]"
-material_guid="0ff92885-617b-4144-a03c-9989872454bc"
-material_initial_print_temperature="200"
-material_print_temp_prepend="True"
-material_print_temp_wait="True"
-material_print_temperature="210"
-material_print_temperature_layer_0="210"
-material_shrinkage_percentage="0"
-material_standby_temperature="175"
-material_surface_energy="100"
-max_feedrate_z_override="0"
-max_skin_angle_for_expansion="90"
-mesh_position_x="0"
-mesh_position_y="0"
-mesh_position_z="0"
-mesh_rotation_matrix="[[1,0,0], [0,1,0], [0,0,1]]"
-meshfix="0"
-meshfix_extensive_stitching="False"
-meshfix_keep_open_polygons="False"
-meshfix_maximum_resolution="0.01"
-meshfix_maximum_travel_resolution="0.02"
-meshfix_union_all="True"
-meshfix_union_all_remove_holes="False"
-min_infill_area="0"
-min_skin_width_for_expansion="4.898587196589413e-17"
-minimum_polygon_circumference="1.0"
-mold_angle="40"
-mold_enabled="False"
-mold_roof_height="0.5"
-mold_width="5"
-multiple_mesh_overlap="0.15"
-nozzle_disallowed_areas="[]"
-ooze_shield_angle="60"
-ooze_shield_dist="2"
-ooze_shield_enabled="False"
-optimize_wall_printing_order="False"
-outer_inset_first="False"
-platform_adhesion="0"
-prime_blob_enable="True"
-prime_tower_circular="True"
-prime_tower_enable="False"
-prime_tower_flow="100"
-prime_tower_line_width="0.5"
-prime_tower_min_volume="6"
-prime_tower_position_x="375.3"
-prime_tower_position_y="275.3"
-prime_tower_size="20"
-prime_tower_wipe_enabled="True"
-print_bed_temperature="0"
-print_sequence="all_at_once"
-print_temperature="210"
-raft_acceleration="3000"
-raft_airgap="0.3"
-raft_base_acceleration="3000"
-raft_base_fan_speed="0"
-raft_base_jerk="20"
-raft_base_line_spacing="2.0"
-raft_base_line_width="1.0"
-raft_base_speed="22.5"
-raft_base_thickness="0.42"
-raft_fan_speed="0"
-raft_interface_acceleration="3000"
-raft_interface_fan_speed="0"
-raft_interface_jerk="20"
-raft_interface_line_spacing="1.2"
-raft_interface_line_width="1.0"
-raft_interface_speed="22.5"
-raft_interface_thickness="0.6000000000000001"
-raft_jerk="20"
-raft_margin="15"
-raft_smoothing="5"
-raft_speed="30.0"
-raft_surface_acceleration="3000"
-raft_surface_fan_speed="0"
-raft_surface_jerk="20"
-raft_surface_layers="2"
-raft_surface_line_spacing="0.5"
-raft_surface_line_width="0.5"
-raft_surface_speed="30.0"
-raft_surface_thickness="0.4"
-relative_extrusion="False"
-remove_empty_first_layers="True"
-resolution="0"
-retract_at_layer_change="False"
-retraction_amount="6.5"
-retraction_combing="all"
-retraction_combing_max_distance="0"
-retraction_count_max="90"
-retraction_enable="True"
-retraction_extra_prime_amount="0"
-retraction_extrusion_window="6.5"
-retraction_hop="1"
-retraction_hop_after_extruder_switch="True"
-retraction_hop_enabled="False"
-retraction_hop_only_when_collides="False"
-retraction_min_travel="1.0"
-retraction_prime_speed="35"
-retraction_retract_speed="35"
-retraction_speed="35"
-roofing_angles="[ ]"
-roofing_extruder_nr="-1"
-roofing_layer_count="0"
-roofing_line_width="0.5"
-roofing_pattern="lines"
-shell="0"
-skin_alternate_rotation="False"
-skin_angles="[ ]"
-skin_line_width="0.5"
-skin_no_small_gaps_heuristic="True"
-skin_outline_count="1"
-skin_overlap="5"
-skin_overlap_mm="0.025"
-skin_preshrink="1.0"
-skirt_brim_line_width="0.5"
-skirt_brim_minimal_length="250"
-skirt_brim_speed="30.0"
-skirt_gap="3"
-skirt_line_count="1"
-slicing_tolerance="middle"
-smooth_spiralized_contours="True"
-spaghetti_flow="20"
-spaghetti_infill_enabled="False"
-spaghetti_infill_extra_volume="0"
-spaghetti_infill_stepped="True"
-spaghetti_inset="0.2"
-spaghetti_max_height="2.0"
-spaghetti_max_infill_angle="10"
-speed="0"
-speed_equalize_flow_enabled="False"
-speed_equalize_flow_max="150"
-speed_infill="80"
-speed_ironing="20.0"
-speed_layer_0="30.0"
-speed_prime_tower="60"
-speed_print="60"
-speed_print_layer_0="30.0"
-speed_roofing="30.0"
-speed_slowdown_layers="2"
-speed_support="60"
-speed_support_bottom="40.0"
-speed_support_infill="60"
-speed_support_interface="40.0"
-speed_support_roof="40.0"
-speed_topbottom="30.0"
-speed_travel="120"
-speed_travel_layer_0="60.0"
-speed_wall="30.0"
-speed_wall_0="30.0"
-speed_wall_x="60.0"
-start_layers_at_same_position="False"
-sub_div_rad_add="0.5"
-support="0"
-support_angle="50"
-support_bottom_density="100"
-support_bottom_distance="0"
-support_bottom_enable="False"
-support_bottom_extruder_nr="0"
-support_bottom_height="1"
-support_bottom_line_distance="0.5"
-support_bottom_line_width="0.5"
-support_bottom_pattern="concentric"
-support_bottom_stair_step_height="0.3"
-support_bottom_stair_step_width="5.0"
-support_conical_angle="30"
-support_conical_enabled="False"
-support_conical_min_width="5.0"
-support_connect_zigzags="True"
-support_enable="False"
-support_extruder_nr="0"
-support_extruder_nr_layer_0="0"
-support_fan_enable="False"
-support_infill_angle="0"
-support_infill_extruder_nr="0"
-support_infill_rate="15"
-support_infill_sparse_thickness="0.4"
-support_initial_layer_line_distance="3.3333333333333335"
-support_interface_density="100"
-support_interface_enable="False"
-support_interface_extruder_nr="0"
-support_interface_height="1"
-support_interface_line_width="0.5"
-support_interface_pattern="concentric"
-support_interface_skip_height="0.3"
-support_join_distance="2.0"
-support_line_distance="3.3333333333333335"
-support_line_width="0.5"
-support_mesh="False"
-support_mesh_drop_down="True"
-support_minimal_diameter="3.0"
-support_offset="0.2"
-support_pattern="zigzag"
-support_roof_density="100"
-support_roof_enable="False"
-support_roof_extruder_nr="0"
-support_roof_height="1"
-support_roof_line_distance="0.5"
-support_roof_line_width="0.5"
-support_roof_pattern="concentric"
-support_skip_some_zags="False"
-support_skip_zag_per_mm="20"
-support_supported_skin_fan_speed="100"
-support_top_distance="0.1"
-support_tower_diameter="3.0"
-support_tower_roof_angle="65"
-support_tree_angle="40"
-support_tree_branch_diameter="2"
-support_tree_branch_diameter_angle="5"
-support_tree_branch_distance="1"
-support_tree_collision_resolution="0.25"
-support_tree_enable="False"
-support_tree_wall_count="1"
-support_tree_wall_thickness="0.5"
-support_type="buildplate"
-support_use_towers="True"
-support_wall_count="0"
-support_xy_distance="0.7"
-support_xy_distance_overhang="0.25"
-support_xy_overrides_z="z_overrides_xy"
-support_z_distance="0.1"
-support_zag_skip_count="8"
-switch_extruder_prime_speed="20"
-switch_extruder_retraction_amount="16"
-switch_extruder_retraction_speed="20"
-switch_extruder_retraction_speeds="20"
-time="09:46:45"
-top_bottom_extruder_nr="-1"
-top_bottom_pattern="lines"
-top_bottom_pattern_0="lines"
-top_bottom_thickness="0.8"
-top_layers="2"
-top_skin_expand_distance="1.0"
-top_skin_preshrink="1.0"
-top_thickness="0.8"
-travel="0"
-travel_avoid_distance="0.625"
-travel_avoid_other_parts="True"
-travel_avoid_supports="False"
-travel_compensate_overlapping_walls_0_enabled="True"
-travel_compensate_overlapping_walls_enabled="True"
-travel_compensate_overlapping_walls_x_enabled="True"
-travel_retract_before_outer_wall="False"
-wall_0_extruder_nr="-1"
-wall_0_inset="0"
-wall_0_wipe_dist="0.25"
-wall_extruder_nr="-1"
-wall_line_count="2"
-wall_line_width="0.5"
-wall_line_width_0="0.5"
-wall_line_width_x="0.5"
-wall_min_flow="0"
-wall_min_flow_retract="False"
-wall_overhang_angle="90"
-wall_overhang_speed_factor="100"
-wall_thickness="0.8"
-wall_x_extruder_nr="-1"
-wireframe_bottom_delay="0"
-wireframe_drag_along="0.6"
-wireframe_enabled="False"
-wireframe_fall_down="0.5"
-wireframe_flat_delay="0.1"
-wireframe_flow="100"
-wireframe_flow_connection="100"
-wireframe_flow_flat="100"
-wireframe_height="3"
-wireframe_nozzle_clearance="1"
-wireframe_printspeed="5"
-wireframe_printspeed_bottom="5"
-wireframe_printspeed_down="5"
-wireframe_printspeed_flat="5"
-wireframe_printspeed_up="5"
-wireframe_roof_drag_along="0.8"
-wireframe_roof_fall_down="2"
-wireframe_roof_inset="3"
-wireframe_roof_outer_delay="0.2"
-wireframe_straight_before_down="20"
-wireframe_strategy="compensate"
-wireframe_top_delay="0"
-wireframe_top_jump="0.6"
-wireframe_up_half_speed="0.3"
-xy_offset="0"
-xy_offset_layer_0="0"
-z_seam_corner="z_seam_corner_inner"
-z_seam_relative="False"
-z_seam_type="sharpest_corner"
-z_seam_x="190.0"
-z_seam_y="900"
-zig_zaggify_infill="False"
-zig_zaggify_support="False"
-machine_extruder_start_code=""
diff --git a/software/Print3r/settings/slicer/cura4/fdmprinter.def.json b/software/Print3r/settings/slicer/cura4/fdmprinter.def.json
deleted file mode 100644
index abdb03c5..00000000
--- a/software/Print3r/settings/slicer/cura4/fdmprinter.def.json
+++ /dev/null
@@ -1,7793 +0,0 @@
-{
- "name": "FDM Printer Base Description",
- "version": 2,
- "metadata":
- {
- "type": "machine",
- "author": "Ultimaker",
- "manufacturer": "Unknown",
- "setting_version": 17,
- "file_formats": "text/x-gcode;model/stl;application/x-wavefront-obj;application/x3g",
- "visible": false,
- "has_materials": true,
- "has_variants": false,
- "has_machine_quality": false,
- "preferred_material": "generic_pla",
- "preferred_quality_type": "normal",
- "machine_extruder_trains":
- {
- "0": "fdmextruder"
- },
- "supports_usb_connection": true,
- "supports_network_connection": false
- },
- "settings":
- {
- "machine_settings":
- {
- "label": "Machine",
- "type": "category",
- "description": "Machine specific settings",
- "icon": "Printer",
- "children":
- {
- "machine_name":
- {
- "label": "Machine Type",
- "description": "The name of your 3D printer model.",
- "default_value": "Unknown",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_show_variants":
- {
- "label": "Show Machine Variants",
- "description": "Whether to show the different variants of this machine, which are described in separate json files.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_start_gcode":
- {
- "label": "Start G-code",
- "description": "G-code commands to be executed at the very start - separated by \\n.",
- "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_end_gcode":
- {
- "label": "End G-code",
- "description": "G-code commands to be executed at the very end - separated by \\n.",
- "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_guid":
- {
- "label": "Material GUID",
- "description": "GUID of the material. This is set automatically.",
- "default_value": "",
- "type": "str",
- "enabled": false
- },
- "material_diameter":
- {
- "label": "Diameter",
- "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.85,
- "minimum_value": "0.0001",
- "minimum_value_warning": "0.4",
- "maximum_value_warning": "3.5",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_bed_temp_wait":
- {
- "label": "Wait for Build Plate Heatup",
- "description": "Whether to insert a command to wait until the build plate temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_wait":
- {
- "label": "Wait for Nozzle Heatup",
- "description": "Whether to wait until the nozzle temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_prepend":
- {
- "label": "Include Material Temperatures",
- "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temp_prepend":
- {
- "label": "Include Build Plate Temperature",
- "description": "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_width":
- {
- "label": "Machine Width",
- "description": "The width (X-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.001",
- "maximum_value": "2000000",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_depth":
- {
- "label": "Machine Depth",
- "description": "The depth (Y-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.001",
- "maximum_value": "2000000",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_shape":
- {
- "label": "Build Plate Shape",
- "description": "The shape of the build plate without taking unprintable areas into account.",
- "default_value": "rectangular",
- "type": "enum",
- "options":
- {
- "rectangular": "Rectangular",
- "elliptic": "Elliptic"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_buildplate_type":
- {
- "label": "Build Plate Material",
- "description": "The material of the build plate installed on the printer.",
- "default_value": "glass",
- "type": "enum",
- "options":
- {
- "glass": "Glass",
- "aluminum": "Aluminum"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_height":
- {
- "label": "Machine Height",
- "description": "The height (Z-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heated_bed":
- {
- "label": "Has Heated Build Plate",
- "description": "Whether the machine has a heated build plate present.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heated_build_volume":
- {
- "label": "Has Build Volume Temperature Stabilization",
- "description": "Whether the machine is able to stabilize the build volume temperature.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_always_write_active_tool":
- {
- "label": "Always Write Active Tool",
- "description": "Write active tool after sending temp commands to inactive tool. Required for Dual Extruder printing with Smoothie or other firmware with modal tool commands.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_center_is_zero":
- {
- "label": "Is Center Origin",
- "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruder_count":
- {
- "label": "Number of Extruders",
- "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruders_enabled_count":
- {
- "label": "Number of Extruders That Are Enabled",
- "description": "Number of extruder trains that are enabled; automatically set in software",
- "value": "machine_extruder_count",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_tip_outer_diameter":
- {
- "label": "Outer Nozzle Diameter",
- "description": "The outer diameter of the tip of the nozzle.",
- "unit": "mm",
- "default_value": 1,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "machine_nozzle_head_distance":
- {
- "label": "Nozzle Length",
- "description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
- "unit": "mm",
- "default_value": 3,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_expansion_angle":
- {
- "label": "Nozzle Angle",
- "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.",
- "unit": "°",
- "type": "int",
- "default_value": 45,
- "maximum_value": "89",
- "minimum_value": "1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heat_zone_length":
- {
- "label": "Heat Zone Length",
- "description": "The distance from the tip of the nozzle in which heat from the nozzle is transferred to the filament.",
- "unit": "mm",
- "default_value": 16,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_temp_enabled":
- {
- "label": "Enable Nozzle Temperature Control",
- "description": "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura.",
- "default_value": true,
- "value": "machine_gcode_flavor != \"UltiGCode\"",
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_heat_up_speed":
- {
- "label": "Heat Up Speed",
- "description": "The speed (°C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_cool_down_speed":
- {
- "label": "Cool Down Speed",
- "description": "The speed (°C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_min_cool_heat_time_window":
- {
- "label": "Minimal Time Standby Temperature",
- "description": "The minimal time an extruder has to be inactive before the nozzle is cooled. Only when an extruder is not used for longer than this time will it be allowed to cool down to the standby temperature.",
- "default_value": 50.0,
- "unit": "s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_gcode_flavor":
- {
- "label": "G-code Flavor",
- "description": "The type of g-code to be generated.",
- "type": "enum",
- "options":
- {
- "RepRap (Marlin/Sprinter)": "Marlin",
- "RepRap (Volumetric)": "Marlin (Volumetric)",
- "RepRap (RepRap)": "RepRap",
- "UltiGCode": "Ultimaker 2",
- "Griffin": "Griffin",
- "Makerbot": "Makerbot",
- "BFB": "Bits from Bytes",
- "MACH3": "Mach3",
- "Repetier": "Repetier"
- },
- "default_value": "RepRap (Marlin/Sprinter)",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_firmware_retract":
- {
- "label": "Firmware Retraction",
- "description": "Whether to use firmware retract commands (G10/G11) instead of using the E property in G1 commands to retract the material.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor == 'RepRap (Volumetric)' or machine_gcode_flavor == 'UltiGCode' or machine_gcode_flavor == 'BFB'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_share_heater":
- {
- "label": "Extruders Share Heater",
- "description": "Whether the extruders share a single heater rather than each extruder having its own heater.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_share_nozzle":
- {
- "label": "Extruders Share Nozzle",
- "description": "Whether the extruders share a single nozzle rather than each extruder having its own nozzle. When set to true, it is expected that the printer-start gcode script properly sets up all extruders in an initial retraction state that is known and mutually compatible (either zero or one filament not retracted); in that case the initial retraction status is described, per extruder, by the 'machine_extruders_shared_nozzle_initial_retraction' parameter.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_shared_nozzle_initial_retraction":
- {
- "label": "Shared Nozzle Initial Retraction",
- "description": "How much the filament of each extruder is assumed to have been retracted from the shared nozzle tip at the completion of the printer-start gcode script; the value should be equal to or greater than the length of the common part of the nozzle's ducts.",
- "unit": "mm",
- "default_value": 0,
- "minimum_value": "0",
- "type": "float",
- "enabled": "machine_extruders_share_nozzle",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_disallowed_areas":
- {
- "label": "Disallowed Areas",
- "description": "A list of polygons with areas the print head is not allowed to enter.",
- "type": "polygons",
- "default_value":
- [
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "nozzle_disallowed_areas":
- {
- "label": "Nozzle Disallowed Areas",
- "description": "A list of polygons with areas the nozzle is not allowed to enter.",
- "type": "polygons",
- "default_value":
- [
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_head_with_fans_polygon":
- {
- "label": "Machine Head & Fan Polygon",
- "description": "A 2D silhouette of the print head (fan caps included).",
- "type": "polygon",
- "default_value":
- [
- [
- -20,
- 10
- ],
- [
- 10,
- 10
- ],
- [
- 10,
- -10
- ],
- [
- -20,
- -10
- ]
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "gantry_height":
- {
- "label": "Gantry Height",
- "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
- "default_value": 99999999999,
- "value": "machine_height",
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_id":
- {
- "label": "Nozzle ID",
- "description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".",
- "type": "str",
- "default_value": "unknown",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_size":
- {
- "label": "Nozzle Diameter",
- "description": "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_use_extruder_offset_to_offset_coords":
- {
- "label": "Offset with Extruder",
- "description": "Apply the extruder offset to the coordinate system. Affects all extruders.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruder_prime_pos_z":
- {
- "label": "Extruder Prime Z Position",
- "description": "The Z coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value": "machine_height",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "extruder_prime_pos_abs":
- {
- "label": "Absolute Extruder Prime Position",
- "description": "Make the extruder prime position absolute rather than relative to the last-known location of the head.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_max_feedrate_x":
- {
- "label": "Maximum Speed X",
- "description": "The maximum speed for the motor of the X-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_y":
- {
- "label": "Maximum Speed Y",
- "description": "The maximum speed for the motor of the Y-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_z":
- {
- "label": "Maximum Speed Z",
- "description": "The maximum speed for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_e":
- {
- "label": "Maximum Feedrate",
- "description": "The maximum speed of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_x":
- {
- "label": "Maximum Acceleration X",
- "description": "Maximum acceleration for the motor of the X-direction",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_y":
- {
- "label": "Maximum Acceleration Y",
- "description": "Maximum acceleration for the motor of the Y-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_z":
- {
- "label": "Maximum Acceleration Z",
- "description": "Maximum acceleration for the motor of the Z-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 100,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_e":
- {
- "label": "Maximum Filament Acceleration",
- "description": "Maximum acceleration for the motor of the filament.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 10000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_acceleration":
- {
- "label": "Default Acceleration",
- "description": "The default acceleration of print head movement.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 4000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_xy":
- {
- "label": "Default X-Y Jerk",
- "description": "Default jerk for movement in the horizontal plane.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_z":
- {
- "label": "Default Z Jerk",
- "description": "Default jerk for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_e":
- {
- "label": "Default Filament Jerk",
- "description": "Default jerk for the motor of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_steps_per_mm_x":
- {
- "label": "Steps per Millimeter (X)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the X direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_y":
- {
- "label": "Steps per Millimeter (Y)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Y direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_z":
- {
- "label": "Steps per Millimeter (Z)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Z direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_e":
- {
- "label": "Steps per Millimeter (E)",
- "description": "How many steps of the stepper motors will result in moving the feeder wheel by one millimeter around its circumference.",
- "type": "float",
- "default_value": 1600,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_x":
- {
- "label": "X Endstop in Positive Direction",
- "description": "Whether the endstop of the X axis is in the positive direction (high X coordinate) or negative (low X coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_y":
- {
- "label": "Y Endstop in Positive Direction",
- "description": "Whether the endstop of the Y axis is in the positive direction (high Y coordinate) or negative (low Y coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_z":
- {
- "label": "Z Endstop in Positive Direction",
- "description": "Whether the endstop of the Z axis is in the positive direction (high Z coordinate) or negative (low Z coordinate).",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_minimum_feedrate":
- {
- "label": "Minimum Feedrate",
- "description": "The minimal movement speed of the print head.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_feeder_wheel_diameter":
- {
- "label": "Feeder Wheel Diameter",
- "description": "The diameter of the wheel that drives the material in the feeder.",
- "unit": "mm",
- "type": "float",
- "default_value": 10.0,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "resolution":
- {
- "label": "Quality",
- "type": "category",
- "icon": "PrintQuality",
- "description": "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)",
- "children":
- {
- "layer_height":
- {
- "label": "Layer Height",
- "description": "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "layer_height_0":
- {
- "label": "Initial Layer Height",
- "description": "The height of the initial layer in mm. A thicker initial layer makes adhesion to the build plate easier.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "resolve": "min(extruderValues('layer_height_0'))",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "line_width":
- {
- "label": "Line Width",
- "description": "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "machine_nozzle_size",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width":
- {
- "label": "Wall Line Width",
- "description": "Width of a single wall line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "value": "line_width",
- "default_value": 0.4,
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width_0":
- {
- "label": "Outer Wall Line Width",
- "description": "Width of the outermost wall line. By lowering this value, higher levels of detail can be printed.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "(0.1 + 0.4 * machine_nozzle_size) if outer_inset_first else 0.1 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_line_width_x":
- {
- "label": "Inner Wall(s) Line Width",
- "description": "Width of a single wall line for all wall lines except the outermost one.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "skin_line_width":
- {
- "label": "Top/Bottom Line Width",
- "description": "Width of a single top/bottom line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_line_width":
- {
- "label": "Infill Line Width",
- "description": "Width of a single infill line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skirt_brim_line_width":
- {
- "label": "Skirt/Brim Line Width",
- "description": "Width of a single skirt or brim line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable') or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_line_width":
- {
- "label": "Support Line Width",
- "description": "Width of a single support structure line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "enabled": "(support_enable or support_meshes_present)",
- "value": "line_width",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_interface_line_width":
- {
- "label": "Support Interface Line Width",
- "description": "Width of a single line of support roof or floor.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_width":
- {
- "label": "Support Roof Line Width",
- "description": "Width of a single support roof line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_line_width":
- {
- "label": "Support Floor Line Width",
- "description": "Width of a single support floor line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "prime_tower_line_width":
- {
- "label": "Prime Tower Line Width",
- "description": "Width of a single prime tower line.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "initial_layer_line_width_factor":
- {
- "label": "Initial Layer Line Width",
- "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.",
- "type": "float",
- "unit": "%",
- "default_value": 100.0,
- "minimum_value": "0.001",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "shell":
- {
- "label": "Walls",
- "icon": "PrintShell",
- "description": "Shell",
- "type": "category",
- "children":
- {
- "wall_extruder_nr":
- {
- "label": "Wall Extruder",
- "description": "The extruder train used for printing the walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1",
- "children": {
- "wall_0_extruder_nr":
- {
- "label": "Outer Wall Extruder",
- "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "wall_x_extruder_nr":
- {
- "label": "Inner Wall Extruder",
- "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- }
- }
- },
- "wall_thickness":
- {
- "label": "Wall Thickness",
- "description": "The thickness of the walls in the horizontal direction. This value divided by the wall line width defines the number of walls.",
- "unit": "mm",
- "default_value": 0.8,
- "value": "wall_line_width_0 if magic_spiralize else 0.8",
- "minimum_value": "0",
- "minimum_value_warning": "line_width",
- "maximum_value_warning": "10 * line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_count":
- {
- "label": "Wall Line Count",
- "description": "The number of walls. When calculated by the wall thickness, this value is rounded to a whole number.",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "10",
- "type": "int",
- "value": "1 if magic_spiralize else max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1) if wall_thickness != 0 else 0",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "wall_0_wipe_dist":
- {
- "label": "Outer Wall Wipe Distance",
- "description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_0_inset":
- {
- "label": "Outer Wall Inset",
- "description": "Inset applied to the path of the outer wall. If the outer wall is smaller than the nozzle, and printed after the inner walls, use this offset to get the hole in the nozzle to overlap with the inner walls instead of the outside of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "(machine_nozzle_size - wall_line_width_0) / 2 if (wall_line_width_0 < machine_nozzle_size and not outer_inset_first) else 0",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "optimize_wall_printing_order":
- {
- "label": "Optimize Wall Printing Order",
- "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "outer_inset_first":
- {
- "label": "Outer Before Inner Walls",
- "description": "Prints walls in order of outside to inside when enabled. This can help improve dimensional accuracy in X and Y when using a high viscosity plastic like ABS; however it can decrease outer surface print quality, especially on overhangs.",
- "type": "bool",
- "default_value": false,
- "enabled": "wall_0_extruder_nr == wall_x_extruder_nr",
- "settable_per_mesh": true
- },
- "alternate_extra_perimeter":
- {
- "label": "Alternate Extra Wall",
- "description": "Prints an extra wall at every other layer. This way infill gets caught between these extra walls, resulting in stronger prints.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "travel_compensate_overlapping_walls_enabled":
- {
- "label": "Compensate Wall Overlaps",
- "description": "Compensate the flow for parts of a wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "travel_compensate_overlapping_walls_0_enabled":
- {
- "label": "Compensate Outer Wall Overlaps",
- "description": "Compensate the flow for parts of an outer wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "value": "travel_compensate_overlapping_walls_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "travel_compensate_overlapping_walls_x_enabled":
- {
- "label": "Compensate Inner Wall Overlaps",
- "description": "Compensate the flow for parts of an inner wall being printed where there is already a wall in place.",
- "type": "bool",
- "default_value": true,
- "value": "travel_compensate_overlapping_walls_enabled",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "wall_min_flow":
- {
- "label": "Minimum Wall Flow",
- "description": "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled",
- "settable_per_mesh": true
- },
- "wall_min_flow_retract":
- {
- "label": "Prefer Retract",
- "description": "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold.",
- "type": "bool",
- "default_value": false,
- "enabled": "(travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled) and wall_min_flow > 0",
- "settable_per_mesh": true
- },
- "fill_perimeter_gaps":
- {
- "label": "Fill Gaps Between Walls",
- "description": "Fills the gaps between walls where no walls fit.",
- "type": "enum",
- "options": {
- "nowhere": "Nowhere",
- "everywhere": "Everywhere"
- },
- "default_value": "everywhere",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "filter_out_tiny_gaps":
- {
- "label": "Filter Out Tiny Gaps",
- "description": "Filter out tiny gaps to reduce blobs on outside of model.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "fill_outline_gaps": {
- "label": "Print Thin Walls",
- "description": "Print pieces of the model which are horizontally thinner than the nozzle size.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "xy_offset":
- {
- "label": "Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "xy_offset_layer_0":
- {
- "label": "Initial Layer Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in the first layer. A negative value can compensate for squishing of the first layer known as \"elephant's foot\".",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "value": "xy_offset",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "hole_xy_offset":
- {
- "label": "Hole Horizontal Expansion",
- "description": "Amount of offset applied to all holes in each layer. Positive values increase the size of the holes, negative values reduce the size of the holes.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_type":
- {
- "label": "Z Seam Alignment",
- "description": "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker.",
- "type": "enum",
- "options":
- {
- "back": "User Specified",
- "shortest": "Shortest",
- "random": "Random",
- "sharpest_corner": "Sharpest Corner"
- },
- "default_value": "sharpest_corner",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_position":
- {
- "label": "Z Seam Position",
- "description": "The position near where to start printing each part in a layer.",
- "type": "enum",
- "options":
- {
- "backleft": "Back Left",
- "back": "Back",
- "backright": "Back Right",
- "right": "Right",
- "frontright": "Front Right",
- "front": "Front",
- "frontleft": "Front Left",
- "left": "Left"
- },
- "enabled": "z_seam_type == 'back'",
- "default_value": "back",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "z_seam_x":
- {
- "label": "Z Seam X",
- "description": "The X coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'left' or z_seam_position == 'backleft') else machine_width / 2 if (z_seam_position == 'front' or z_seam_position == 'back') else machine_width) - (machine_width / 2 if z_seam_relative or machine_center_is_zero else 0)",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_y":
- {
- "label": "Z Seam Y",
- "description": "The Y coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'front' or z_seam_position == 'frontright') else machine_depth / 2 if (z_seam_position == 'left' or z_seam_position == 'right') else machine_depth) - (machine_depth / 2 if z_seam_relative or machine_center_is_zero else 0)",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "z_seam_corner":
- {
- "label": "Seam Corner Preference",
- "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate.",
- "type": "enum",
- "options":
- {
- "z_seam_corner_none": "None",
- "z_seam_corner_inner": "Hide Seam",
- "z_seam_corner_outer": "Expose Seam",
- "z_seam_corner_any": "Hide or Expose Seam",
- "z_seam_corner_weighted": "Smart Hiding"
- },
- "default_value": "z_seam_corner_inner",
- "enabled": "z_seam_type != 'random'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_relative":
- {
- "label": "Z Seam Relative",
- "description": "When enabled, the z seam coordinates are relative to each part's centre. When disabled, the coordinates define an absolute position on the build plate.",
- "unit": "mm",
- "type": "bool",
- "default_value": false,
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "top_bottom":
- {
- "label": "Top/Bottom",
- "icon": "PrintTopBottom",
- "description": "Top/Bottom",
- "type": "category",
- "children":
- {
- "roofing_extruder_nr":
- {
- "label": "Top Surface Skin Extruder",
- "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "value": "top_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
- },
- "roofing_layer_count":
- {
- "label": "Top Surface Skin Layers",
- "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "top_layers - 1",
- "type": "int",
- "value": "0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "top_layers > 0"
- },
- "top_bottom_extruder_nr":
- {
- "label": "Top/Bottom Extruder",
- "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "top_bottom_thickness":
- {
- "label": "Top/Bottom Thickness",
- "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.6",
- "maximum_value": "machine_height",
- "type": "float",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_thickness":
- {
- "label": "Top Thickness",
- "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "maximum_value": "machine_height",
- "type": "float",
- "value": "top_bottom_thickness",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_layers":
- {
- "label": "Top Layers",
- "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.",
- "default_value": 8,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "int",
- "minimum_value_warning": "2",
- "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "bottom_thickness":
- {
- "label": "Bottom Thickness",
- "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "type": "float",
- "value": "top_bottom_thickness",
- "maximum_value": "machine_height",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "bottom_layers":
- {
- "label": "Bottom Layers",
- "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "type": "int",
- "value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "initial_bottom_layers":
- {
- "label": "Initial Bottom Layers",
- "description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "type": "int",
- "value": "bottom_layers",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "top_bottom_pattern":
- {
- "label": "Top/Bottom Pattern",
- "description": "The pattern of the top/bottom layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "top_bottom_pattern_0":
- {
- "label": "Bottom Pattern Initial Layer",
- "description": "The pattern on the bottom of the print on the first layer.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_skin_polygons":
- {
- "label": "Connect Top/Bottom Polygons",
- "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality.",
- "type": "bool",
- "default_value": false,
- "enabled": "((top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric') or (initial_bottom_layers > 0 and top_bottom_pattern_0 == 'concentric') or (roofing_layer_count > 0 and roofing_pattern == 'concentric')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_monotonic":
- {
- "label": "Monotonic Top/Bottom Order",
- "description": "Print top/bottom lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "default_value": false,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_bottom_pattern != 'concentric' or top_bottom_pattern_0 != 'concentric')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_angles":
- {
- "label": "Top/Bottom Line Directions",
- "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_no_small_gaps_heuristic":
- {
- "label": "No Skin in Z Gaps",
- "description": "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air.",
- "type": "bool",
- "default_value": false,
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_outline_count":
- {
- "label": "Extra Skin Wall Count",
- "description": "Replaces the outermost part of the top/bottom pattern with a number of concentric lines. Using one or two lines improves roofs that start on infill material.",
- "value": "0 if top_bottom_pattern == 'concentric' and top_bottom_pattern_0 == 'concentric' and roofing_layer_count <= 0 else 1",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "type": "int",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_bottom_pattern != 'concentric' or top_bottom_pattern_0 != 'concentric' or (roofing_layer_count > 0 and roofing_pattern != 'concentric'))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_enabled":
- {
- "label": "Enable Ironing",
- "description": "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_only_highest_layer":
- {
- "label": "Iron Only Highest Layer",
- "description": "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish.",
- "type": "bool",
- "default_value": false,
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_pattern":
- {
- "label": "Ironing Pattern",
- "description": "The pattern to use for ironing top surfaces.",
- "type": "enum",
- "options":
- {
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "zigzag",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_monotonic":
- {
- "label": "Monotonic Ironing Order",
- "description": "Print ironing lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "default_value": false,
- "enabled": "ironing_enabled and ironing_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_line_spacing":
- {
- "label": "Ironing Line Spacing",
- "description": "The distance between the lines of ironing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_flow":
- {
- "label": "Ironing Flow",
- "description": "The amount of material, relative to a normal skin line, to extrude during ironing. Keeping the nozzle filled helps filling some of the crevices of the top surface, but too much results in overextrusion and blips on the side of the surface.",
- "type": "float",
- "unit": "%",
- "default_value": 10.0,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_inset":
- {
- "label": "Ironing Inset",
- "description": "A distance to keep from the edges of the model. Ironing all the way to the edge of the mesh may result in a jagged edge on your print.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.35,
- "value": "wall_line_width_0 / 2 + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)",
- "minimum_value_warning": "0",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_ironing":
- {
- "label": "Ironing Speed",
- "description": "The speed at which to pass over the top surface.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 20.0,
- "value": "speed_topbottom * 20 / 30",
- "minimum_value": "0.001",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_ironing":
- {
- "label": "Ironing Acceleration",
- "description": "The acceleration with which ironing is performed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_ironing":
- {
- "label": "Ironing Jerk",
- "description": "The maximum instantaneous velocity change while performing ironing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_overlap":
- {
- "label": "Skin Overlap Percentage",
- "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.",
- "unit": "%",
- "type": "float",
- "default_value": 5,
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "value": "5 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "skin_overlap_mm":
- {
- "label": "Skin Overlap",
- "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.02,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "skin_preshrink":
- {
- "label": "Skin Removal Width",
- "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_preshrink":
- {
- "label": "Top Skin Removal Width",
- "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_preshrink":
- {
- "label": "Bottom Skin Removal Width",
- "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "expand_skins_expand_distance":
- {
- "label": "Skin Expand Distance",
- "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "-skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_expand_distance":
- {
- "label": "Top Skin Expand Distance",
- "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-top_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_expand_distance":
- {
- "label": "Bottom Skin Expand Distance",
- "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-bottom_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "max_skin_angle_for_expansion":
- {
- "label": "Maximum Skin Angle for Expansion",
- "description": "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal and will cause no skin to be expanded, while an angle of 90° is vertical and will cause all skin to be expanded.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "min_skin_width_for_expansion":
- {
- "label": "Minimum Skin Width for Expansion",
- "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
- "minimum_value": "0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "infill":
- {
- "label": "Infill",
- "icon": "Infill1",
- "description": "Infill",
- "type": "category",
- "children":
- {
- "infill_extruder_nr":
- {
- "label": "Infill Extruder",
- "description": "The extruder train used for printing infill. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "infill_sparse_density":
- {
- "label": "Infill Density",
- "description": "Adjusts the density of infill of the print.",
- "unit": "%",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_line_distance":
- {
- "label": "Infill Line Distance",
- "description": "Distance between the printed infill lines. This setting is calculated by the infill density and the infill line width.",
- "unit": "mm",
- "type": "float",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "infill_line_width",
- "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else 1))))",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "infill_pattern":
- {
- "label": "Infill Pattern",
- "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Gyroid, cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.",
- "type": "enum",
- "options":
- {
- "grid": "Grid",
- "lines": "Lines",
- "triangles": "Triangles",
- "trihexagon": "Tri-Hexagon",
- "cubic": "Cubic",
- "cubicsubdiv": "Cubic Subdivision",
- "tetrahedral": "Octet",
- "quarter_cubic": "Quarter Cubic",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross",
- "cross_3d": "Cross 3D",
- "gyroid": "Gyroid"
- },
- "default_value": "grid",
- "enabled": "infill_line_distance > 0",
- "value": "'lines' if infill_sparse_density > 25 else 'grid'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "zig_zaggify_infill":
- {
- "label": "Connect Infill Lines",
- "description": "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used.",
- "type": "bool",
- "default_value": false,
- "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'gyroid'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_infill_polygons":
- {
- "label": "Connect Infill Polygons",
- "description": "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time.",
- "type": "bool",
- "default_value": true,
- "value": "(infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0) and infill_wall_line_count > 0",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'concentric' or infill_multiplier % 2 == 0 or infill_wall_line_count > 1",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_angles":
- {
- "label": "Infill Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "infill_pattern != 'concentric' and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_x":
- {
- "label": "Infill X Offset",
- "description": "The infill pattern is moved this distance along the X axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_y":
- {
- "label": "Infill Y Offset",
- "description": "The infill pattern is moved this distance along the Y axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_randomize_start_location":
- {
- "label": "Randomize Infill Start",
- "description": "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move.",
- "type": "bool",
- "default_value": false,
- "warning_value": "True if infill_pattern not in ('grid', 'triangles', 'trihexagon', 'cubic', 'cubicsubdiv', 'tetrahedral', 'quarter_cubic') else None",
- "enabled": "not ((infill_pattern == 'cross' and connect_infill_polygons) or infill_pattern == 'concentric')",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_multiplier":
- {
- "label": "Infill Line Multiplier",
- "description": "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage.",
- "default_value": 1,
- "type": "int",
- "minimum_value": "1",
- "maximum_value_warning": "infill_line_distance / infill_line_width",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'zigzag' and (gradual_infill_steps == 0 or not zig_zaggify_infill)",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_wall_line_count":
- {
- "label": "Extra Infill Wall Count",
- "description": "Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "sub_div_rad_add":
- {
- "label": "Cubic Subdivision Shell",
- "description": "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "wall_line_width_x",
- "minimum_value_warning": "-1 * infill_line_distance",
- "maximum_value_warning": "5 * infill_line_distance",
- "enabled": "infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_overlap":
- {
- "label": "Infill Overlap Percentage",
- "description": "The amount of overlap between the infill and the walls as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "%",
- "type": "float",
- "default_value": 10,
- "value": "10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_overlap_mm":
- {
- "label": "Infill Overlap",
- "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (infill_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "infill_wipe_dist":
- {
- "label": "Infill Wipe Distance",
- "description": "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "value": "wall_line_width_0 / 4 if wall_line_count == 1 else wall_line_width_x / 4",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_sparse_thickness":
- {
- "label": "Infill Layer Thickness",
- "description": "The thickness per layer of infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height') / 2 if infill_line_distance > 0 else -999999",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * 8 if infill_line_distance > 0 else 999999",
- "value": "resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_steps":
- {
- "label": "Gradual Infill Steps",
- "description": "Number of times to reduce the infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (infill_pattern == 'cross' or infill_pattern == 'cross_3d' or support_pattern == 'concentric') else 5",
- "maximum_value": "999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2))",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_step_height":
- {
- "label": "Gradual Infill Step Height",
- "description": "The height of infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0 and gradual_infill_steps > 0 and infill_pattern != 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_before_walls":
- {
- "label": "Infill Before Walls",
- "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.",
- "type": "bool",
- "default_value": true,
- "enabled": "infill_sparse_density > 0 and wall_x_extruder_nr == infill_extruder_nr",
- "settable_per_mesh": true
- },
- "min_infill_area":
- {
- "label": "Minimum Infill Area",
- "description": "Don't generate areas of infill smaller than this (use skin instead).",
- "unit": "mm²",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_enabled":
- {
- "label": "Infill Support",
- "description": "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength.",
- "type": "bool",
- "default_value": false,
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_angle":
- {
- "label": "Infill Overhang Angle",
- "description": "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 40,
- "enabled": "infill_sparse_density > 0 and infill_support_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_edge_support_thickness":
- {
- "label": "Skin Edge Support Thickness",
- "description": "The thickness of the extra infill that supports skin edges.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value": "machine_height",
- "maximum_value_warning": "resolveOrValue('infill_sparse_thickness') * 10",
- "type": "float",
- "value": "0 if infill_sparse_density > 0 else 0",
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_sparse_density > 0",
- "settable_per_mesh": true,
- "children":
- {
- "skin_edge_support_layers":
- {
- "label": "Skin Edge Support Layers",
- "description": "The number of infill layers that supports skin edges.",
- "default_value": 4,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "type": "int",
- "value": "math.ceil(round(skin_edge_support_thickness / resolveOrValue('infill_sparse_thickness'), 4))",
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_sparse_density > 0",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "material":
- {
- "label": "Material",
- "icon": "Spool",
- "description": "Material",
- "type": "category",
- "children":
- {
- "default_material_print_temperature":
- {
- "label": "Default Printing Temperature",
- "description": "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": false,
- "settable_per_extruder": true,
- "settable_per_mesh": false,
- "minimum_value": "-273.15"
- },
- "build_volume_temperature":
- {
- "label": "Build Volume Temperature",
- "description": "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted.",
- "unit": "°C",
- "type": "float",
- "default_value": 0,
- "resolve": "min(extruderValues('build_volume_temperature'))",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "enabled": "machine_heated_build_volume",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "material_print_temperature":
- {
- "label": "Printing Temperature",
- "description": "The temperature used for printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "value": "default_material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not (material_flow_dependent_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_print_temperature_layer_0":
- {
- "label": "Printing Temperature Initial Layer",
- "description": "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer.",
- "unit": "°C",
- "type": "float",
- "default_value": 215,
- "value": "material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_initial_print_temperature":
- {
- "label": "Initial Printing Temperature",
- "description": "The minimal temperature while heating up to the Printing Temperature at which printing can already start.",
- "unit": "°C",
- "type": "float",
- "default_value": 200,
- "value": "max(-273.15, material_print_temperature - 10)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_final_print_temperature":
- {
- "label": "Final Printing Temperature",
- "description": "The temperature to which to already start cooling down just before the end of printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 195,
- "value": "max(-273.15, material_print_temperature - 15)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_extrusion_cool_down_speed":
- {
- "label": "Extrusion Cool Down Speed Modifier",
- "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.",
- "unit": "°C/s",
- "type": "float",
- "default_value": 0.7,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "maximum_value": "machine_nozzle_heat_up_speed",
- "enabled": "material_flow_dependent_temperature or (extruders_enabled_count > 1 and material_final_print_temperature != material_print_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "default_material_bed_temperature":
- {
- "label": "Default Build Plate Temperature",
- "description": "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('default_material_bed_temperature'))",
- "default_value": 60,
- "minimum_value": "-273.15",
- "minimum_value_warning": "build_volume_temperature",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature":
- {
- "label": "Build Plate Temperature",
- "description": "The temperature used for the heated build plate. If this is 0, the build plate is left unheated.",
- "unit": "°C",
- "type": "float",
- "default_value": 60,
- "value": "default_material_bed_temperature",
- "resolve": "max(extruderValues('material_bed_temperature'))",
- "minimum_value": "-273.15",
- "minimum_value_warning": "build_volume_temperature",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature_layer_0":
- {
- "label": "Build Plate Temperature Initial Layer",
- "description": "The temperature used for the heated build plate at the first layer. If this is 0, the build plate is left unheated during the first layer.",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('material_bed_temperature_layer_0'))",
- "default_value": 60,
- "value": "resolveOrValue('material_bed_temperature')",
- "minimum_value": "-273.15",
- "minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_adhesion_tendency":
- {
- "label": "Adhesion Tendency",
- "description": "Surface adhesion tendency.",
- "type": "int",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "10",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_surface_energy":
- {
- "label": "Surface Energy",
- "description": "Surface energy.",
- "unit": "%",
- "type": "int",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_shrinkage_percentage":
- {
- "label": "Scaling Factor Shrinkage Compensation",
- "description": "To compensate for the shrinkage of the material as it cools down, the model will be scaled with this factor.",
- "unit": "%",
- "type": "float",
- "default_value": 100.0,
- "enabled": false,
- "minimum_value": "0.001",
- "minimum_value_warning": "100",
- "maximum_value_warning": "120",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "resolve": "sum(extruderValues(\"material_shrinkage_percentage\")) / len(extruderValues(\"material_shrinkage_percentage\"))"
- },
- "material_crystallinity":
- {
- "label": "Crystalline Material",
- "description": "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?",
- "type": "bool",
- "default_value": false,
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_anti_ooze_retracted_position":
- {
- "label": "Anti-ooze Retracted Position",
- "description": "How far the material needs to be retracted before it stops oozing.",
- "type": "float",
- "unit": "mm",
- "default_value": -4,
- "enabled": false,
- "minimum_value_warning": "-switch_extruder_retraction_amount",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_anti_ooze_retraction_speed":
- {
- "label": "Anti-ooze Retraction Speed",
- "description": "How fast the material needs to be retracted during a filament switch to prevent oozing.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 5,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_retracted_position":
- {
- "label": "Break Preparation Retracted Position",
- "description": "How far the filament can be stretched before it breaks, while heated.",
- "type": "float",
- "unit": "mm",
- "default_value": -16,
- "enabled": false,
- "minimum_value_warning": "-retraction_amount * 4",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_speed":
- {
- "label": "Break Preparation Retraction Speed",
- "description": "How fast the filament needs to be retracted just before breaking it off in a retraction.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 2,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_temperature":
- {
- "label": "Break Preparation Temperature",
- "description": "The temperature used to purge material, should be roughly equal to the highest possible printing temperature.",
- "type": "float",
- "unit": "°C",
- "default_value": 50,
- "value": "material_print_temperature",
- "enabled": false,
- "minimum_value": "-273.15",
- "maximum_value_warning": "300",
- "maximum_value": "365",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_retracted_position":
- {
- "label": "Break Retracted Position",
- "description": "How far to retract the filament in order to break it cleanly.",
- "type": "float",
- "unit": "mm",
- "default_value": -50,
- "enabled": false,
- "minimum_value_warning": "-100",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_speed":
- {
- "label": "Break Retraction Speed",
- "description": "The speed at which to retract the filament in order to break it cleanly.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 25,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_temperature":
- {
- "label": "Break Temperature",
- "description": "The temperature at which the filament is broken for a clean break.",
- "type": "float",
- "unit": "°C",
- "default_value": 50,
- "enabled": false,
- "minimum_value": "-273.15",
- "maximum_value": "365",
- "maximum_value_warning": "300",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flush_purge_speed":
- {
- "label": "Flush Purge Speed",
- "description": "How fast to prime the material after switching to a different material.",
- "type": "float",
- "default_value": 0.5,
- "enabled": false
- },
- "material_flush_purge_length":
- {
- "label": "Flush Purge Length",
- "description": "How much material to use to purge the previous material out of the nozzle (in length of filament) when switching to a different material.",
- "type": "float",
- "default_value": 60,
- "enabled": false
- },
- "material_end_of_filament_purge_speed":
- {
- "label": "End of Filament Purge Speed",
- "description": "How fast to prime the material after replacing an empty spool with a fresh spool of the same material.",
- "type": "float",
- "default_value": 0.5,
- "enabled": false
- },
- "material_end_of_filament_purge_length":
- {
- "label": "End of Filament Purge Length",
- "description": "How much material to use to purge the previous material out of the nozzle (in length of filament) when replacing an empty spool with a fresh spool of the same material.",
- "type": "float",
- "default_value": 20,
- "enabled": false
- },
- "material_maximum_park_duration":
- {
- "label": "Maximum Park Duration",
- "description": "How long the material can be kept out of dry storage safely.",
- "type": "float",
- "default_value": 300,
- "enabled": false
- },
- "material_no_load_move_factor":
- {
- "label": "No Load Move Factor",
- "description": "A factor indicating how much the filament gets compressed between the feeder and the nozzle chamber, used to determine how far to move the material for a filament switch.",
- "type": "float",
- "default_value": 0.940860215,
- "enabled": false
- },
- "material_flow":
- {
- "label": "Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": true,
- "children":
- {
- "wall_material_flow":
- {
- "label": "Wall Flow",
- "description": "Flow compensation on wall lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1",
- "settable_per_mesh": true,
- "children":
- {
- "wall_0_material_flow":
- {
- "label": "Outer Wall Flow",
- "description": "Flow compensation on the outermost wall line.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "wall_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_x_material_flow":
- {
- "label": "Inner Wall(s) Flow",
- "description": "Flow compensation on wall lines for all wall lines except the outermost one.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "wall_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "skin_material_flow":
- {
- "label": "Top/Bottom Flow",
- "description": "Flow compensation on top/bottom lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "roofing_material_flow":
- {
- "label": "Top Surface Skin Flow",
- "description": "Flow compensation on lines of the areas at the top of the print.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "skin_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "infill_material_flow":
- {
- "label": "Infill Flow",
- "description": "Flow compensation on infill lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skirt_brim_material_flow":
- {
- "label": "Skirt/Brim Flow",
- "description": "Flow compensation on skirt or brim lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_material_flow":
- {
- "label": "Support Flow",
- "description": "Flow compensation on support structure lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_interface_material_flow":
- {
- "label": "Support Interface Flow",
- "description": "Flow compensation on lines of support roof or floor.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_material_flow":
- {
- "label": "Support Roof Flow",
- "description": "Flow compensation on support roof lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_material_flow')",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_material_flow":
- {
- "label": "Support Floor Flow",
- "description": "Flow compensation on support floor lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_material_flow')",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "prime_tower_flow":
- {
- "label": "Prime Tower Flow",
- "description": "Flow compensation on prime tower lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "material_flow_layer_0":
- {
- "label": "Initial Layer Flow",
- "description": "Flow compensation for the first layer: the amount of material extruded on the initial layer is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": true
- },
- "material_standby_temperature":
- {
- "label": "Standby Temperature",
- "description": "The temperature of the nozzle when another nozzle is currently used for printing.",
- "type": "float",
- "unit": "°C",
- "default_value": 150,
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "260",
- "maximum_value": "365",
- "enabled": "extruders_enabled_count > 1 and machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "speed":
- {
- "label": "Speed",
- "icon": "SpeedOMeter",
- "description": "Speed",
- "type": "category",
- "children":
- {
- "speed_print":
- {
- "label": "Print Speed",
- "description": "The speed at which printing happens.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value_warning": "150",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "default_value": 60,
- "settable_per_mesh": true,
- "children":
- {
- "speed_infill":
- {
- "label": "Infill Speed",
- "description": "The speed at which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall":
- {
- "label": "Wall Speed",
- "description": "The speed at which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "settable_per_mesh": true,
- "children":
- {
- "speed_wall_0":
- {
- "label": "Outer Wall Speed",
- "description": "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_wall",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall_x":
- {
- "label": "Inner Wall Speed",
- "description": "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_wall * 2",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "speed_roofing":
- {
- "label": "Top Surface Skin Speed",
- "description": "The speed at which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 25,
- "value": "speed_topbottom",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "speed_topbottom":
- {
- "label": "Top/Bottom Speed",
- "description": "The speed at which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "settable_per_mesh": true
- },
- "speed_support":
- {
- "label": "Support Speed",
- "description": "The speed at which the support structure is printed. Printing support at higher speeds can greatly reduce printing time. The surface quality of the support structure is not important since it is removed after printing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_infill":
- {
- "label": "Support Infill Speed",
- "description": "The speed at which the infill of support is printed. Printing the infill at lower speeds improves stability.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 60,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "value": "speed_support",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_interface":
- {
- "label": "Support Interface Speed",
- "description": "The speed at which the roofs and floors of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "speed_support / 1.5",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_roof":
- {
- "label": "Support Roof Speed",
- "description": "The speed at which the roofs of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_bottom":
- {
- "label": "Support Floor Speed",
- "description": "The speed at which the floor of support is printed. Printing it at lower speed can improve adhesion of support on top of your model.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "speed_prime_tower":
- {
- "label": "Prime Tower Speed",
- "description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 60,
- "value": "speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "speed_travel":
- {
- "label": "Travel Speed",
- "description": "The speed at which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 120,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_print if magic_spiralize else 120",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_layer_0":
- {
- "label": "Initial Layer Speed",
- "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate. Does not affect the build plate adhesion structures themselves, like brim and raft.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 30,
- "value": "speed_print * 30 / 60",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true,
- "children":
- {
- "speed_print_layer_0":
- {
- "label": "Initial Layer Print Speed",
- "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 30,
- "value": "speed_layer_0",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true
- },
- "speed_travel_layer_0":
- {
- "label": "Initial Layer Travel Speed",
- "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 60,
- "value": "speed_layer_0 * speed_travel / speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "skirt_brim_speed":
- {
- "label": "Skirt/Brim Speed",
- "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_layer_0",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "speed_z_hop":
- {
- "label": "Z Hop Speed",
- "description": "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_z",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_slowdown_layers":
- {
- "label": "Number of Slower Layers",
- "description": "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers.",
- "type": "int",
- "default_value": 2,
- "resolve": "round(sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers')))",
- "minimum_value": "0",
- "maximum_value_warning": "3.2 / resolveOrValue('layer_height')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "speed_equalize_flow_enabled":
- {
- "label": "Equalize Filament Flow",
- "description": "Print thinner than normal lines faster so that the amount of material extruded per second remains the same. Thin pieces in your model might require lines printed with smaller line width than provided in the settings. This setting controls the speed changes for such lines.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_equalize_flow_max":
- {
- "label": "Maximum Speed for Flow Equalization",
- "description": "Maximum print speed when adjusting the print speed in order to equalize flow.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "speed_equalize_flow_enabled",
- "default_value": 150,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_enabled":
- {
- "label": "Enable Acceleration Control",
- "description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('acceleration_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "acceleration_print":
- {
- "label": "Print Acceleration",
- "description": "The acceleration with which printing happens.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_infill":
- {
- "label": "Infill Acceleration",
- "description": "The acceleration with which infill is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall":
- {
- "label": "Wall Acceleration",
- "description": "The acceleration with which the walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_wall_0":
- {
- "label": "Outer Wall Acceleration",
- "description": "The acceleration with which the outermost walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall_x":
- {
- "label": "Inner Wall Acceleration",
- "description": "The acceleration with which all inner walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "acceleration_roofing":
- {
- "label": "Top Surface Skin Acceleration",
- "description": "The acceleration with which top surface skin layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_topbottom":
- {
- "label": "Top/Bottom Acceleration",
- "description": "The acceleration with which top/bottom layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_support":
- {
- "label": "Support Acceleration",
- "description": "The acceleration with which the support structure is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_infill":
- {
- "label": "Support Infill Acceleration",
- "description": "The acceleration with which the infill of support is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_interface":
- {
- "label": "Support Interface Acceleration",
- "description": "The acceleration with which the roofs and floors of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_roof":
- {
- "label": "Support Roof Acceleration",
- "description": "The acceleration with which the roofs of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_roof_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_bottom":
- {
- "label": "Support Floor Acceleration",
- "description": "The acceleration with which the floors of support are printed. Printing them at lower acceleration can improve adhesion of support on top of your model.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_bottom_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "acceleration_prime_tower":
- {
- "label": "Prime Tower Acceleration",
- "description": "The acceleration with which the prime tower is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_travel":
- {
- "label": "Travel Acceleration",
- "description": "The acceleration with which travel moves are made.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 5000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print if magic_spiralize else 5000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false
- },
- "acceleration_layer_0":
- {
- "label": "Initial Layer Acceleration",
- "description": "The acceleration for the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_print_layer_0":
- {
- "label": "Initial Layer Print Acceleration",
- "description": "The acceleration during the printing of the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true
- },
- "acceleration_travel_layer_0":
- {
- "label": "Initial Layer Travel Acceleration",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0 * acceleration_travel / acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_skirt_brim":
- {
- "label": "Skirt/Brim Acceleration",
- "description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "jerk_enabled":
- {
- "label": "Enable Jerk Control",
- "description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('jerk_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "jerk_print":
- {
- "label": "Print Jerk",
- "description": "The maximum instantaneous velocity change of the print head.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_infill":
- {
- "label": "Infill Jerk",
- "description": "The maximum instantaneous velocity change with which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall":
- {
- "label": "Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_wall_0":
- {
- "label": "Outer Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the outermost walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall_x":
- {
- "label": "Inner Wall Jerk",
- "description": "The maximum instantaneous velocity change with which all inner walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "jerk_roofing":
- {
- "label": "Top Surface Skin Jerk",
- "description": "The maximum instantaneous velocity change with which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_topbottom":
- {
- "label": "Top/Bottom Jerk",
- "description": "The maximum instantaneous velocity change with which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_support":
- {
- "label": "Support Jerk",
- "description": "The maximum instantaneous velocity change with which the support structure is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_extruder_nr",
- "children":
- {
- "jerk_support_infill":
- {
- "label": "Support Infill Jerk",
- "description": "The maximum instantaneous velocity change with which the infill of support is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_interface":
- {
- "label": "Support Interface Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs and floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "jerk_support_roof":
- {
- "label": "Support Roof Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_bottom":
- {
- "label": "Support Floor Jerk",
- "description": "The maximum instantaneous velocity change with which the floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "jerk_prime_tower":
- {
- "label": "Prime Tower Jerk",
- "description": "The maximum instantaneous velocity change with which the prime tower is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "jerk_travel":
- {
- "label": "Travel Jerk",
- "description": "The maximum instantaneous velocity change with which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_print if magic_spiralize else 30",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false
- },
- "jerk_layer_0":
- {
- "label": "Initial Layer Jerk",
- "description": "The print maximum instantaneous velocity change for the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_print_layer_0":
- {
- "label": "Initial Layer Print Jerk",
- "description": "The maximum instantaneous velocity change during the printing of the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true
- },
- "jerk_travel_layer_0":
- {
- "label": "Initial Layer Travel Jerk",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0 * jerk_travel / jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "jerk_skirt_brim":
- {
- "label": "Skirt/Brim Jerk",
- "description": "The maximum instantaneous velocity change with which the skirt and brim are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_layer_0",
- "enabled": "resolveOrValue('jerk_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "travel":
- {
- "label": "Travel",
- "icon": "PrintTravel",
- "description": "travel",
- "type": "category",
- "children":
- {
- "retraction_enable":
- {
- "label": "Enable Retraction",
- "description": "Retract the filament when the nozzle is moving over a non-printed area.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retract_at_layer_change":
- {
- "label": "Retract at Layer Change",
- "description": "Retract the filament when the nozzle is moving to the next layer.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_amount":
- {
- "label": "Retraction Distance",
- "description": "The length of material retracted during a retraction move.",
- "unit": "mm",
- "type": "float",
- "default_value": 6.5,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_speed":
- {
- "label": "Retraction Speed",
- "description": "The speed at which the filament is retracted and primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "retraction_retract_speed":
- {
- "label": "Retraction Retract Speed",
- "description": "The speed at which the filament is retracted during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_prime_speed":
- {
- "label": "Retraction Prime Speed",
- "description": "The speed at which the filament is primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "retraction_extra_prime_amount":
- {
- "label": "Retraction Extra Prime Amount",
- "description": "Some material can ooze away during a travel move, which can be compensated for here.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "5.0",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_min_travel":
- {
- "label": "Retraction Minimum Travel",
- "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "value": "line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "line_width * 1.5",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_count_max":
- {
- "label": "Maximum Retraction Count",
- "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.",
- "default_value": 90,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "int",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_extrusion_window":
- {
- "label": "Minimum Extrusion Distance Window",
- "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.",
- "unit": "mm",
- "type": "float",
- "default_value": 4.5,
- "minimum_value": "0",
- "maximum_value_warning": "retraction_amount * 2",
- "value": "retraction_amount",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "limit_support_retractions":
- {
- "label": "Limit Support Retractions",
- "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_combing":
- {
- "label": "Combing Mode",
- "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas or to only comb within the infill.",
- "type": "enum",
- "options":
- {
- "off": "Off",
- "all": "All",
- "noskin": "Not in Skin",
- "infill": "Within Infill"
- },
- "default_value": "all",
- "resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('infill' if 'infill' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "retraction_combing_max_distance":
- {
- "label": "Max Comb Distance With No Retract",
- "description": "When greater than zero, combing travel moves that are longer than this distance will use retraction. If set to zero, there is no maximum and combing moves will not use retraction.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_retract_before_outer_wall":
- {
- "label": "Retract Before Outer Wall",
- "description": "Always retract when moving to start an outer wall.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "travel_avoid_other_parts":
- {
- "label": "Avoid Printed Parts When Traveling",
- "description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_supports":
- {
- "label": "Avoid Supports When Traveling",
- "description": "The nozzle avoids already printed supports when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": false,
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_distance":
- {
- "label": "Travel Avoid Distance",
- "description": "The distance between the nozzle and already printed parts when avoiding during travel moves.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.625,
- "value": "machine_nozzle_tip_outer_diameter / 2 * 1.25",
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_tip_outer_diameter * 0.5",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter * 5",
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "layer_start_x":
- {
- "label": "Layer Start X",
- "description": "The X coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_width / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "layer_start_y":
- {
- "label": "Layer Start Y",
- "description": "The Y coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "retraction_hop_enabled": {
- "label": "Z Hop When Retracted",
- "description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_only_when_collides": {
- "label": "Z Hop Only Over Printed Parts",
- "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop": {
- "label": "Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_after_extruder_switch": {
- "label": "Z Hop After Extruder Switch",
- "description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_hop_enabled and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_after_extruder_switch_height":
- {
- "label": "Z Hop After Extruder Switch Height",
- "description": "The height difference when performing a Z Hop after extruder switch.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_hop",
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_after_extruder_switch and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cooling":
- {
- "label": "Cooling",
- "icon": "Fan",
- "description": "Cooling",
- "type": "category",
- "children":
- {
- "cool_fan_enabled":
- {
- "label": "Enable Print Cooling",
- "description": "Enables the print cooling fans while printing. The fans improve print quality on layers with short layer times and bridging / overhangs.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed":
- {
- "label": "Fan Speed",
- "description": "The speed at which the print cooling fans spin.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "value": "100.0 if cool_fan_enabled else 0.0",
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_speed_min":
- {
- "label": "Regular Fan Speed",
- "description": "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "value": "cool_fan_speed",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_max":
- {
- "label": "Maximum Fan Speed",
- "description": "The speed at which the fans spin on the minimum layer time. The fan speed gradually increases between the regular fan speed and maximum fan speed when the threshold is hit.",
- "unit": "%",
- "type": "float",
- "minimum_value": "max(0, cool_fan_speed_min)",
- "maximum_value": "100",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "value": "cool_fan_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time_fan_speed_max":
- {
- "label": "Regular/Maximum Fan Speed Threshold",
- "description": "The layer time which sets the threshold between regular fan speed and maximum fan speed. Layers that print slower than this time use regular fan speed. For faster layers the fan speed gradually increases towards the maximum fan speed.",
- "unit": "s",
- "type": "float",
- "default_value": 10,
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_0":
- {
- "label": "Initial Fan Speed",
- "description": "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_full_at_height":
- {
- "label": "Regular Fan Speed at Height",
- "description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.5,
- "value": "0 if resolveOrValue('adhesion_type') == 'raft' else resolveOrValue('layer_height_0')",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_full_layer":
- {
- "label": "Regular Fan Speed at Layer",
- "description": "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "1",
- "maximum_value_warning": "10 / resolveOrValue('layer_height')",
- "value": "max(1, int(math.floor((cool_fan_full_at_height - resolveOrValue('layer_height_0')) / resolveOrValue('layer_height')) + 2))",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time":
- {
- "label": "Minimum Layer Time",
- "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.",
- "unit": "s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_min_speed":
- {
- "label": "Minimum Speed",
- "description": "The minimum print speed, despite slowing down due to the minimum layer time. When the printer would slow down too much, the pressure in the nozzle would be too low and result in bad print quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_lift_head":
- {
- "label": "Lift Head",
- "description": "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support":
- {
- "label": "Support",
- "type": "category",
- "icon": "Support",
- "description": "Support",
- "children":
- {
- "support_enable":
- {
- "label": "Generate Support",
- "description": "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_extruder_nr":
- {
- "label": "Support Extruder",
- "description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "int(defaultExtruderPosition())",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children": {
- "support_infill_extruder_nr":
- {
- "label": "Support Infill Extruder",
- "description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_extruder_nr_layer_0":
- {
- "label": "First Layer Support Extruder",
- "description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_interface_extruder_nr":
- {
- "label": "Support Interface Extruder",
- "description": "The extruder train to use for printing the roofs and floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children":
- {
- "support_roof_extruder_nr":
- {
- "label": "Support Roof Extruder",
- "description": "The extruder train to use for printing the roofs of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_bottom_extruder_nr":
- {
- "label": "Support Floor Extruder",
- "description": "The extruder train to use for printing the floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- }
- }
- },
- "support_structure":
- {
- "label": "Support Structure",
- "description": "Chooses between the techniques available to generate support. \"Normal\" support creates a support structure directly below the overhanging parts and drops those areas straight down. \"Tree\" support creates branches towards the overhanging areas that support the model on the tips of those branches, and allows the branches to crawl around the model to support it from the build plate as much as possible.",
- "type": "enum",
- "options":
- {
- "normal": "Normal",
- "tree": "Tree"
- },
- "enabled": "support_enable",
- "default_value": "normal",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_tree_angle":
- {
- "label": "Tree Support Branch Angle",
- "description": "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "60",
- "default_value": 40,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_distance":
- {
- "label": "Tree Support Branch Distance",
- "description": "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "default_value": 1,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": true
- },
- "support_tree_branch_diameter":
- {
- "label": "Tree Support Branch Diameter",
- "description": "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width * 2",
- "default_value": 2,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_diameter_angle":
- {
- "label": "Tree Support Branch Diameter Angle",
- "description": "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "89.9999",
- "maximum_value_warning": "15",
- "default_value": 5,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_collision_resolution":
- {
- "label": "Tree Support Collision Resolution",
- "description": "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width / 4",
- "maximum_value_warning": "support_line_width * 2",
- "default_value": 0.4,
- "value": "support_line_width / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree' and support_tree_branch_diameter_angle > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_type":
- {
- "label": "Support Placement",
- "description": "Adjusts the placement of the support structures. The placement can be set to touching build plate or everywhere. When set to everywhere the support structures will also be printed on the model.",
- "type": "enum",
- "options":
- {
- "buildplate": "Touching Buildplate",
- "everywhere": "Everywhere"
- },
- "default_value": "everywhere",
- "resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else 'buildplate'",
- "enabled": "support_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_angle":
- {
- "label": "Support Overhang Angle",
- "description": "The minimum angle of overhangs for which support is added. At a value of 0° all overhangs are supported, 90° will not provide any support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "80",
- "default_value": 50,
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_pattern":
- {
- "label": "Support Pattern",
- "description": "The pattern of the support structures of the print. The different options available result in sturdy or easy to remove support.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross",
- "gyroid": "Gyroid"
- },
- "default_value": "zigzag",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_wall_count":
- {
- "label": "Support Wall Line Count",
- "description": "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used.",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "1 if support_pattern == 'concentric' else 0",
- "maximum_value_warning": "0 if (support_skip_some_zags and support_pattern == 'zigzag') else 3",
- "type": "int",
- "value": "1 if support_enable and support_structure == 'tree' else (1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0)",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "zig_zaggify_support":
- {
- "label": "Connect Support Lines",
- "description": "Connect the ends of the support lines together. Enabling this setting can make your support more sturdy and reduce underextrusion, but it will cost more material.",
- "type": "bool",
- "default_value": false,
- "value": "support_pattern == 'cross' or support_pattern == 'gyroid'",
- "enabled": "(support_enable or support_meshes_present) and (support_pattern == 'lines' or support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid')",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_connect_zigzags":
- {
- "label": "Connect Support ZigZags",
- "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_infill_rate":
- {
- "label": "Support Density",
- "description": "Adjusts the density of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 15,
- "value": "15 if support_enable and support_structure == 'normal' else 0 if support_enable and support_structure == 'tree' else 15",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_line_distance":
- {
- "label": "Support Line Distance",
- "description": "Distance between the printed support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_meshes_present",
- "value": "0 if support_infill_rate == 0 else (support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_initial_layer_line_distance":
- {
- "label": "Initial Layer Support Line Distance",
- "description": "Distance between the printed initial layer support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_meshes_present",
- "value": "support_line_distance",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_infill_angles":
- {
- "label": "Support Infill Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees.",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "(support_enable or support_meshes_present) and support_pattern != 'concentric' and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_brim_enable":
- {
- "label": "Enable Support Brim",
- "description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.",
- "type": "bool",
- "default_value": false,
- "value": "support_structure == 'tree'",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_brim_width":
- {
- "label": "Support Brim Width",
- "description": "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material.",
- "type": "float",
- "unit": "mm",
- "default_value": 8.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "50.0",
- "enabled": "(support_enable or support_meshes_present) and support_brim_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr",
- "children":
- {
- "support_brim_line_count":
- {
- "label": "Support Brim Line Count",
- "description": "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material.",
- "type": "int",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50 / skirt_brim_line_width",
- "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
- "enabled": "(support_enable or support_meshes_present) and support_brim_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr"
- }
- }
- },
- "support_z_distance":
- {
- "label": "Support Z Distance",
- "description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true,
- "children":
- {
- "support_top_distance":
- {
- "label": "Support Top Distance",
- "description": "Distance from the top of the support to the print.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "type": "float",
- "enabled": "support_enable or support_meshes_present",
- "value": "extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance')",
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_bottom_distance":
- {
- "label": "Support Bottom Distance",
- "description": "Distance from the print to the bottom of the support.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "value": "extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0",
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and resolveOrValue('support_type') == 'everywhere'",
- "settable_per_mesh": true
- }
- }
- },
- "support_xy_distance":
- {
- "label": "Support X/Y Distance",
- "description": "Distance of the support structure from the print in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "1.5 * machine_nozzle_tip_outer_diameter",
- "default_value": 0.7,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_xy_overrides_z":
- {
- "label": "Support Distance Priority",
- "description": "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs.",
- "type": "enum",
- "options":
- {
- "xy_overrides_z": "X/Y overrides Z",
- "z_overrides_xy": "Z overrides X/Y"
- },
- "default_value": "z_overrides_xy",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_xy_distance_overhang":
- {
- "label": "Minimum Support X/Y Distance",
- "description": "Distance of the support structure from the overhang in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_xy_distance - support_line_width * 2",
- "maximum_value_warning": "support_xy_distance",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_xy_overrides_z == 'z_overrides_xy'",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_height":
- {
- "label": "Support Stair Step Height",
- "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures. Set to zero to turn off the stair-like behaviour.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_width":
- {
- "label": "Support Stair Step Maximum Width",
- "description": "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.",
- "unit": "mm",
- "type": "float",
- "default_value": 5.0,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_min_slope":
- {
- "label": "Support Stair Step Minimum Slope Angle",
- "description": "The minimum slope of the area for stair-stepping to take effect. Low values should make support easier to remove on shallower slopes, but really low values may result in some very counter-intuitive results on other parts of the model.",
- "unit": "°",
- "type": "float",
- "default_value": 10.0,
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "minimum_value": "0.01",
- "maximum_value": "89.99",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_join_distance":
- {
- "label": "Support Join Distance",
- "description": "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "(support_enable and support_structure == 'normal') or support_meshes_present",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_offset":
- {
- "label": "Support Horizontal Expansion",
- "description": "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "-1 * machine_nozzle_size",
- "maximum_value_warning": "10 * machine_nozzle_size",
- "enabled": "(support_enable and support_structure == 'normal') or support_meshes_present",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_infill_sparse_thickness":
- {
- "label": "Support Infill Layer Thickness",
- "description": "The thickness per layer of support infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height')",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * 8",
- "value": "resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "gradual_support_infill_steps":
- {
- "label": "Gradual Support Infill Steps",
- "description": "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (support_pattern == 'cross' or support_pattern == 'lines' or support_pattern == 'zigzag' or support_pattern == 'concentric') else 5",
- "maximum_value": "999999 if support_line_distance == 0 else (20 - math.log(support_line_distance) / math.log(2))",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "gradual_support_infill_step_height":
- {
- "label": "Gradual Support Infill Step Height",
- "description": "The height of support infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0 and gradual_support_infill_steps > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "minimum_support_area":
- {
- "label": "Minimum Support Area",
- "description": "Minimum area size for support polygons. Polygons which have an area smaller than this value will not be generated.",
- "unit": "mm²",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "0",
- "maximum_value_warning": "5",
- "enabled": "(support_enable or support_meshes_present) and support_structure == 'normal'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_interface_enable":
- {
- "label": "Enable Support Interface",
- "description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_enable":
- {
- "label": "Enable Support Roof",
- "description": "Generate a dense slab of material between the top of support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_enable":
- {
- "label": "Enable Support Floor",
- "description": "Generate a dense slab of material between the bottom of the support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_height":
- {
- "label": "Support Interface Thickness",
- "description": "The thickness of the interface of the support where it touches with the model on the bottom or the top.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + layer_height",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_height":
- {
- "label": "Support Roof Thickness",
- "description": "The thickness of the support roofs. This controls the amount of dense layers at the top of the support on which the model rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "support_top_distance + layer_height",
- "maximum_value_warning": "10",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "support_bottom_height":
- {
- "label": "Support Floor Thickness",
- "description": "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_height')",
- "minimum_value": "0",
- "minimum_value_warning": "min(support_bottom_distance + layer_height, support_bottom_stair_step_height)",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_skip_height": {
- "label": "Support Interface Resolution",
- "description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "support_interface_height",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "support_interface_density":
- {
- "label": "Support Interface Density",
- "description": "Adjusts the density of the roofs and floors of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_density":
- {
- "label": "Support Roof Density",
- "description": "The density of the roofs of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_distance":
- {
- "label": "Support Roof Line Distance",
- "description": "Distance between the printed support roof lines. This setting is calculated by the Support Roof Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_roof_line_width - 0.0001",
- "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_bottom_density":
- {
- "label": "Support Floor Density",
- "description": "The density of the floors of the support structure. A higher value results in better adhesion of the support on top of the model.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_bottom_line_distance":
- {
- "label": "Support Floor Line Distance",
- "description": "Distance between the printed support floor lines. This setting is calculated by the Support Floor Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_bottom_line_width - 0.0001",
- "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "support_interface_pattern":
- {
- "label": "Support Interface Pattern",
- "description": "The pattern with which the interface of the support with the model is printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_pattern":
- {
- "label": "Support Roof Pattern",
- "description": "The pattern with which the roofs of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_pattern":
- {
- "label": "Support Floor Pattern",
- "description": "The pattern with which the floors of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "minimum_interface_area":
- {
- "label": "Minimum Support Interface Area",
- "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "minimum_value": "0",
- "minimum_value_warning": "minimum_support_area",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true,
- "children":
- {
- "minimum_roof_area":
- {
- "label": "Minimum Support Roof Area",
- "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "value": "extruderValue(support_roof_extruder_nr, 'minimum_interface_area')",
- "minimum_value": "0",
- "minimum_value_warning": "minimum_support_area",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "minimum_bottom_area":
- {
- "label": "Minimum Support Floor Area",
- "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "value": "extruderValue(support_bottom_extruder_nr, 'minimum_interface_area')",
- "minimum_value": "0",
- "minimum_value_warning": "minimum_support_area",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_offset":
- {
- "label": "Support Interface Horizontal Expansion",
- "description": "Amount of offset applied to the support interface polygons.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_offset":
- {
- "label": "Support Roof Horizontal Expansion",
- "description": "Amount of offset applied to the roofs of the support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')",
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_offset":
- {
- "label": "Support Floor Horizontal Expansion",
- "description": "Amount of offset applied to the floors of the support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')",
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_interface_angles":
- {
- "label": "Support Interface Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable and support_interface_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_angles":
- {
- "label": "Support Roof Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "support_interface_angles",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable and support_roof_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_angles":
- {
- "label": "Support Floor Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "support_interface_angles",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable and support_bottom_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_fan_enable":
- {
- "label": "Fan Speed Override",
- "description": "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": false
- },
- "support_supported_skin_fan_speed":
- {
- "label": "Supported Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_fan_enable",
- "settable_per_mesh": false
- },
- "support_use_towers":
- {
- "label": "Use Towers",
- "description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure == 'normal'",
- "settable_per_mesh": true
- },
- "support_tower_diameter":
- {
- "label": "Tower Diameter",
- "description": "The diameter of a special tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_tower_maximum_supported_diameter":
- {
- "label": "Maximum Tower-Supported Diameter",
- "description": "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "maximum_value": "support_tower_diameter",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_tower_roof_angle":
- {
- "label": "Tower Roof Angle",
- "description": "The angle of a rooftop of a tower. A higher value results in pointed tower roofs, a lower value results in flattened tower roofs.",
- "unit": "°",
- "type": "int",
- "minimum_value": "0",
- "maximum_value": "90",
- "default_value": 65,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_mesh_drop_down":
- {
- "label": "Drop Down Support Mesh",
- "description": "Make support everywhere below the support mesh, so that there's no overhang in the support mesh.",
- "type": "bool",
- "default_value": true,
- "enabled": "support_mesh",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "support_meshes_present":
- {
- "label": "Scene Has Support Meshes",
- "description": "There are support meshes present in the scene. This setting is controlled by Cura.",
- "type": "bool",
- "default_value": false,
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "platform_adhesion":
- {
- "label": "Build Plate Adhesion",
- "type": "category",
- "icon": "Adhesion",
- "description": "Adhesion",
- "children":
- {
- "prime_blob_enable":
- {
- "label": "Enable Prime Blob",
- "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false,
- "warning_value": "True if resolveOrValue('print_sequence') == 'one_at_a_time' else None"
- },
- "extruder_prime_pos_x":
- {
- "label": "Extruder Prime X Position",
- "description": "The X coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_width / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_width / 2 if machine_center_is_zero else machine_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "extruder_prime_pos_y":
- {
- "label": "Extruder Prime Y Position",
- "description": "The Y coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_depth / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_depth / 2 if machine_center_is_zero else machine_depth",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "adhesion_type":
- {
- "label": "Build Plate Adhesion Type",
- "description": "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model.",
- "type": "enum",
- "options":
- {
- "skirt": "Skirt",
- "brim": "Brim",
- "raft": "Raft",
- "none": "None"
- },
- "default_value": "brim",
- "resolve": "extruderValue(adhesion_extruder_nr, 'adhesion_type')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "adhesion_extruder_nr":
- {
- "label": "Build Plate Adhesion Extruder",
- "description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "int(defaultExtruderPosition())",
- "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "skirt_line_count":
- {
- "label": "Skirt Line Count",
- "description": "Multiple skirt lines help to prime your extrusion better for small models. Setting this to 0 will disable the skirt.",
- "type": "int",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "skirt_gap":
- {
- "label": "Skirt Distance",
- "description": "The horizontal distance between the skirt and the first layer of the print.\nThis is the minimum distance. Multiple skirt lines will extend outwards from this distance.",
- "unit": "mm",
- "type": "float",
- "default_value": 3,
- "minimum_value_warning": "max(extruderValues('machine_nozzle_size'))",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "skirt_brim_minimal_length":
- {
- "label": "Skirt/Brim Minimum Length",
- "description": "The minimum length of the skirt or brim. If this length is not reached by all skirt or brim lines together, more skirt or brim lines will be added until the minimum length is reached. Note: If the line count is set to 0 this is ignored.",
- "unit": "mm",
- "type": "float",
- "default_value": 250,
- "minimum_value": "0",
- "minimum_value_warning": "25",
- "maximum_value_warning": "2500",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "brim_width":
- {
- "label": "Brim Width",
- "description": "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area.",
- "type": "float",
- "unit": "mm",
- "default_value": 8.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "50.0",
- "maximum_value": "0.5 * min(machine_width, machine_depth)",
- "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "brim_line_count":
- {
- "label": "Brim Line Count",
- "description": "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area.",
- "type": "int",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50 / skirt_brim_line_width",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
- "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
- "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "brim_gap":
- {
- "label": "Brim Distance",
- "description": "The horizontal distance between the first brim line and the outline of the first layer of the print. A small gap can make the brim easier to remove while still providing the thermal benefits.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "skirt_brim_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": true,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "brim_replaces_support":
- {
- "label": "Brim Replaces Support",
- "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr"
- },
- "brim_outside_only":
- {
- "label": "Brim Only on Outside",
- "description": "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_margin":
- {
- "label": "Raft Extra Margin",
- "description": "If the raft is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.",
- "unit": "mm",
- "type": "float",
- "default_value": 15,
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_smoothing":
- {
- "label": "Raft Smoothing",
- "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.",
- "unit": "mm",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_airgap":
- {
- "label": "Raft Air Gap",
- "description": "The gap between the final raft layer and the first layer of the model. Only the first layer is raised by this amount to lower the bonding between the raft layer and the model. Makes it easier to peel off the raft.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "min(extruderValues('machine_nozzle_size'))",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "layer_0_z_overlap":
- {
- "label": "Initial Layer Z Overlap",
- "description": "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.22,
- "value": "raft_airgap / 2",
- "minimum_value": "0",
- "maximum_value_warning": "raft_airgap",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_layers":
- {
- "label": "Raft Top Layers",
- "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_thickness":
- {
- "label": "Raft Top Layer Thickness",
- "description": "Layer thickness of the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "value": "resolveOrValue('layer_height')",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_line_width":
- {
- "label": "Raft Top Line Width",
- "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.1",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_surface_line_spacing":
- {
- "label": "Raft Top Spacing",
- "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "raft_surface_line_width",
- "maximum_value_warning": "raft_surface_line_width * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "raft_surface_line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_thickness":
- {
- "label": "Raft Middle Thickness",
- "description": "Layer thickness of the middle raft layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.15,
- "value": "resolveOrValue('layer_height') * 1.5",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_line_width":
- {
- "label": "Raft Middle Line Width",
- "description": "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.7,
- "value": "line_width * 2",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_line_spacing":
- {
- "label": "Raft Middle Spacing",
- "description": "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.9,
- "value": "raft_interface_line_width + 0.2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "15.0",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_thickness":
- {
- "label": "Raft Base Thickness",
- "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "value": "resolveOrValue('layer_height_0') * 1.2",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * raft_base_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_line_width":
- {
- "label": "Raft Base Line Width",
- "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0.001",
- "value": "machine_nozzle_size * 2",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_line_spacing":
- {
- "label": "Raft Base Line Spacing",
- "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.6,
- "value": "raft_base_line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_base_line_width",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_speed":
- {
- "label": "Raft Print Speed",
- "description": "The speed at which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "speed_print / 60 * 30",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_speed":
- {
- "label": "Raft Top Print Speed",
- "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_speed":
- {
- "label": "Raft Middle Print Speed",
- "description": "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "value": "raft_speed * 0.75",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_speed":
- {
- "label": "Raft Base Print Speed",
- "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "0.75 * raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_acceleration":
- {
- "label": "Raft Print Acceleration",
- "description": "The acceleration with which the raft is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_acceleration":
- {
- "label": "Raft Top Print Acceleration",
- "description": "The acceleration with which the top raft layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_acceleration":
- {
- "label": "Raft Middle Print Acceleration",
- "description": "The acceleration with which the middle raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_acceleration":
- {
- "label": "Raft Base Print Acceleration",
- "description": "The acceleration with which the base raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_jerk":
- {
- "label": "Raft Print Jerk",
- "description": "The jerk with which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "value": "jerk_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_jerk":
- {
- "label": "Raft Top Print Jerk",
- "description": "The jerk with which the top raft layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_jerk":
- {
- "label": "Raft Middle Print Jerk",
- "description": "The jerk with which the middle raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_jerk":
- {
- "label": "Raft Base Print Jerk",
- "description": "The jerk with which the base raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- },
- "raft_fan_speed":
- {
- "label": "Raft Fan Speed",
- "description": "The fan speed for the raft.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_fan_speed":
- {
- "label": "Raft Top Fan Speed",
- "description": "The fan speed for the top raft layers.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_interface_fan_speed":
- {
- "label": "Raft Middle Fan Speed",
- "description": "The fan speed for the middle raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- },
- "raft_base_fan_speed":
- {
- "label": "Raft Base Fan Speed",
- "description": "The fan speed for the base raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr"
- }
- }
- }
- }
- },
- "dual":
- {
- "label": "Dual Extrusion",
- "type": "category",
- "icon": "DualExtrusion",
- "description": "Settings used for printing with multiple extruders.",
- "children":
- {
- "prime_tower_enable":
- {
- "label": "Enable Prime Tower",
- "description": "Print a tower next to the print which serves to prime the material after each nozzle switch.",
- "type": "bool",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "resolve": "(extruders_enabled_count > 1) and any(extruderValues('prime_tower_enable'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_size":
- {
- "label": "Prime Tower Size",
- "description": "The width of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 20,
- "resolve": "max(extruderValues('prime_tower_size'))",
- "minimum_value": "0",
- "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
- "minimum_value_warning": "max(extruderValues('prime_tower_line_width')) * 2",
- "maximum_value_warning": "42",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_min_volume":
- {
- "label": "Prime Tower Minimum Volume",
- "description": "The minimum volume for each layer of the prime tower in order to purge enough material.",
- "unit": "mm³",
- "type": "float",
- "default_value": 6,
- "minimum_value": "0",
- "maximum_value_warning": "(resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_position_x":
- {
- "label": "Prime Tower X Position",
- "description": "The x coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_x'))) - 1",
- "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width",
- "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_position_y":
- {
- "label": "Prime Tower Y Position",
- "description": "The y coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_y'))) - 3",
- "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')",
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_wipe_enabled":
- {
- "label": "Wipe Inactive Nozzle on Prime Tower",
- "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_brim_enable":
- {
- "label": "Prime Tower Brim",
- "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') != 'raft')",
- "resolve": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') in ('none', 'skirt'))",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_enabled":
- {
- "label": "Enable Ooze Shield",
- "description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.",
- "type": "bool",
- "resolve": "any(extruderValues('ooze_shield_enabled'))",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_angle":
- {
- "label": "Ooze Shield Angle",
- "description": "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material.",
- "type": "float",
- "unit": "°",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 60,
- "resolve": "min(extruderValues('ooze_shield_angle'))",
- "minimum_value": "0",
- "maximum_value": "90",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_dist":
- {
- "label": "Ooze Shield Distance",
- "description": "Distance of the ooze shield from the print, in the X/Y directions.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 2,
- "resolve": "max(extruderValues('ooze_shield_dist'))",
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "switch_extruder_retraction_amount":
- {
- "label": "Nozzle Switch Retraction Distance",
- "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.",
- "type": "float",
- "unit": "mm",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "machine_heat_zone_length",
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_retraction_speeds":
- {
- "label": "Nozzle Switch Retraction Speed",
- "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "switch_extruder_retraction_speed":
- {
- "label": "Nozzle Switch Retract Speed",
- "description": "The speed at which the filament is retracted during a nozzle switch retract.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_prime_speed":
- {
- "label": "Nozzle Switch Prime Speed",
- "description": "The speed at which the filament is pushed back after a nozzle switch retraction.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "switch_extruder_extra_prime_amount":
- {
- "label": "Nozzle Switch Extra Prime Amount",
- "description": "Extra material to prime after nozzle switching.",
- "type": "float",
- "unit": "mm³",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "meshfix":
- {
- "label": "Mesh Fixes",
- "type": "category",
- "icon": "Bandage",
- "description": "Make the meshes more suited for 3D printing.",
- "children":
- {
- "meshfix_union_all":
- {
- "label": "Union Overlapping Volumes",
- "description": "Ignore the internal geometry arising from overlapping volumes within a mesh and print the volumes as one. This may cause unintended internal cavities to disappear.",
- "type": "bool",
- "default_value": true,
- "value": "magic_mesh_surface_mode != 'surface'",
- "settable_per_mesh": true
- },
- "meshfix_union_all_remove_holes":
- {
- "label": "Remove All Holes",
- "description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "meshfix_extensive_stitching":
- {
- "label": "Extensive Stitching",
- "description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "meshfix_keep_open_polygons":
- {
- "label": "Keep Disconnected Faces",
- "description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper g-code.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "multiple_mesh_overlap":
- {
- "label": "Merged Meshes Overlap",
- "description": "Make meshes which are touching each other overlap a bit. This makes them bond together better.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.15,
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "carve_multiple_volumes":
- {
- "label": "Remove Mesh Intersection",
- "description": "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other.",
- "type": "bool",
- "default_value": true,
- "value": "extruders_enabled_count > 1",
- "enabled": "all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "alternate_carve_order":
- {
- "label": "Alternate Mesh Removal",
- "description": "Switch to which mesh intersecting volumes will belong with every layer, so that the overlapping meshes become interwoven. Turning this setting off will cause one of the meshes to obtain all of the volume in the overlap, while it is removed from the other meshes.",
- "type": "bool",
- "default_value": true,
- "enabled": "carve_multiple_volumes and all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "remove_empty_first_layers":
- {
- "label": "Remove Empty First Layers",
- "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.",
- "type": "bool",
- "default_value": true,
- "enabled": "not (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "meshfix_maximum_resolution":
- {
- "label": "Maximum Resolution",
- "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.01",
- "maximum_value_warning": "3",
- "settable_per_mesh": true
- },
- "meshfix_maximum_travel_resolution":
- {
- "label": "Maximum Travel Resolution",
- "description": "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate.",
- "type": "float",
- "unit": "mm",
- "default_value": 1.0,
- "value": "min(meshfix_maximum_resolution * speed_travel / speed_print, 2 * line_width)",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.05",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "meshfix_maximum_deviation":
- {
- "label": "Maximum Deviation",
- "description": "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.025,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.01",
- "maximum_value_warning": "0.3",
- "settable_per_mesh": true
- }
- }
- },
- "blackmagic":
- {
- "label": "Special Modes",
- "type": "category",
- "icon": "BlackMagic",
- "description": "Non-traditional ways to print your models.",
- "children":
- {
- "print_sequence":
- {
- "label": "Print Sequence",
- "description": "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is possible if a) only one extruder is enabled and b) all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
- "type": "enum",
- "options":
- {
- "all_at_once": "All at Once",
- "one_at_a_time": "One at a Time"
- },
- "default_value": "all_at_once",
- "enabled": "extruders_enabled_count == 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "infill_mesh":
- {
- "label": "Infill Mesh",
- "description": "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "infill_mesh_order":
- {
- "label": "Mesh Processing Rank",
- "description": "Determines the priority of this mesh when considering multiple overlapping infill meshes. Areas where multiple infill meshes overlap will take on the settings of the mesh with the highest rank. An infill mesh with a higher rank will modify the infill of infill meshes with lower rank and normal meshes.",
- "default_value": 0,
- "value": "1 if infill_mesh else 0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "50",
- "type": "int",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "cutting_mesh":
- {
- "label": "Cutting Mesh",
- "description": "Limit the volume of this mesh to within other meshes. You can use this to make certain areas of one mesh print with different settings and with a whole different extruder.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "mold_enabled":
- {
- "label": "Mold",
- "description": "Print models as a mold, which can be cast in order to get a model which resembles the models on the build plate.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "mold_width":
- {
- "label": "Minimal Mold Width",
- "description": "The minimal distance between the ouside of the mold and the outside of the model.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "wall_line_width_0 * 2",
- "maximum_value_warning": "100",
- "default_value": 5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_roof_height":
- {
- "label": "Mold Roof Height",
- "description": "The height above horizontal parts in your model which to print mold.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "5",
- "default_value": 0.5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_angle":
- {
- "label": "Mold Angle",
- "description": "The angle of overhang of the outer walls created for the mold. 0° will make the outer shell of the mold vertical, while 90° will make the outside of the model follow the contour of the model.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value_warning": "support_angle",
- "maximum_value": "90",
- "default_value": 40,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "support_mesh":
- {
- "label": "Support Mesh",
- "description": "Use this mesh to specify support areas. This can be used to generate support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "anti_overhang_mesh":
- {
- "label": "Anti Overhang Mesh",
- "description": "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "magic_mesh_surface_mode":
- {
- "label": "Surface Mode",
- "description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.",
- "type": "enum",
- "options":
- {
- "normal": "Normal",
- "surface": "Surface",
- "both": "Both"
- },
- "default_value": "normal",
- "settable_per_mesh": true
- },
- "magic_spiralize":
- {
- "label": "Spiralize Outer Contour",
- "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature should only be enabled when each layer only contains a single part.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "smooth_spiralized_contours":
- {
- "label": "Smooth Spiralized Contours",
- "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.",
- "type": "bool",
- "default_value": true,
- "enabled": "magic_spiralize",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "relative_extrusion":
- {
- "label": "Relative Extrusion",
- "description": "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the g-code. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any g-code script is output.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor==\"RepRap (RepRap)\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "experimental":
- {
- "label": "Experimental",
- "type": "category",
- "icon": "Experiment",
- "description": "Features that haven't completely been fleshed out yet.",
- "children":
- {
- "slicing_tolerance":
- {
- "label": "Slicing Tolerance",
- "description": "Vertical tolerance in the sliced layers. The contours of a layer are normally generated by taking cross sections through the middle of each layer's thickness (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the entire thickness of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Inclusive retains the most details, Exclusive makes for the best fit and Middle stays closest to the original surface.",
- "type": "enum",
- "options":
- {
- "middle": "Middle",
- "exclusive": "Exclusive",
- "inclusive": "Inclusive"
- },
- "default_value": "middle",
- "settable_per_mesh": true
- },
- "roofing_line_width":
- {
- "label": "Top Surface Skin Line Width",
- "description": "Width of a single line of the areas at the top of the print.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "skin_line_width",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_pattern":
- {
- "label": "Top Surface Skin Pattern",
- "description": "The pattern of the top most layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_monotonic":
- {
- "label": "Monotonic Top Surface Order",
- "description": "Print top surface lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "default_value": false,
- "value": "skin_monotonic",
- "enabled": "roofing_layer_count > 0 and top_layers > 0 and roofing_pattern != 'concentric'",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "roofing_angles":
- {
- "label": "Top Surface Skin Line Directions",
- "description": "A list of integer line directions to use when the top surface skin layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "skin_angles",
- "enabled": "roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_enable_travel_optimization":
- {
- "label": "Infill Travel Optimization",
- "description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.",
- "type": "bool",
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "default_value": false,
- "settable_per_mesh": true
- },
- "material_flow_dependent_temperature":
- {
- "label": "Auto Temperature",
- "description": "Change the temperature for each layer automatically with the average flow speed of that layer.",
- "type": "bool",
- "default_value": false,
- "enabled": "machine_nozzle_temp_enabled and False",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flow_temp_graph":
- {
- "label": "Flow Temperature Graph",
- "description": "Data linking material flow (in mm3 per second) to temperature (degrees Celsius).",
- "unit": "[[mm³,°C]]",
- "type": "str",
- "default_value": "[[3.5,200],[7.0,240]]",
- "enabled": "False and machine_nozzle_temp_enabled and material_flow_dependent_temperature",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "minimum_polygon_circumference":
- {
- "label": "Minimum Polygon Circumference",
- "description": "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.0,
- "minimum_value": "0",
- "minimum_value_warning": "0.05",
- "maximum_value_warning": "1.0",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_skip_some_zags":
- {
- "label": "Break Up Support In Chunks",
- "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.",
- "type": "bool",
- "default_value": false,
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_skip_zag_per_mm":
- {
- "label": "Support Chunk Size",
- "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.",
- "type": "float",
- "unit": "mm",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "support_line_distance",
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_zag_skip_count":
- {
- "label": "Support Chunk Line Count",
- "description": "Skip one in every N connection lines to make the support structure easier to break away.",
- "type": "int",
- "default_value": 5,
- "value": "0 if support_line_distance == 0 else round(support_skip_zag_per_mm / support_line_distance)",
- "minimum_value": "1",
- "minimum_value_warning": "3",
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "draft_shield_enabled":
- {
- "label": "Enable Draft Shield",
- "description": "This will create a wall around the model, which traps (hot) air and shields against exterior airflow. Especially useful for materials which warp easily.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_dist":
- {
- "label": "Draft Shield X/Y Distance",
- "description": "Distance of the draft shield from the print, in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 10,
- "resolve": "max(extruderValues('draft_shield_dist'))",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height_limitation":
- {
- "label": "Draft Shield Limitation",
- "description": "Set the height of the draft shield. Choose to print the draft shield at the full height of the model or at a limited height.",
- "type": "enum",
- "options":
- {
- "full": "Full",
- "limited": "Limited"
- },
- "default_value": "full",
- "resolve": "'full' if 'full' in extruderValues('draft_shield_height_limitation') else 'limited'",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height":
- {
- "label": "Draft Shield Height",
- "description": "Height limitation of the draft shield. Above this height no draft shield will be printed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "9999",
- "default_value": 10,
- "value": "10",
- "enabled": "draft_shield_enabled and draft_shield_height_limitation == 'limited'",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "conical_overhang_enabled":
- {
- "label": "Make Overhang Printable",
- "description": "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical.",
- "type": "bool",
- "default_value": false
- },
- "conical_overhang_angle":
- {
- "label": "Maximum Model Angle",
- "description": "The maximum angle of overhangs after the they have been made printable. At a value of 0° all overhangs are replaced by a piece of model connected to the build plate, 90° will not change the model in any way.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value": "89",
- "default_value": 50,
- "enabled": "conical_overhang_enabled"
- },
- "conical_overhang_hole_size":
- {
- "label": "Maximum Overhang Hole Area",
- "description": "The maximum area of a hole in the base of the model before it's removed by Make Overhang Printable. Holes smaller than this will be retained. A value of 0 mm² will fill all holes in the models base.",
- "unit": "mm²",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "0",
- "default_value": 0,
- "enabled": "conical_overhang_enabled"
- },
- "coasting_enable":
- {
- "label": "Enable Coasting",
- "description": "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to print the last piece of the extrusion path in order to reduce stringing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_volume":
- {
- "label": "Coasting Volume",
- "description": "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.064,
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 5",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_min_volume":
- {
- "label": "Minimum Volume Before Coasting",
- "description": "The smallest volume an extrusion path should have before allowing coasting. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_speed":
- {
- "label": "Coasting Speed",
- "description": "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops.",
- "unit": "%",
- "type": "float",
- "default_value": 90,
- "minimum_value": "0.0001",
- "maximum_value_warning": "100",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cross_infill_pocket_size":
- {
- "label": "Cross 3D Pocket Size",
- "description": "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "value": "infill_line_distance",
- "minimum_value": "0",
- "maximum_value_warning": "infill_line_distance * math.sqrt(2)",
- "enabled": "infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_infill_density_image":
- {
- "label": "Cross Infill Density Image",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the infill of the print.",
- "type": "str",
- "default_value": "",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_support_density_image":
- {
- "label": "Cross Fill Density Image for Support",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support.",
- "type": "str",
- "default_value": "",
- "enabled": "support_pattern == 'cross' or support_pattern == 'cross_3d'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_conical_enabled":
- {
- "label": "Enable Conical Support",
- "description": "Make support areas smaller at the bottom than at the overhang.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable and support_structure != 'tree'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_angle":
- {
- "label": "Conical Support Angle",
- "description": "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-90",
- "minimum_value_warning": "-45",
- "maximum_value_warning": "45",
- "maximum_value": "90",
- "default_value": 30,
- "enabled": "support_conical_enabled and support_enable and support_structure != 'tree'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_min_width":
- {
- "label": "Conical Support Minimum Width",
- "description": "Minimum width to which the base of the conical support area is reduced. Small widths can lead to unstable support structures.",
- "unit": "mm",
- "default_value": 5.0,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size * 3",
- "maximum_value_warning": "100.0",
- "type": "float",
- "enabled": "support_conical_enabled and support_enable and support_structure != 'tree' and support_conical_angle > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_enabled":
- {
- "label": "Fuzzy Skin",
- "description": "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_outside_only":
- {
- "label": "Fuzzy Skin Outside Only",
- "description": "Jitter only the parts' outlines and not the parts' holes.",
- "type": "bool",
- "default_value": false,
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_thickness":
- {
- "label": "Fuzzy Skin Thickness",
- "description": "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0.001",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_point_density":
- {
- "label": "Fuzzy Skin Density",
- "description": "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution.",
- "type": "float",
- "unit": "1/mm",
- "default_value": 1.25,
- "minimum_value": "0.008",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "maximum_value": "2 / magic_fuzzy_skin_thickness",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "magic_fuzzy_skin_point_dist":
- {
- "label": "Fuzzy Skin Point Distance",
- "description": "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "magic_fuzzy_skin_thickness / 2",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "value": "10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "flow_rate_max_extrusion_offset":
- {
- "label": "Flow Rate Compensation Max Extrusion Offset",
- "description": "The maximum distance in mm to move the filament to compensate for changes in flow rate.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "flow_rate_extrusion_offset_factor":
- {
- "label": "Flow Rate Compensation Factor",
- "description": "How far to move the filament in order to compensate for changes in flow rate, as a percentage of how far the filament would move in one second of extrusion.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 100,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_enabled":
- {
- "label": "Wire Printing",
- "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_height":
- {
- "label": "WP Connection Height",
- "description": "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "value": "machine_nozzle_head_distance",
- "minimum_value": "0.001",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_inset":
- {
- "label": "WP Roof Inset Distance",
- "description": "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "value": "wireframe_height",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed":
- {
- "label": "WP Speed",
- "description": "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_printspeed_bottom":
- {
- "label": "WP Bottom Printing Speed",
- "description": "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed_flat",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_up":
- {
- "label": "WP Upward Printing Speed",
- "description": "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_down":
- {
- "label": "WP Downward Printing Speed",
- "description": "Speed of printing a line diagonally downward. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_flat":
- {
- "label": "WP Horizontal Printing Speed",
- "description": "Speed of printing the horizontal contours of the model. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "value": "wireframe_printspeed",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_flow":
- {
- "label": "WP Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_flow_connection":
- {
- "label": "WP Connection Flow",
- "description": "Flow compensation when going up or down. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flow_flat":
- {
- "label": "WP Flat Flow",
- "description": "Flow compensation when printing flat lines. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_top_delay":
- {
- "label": "WP Top Delay",
- "description": "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_bottom_delay":
- {
- "label": "WP Bottom Delay",
- "description": "Delay time after a downward move. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flat_delay":
- {
- "label": "WP Flat Delay",
- "description": "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0",
- "maximum_value_warning": "0.5",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_up_half_speed":
- {
- "label": "WP Ease Upward",
- "description": "Distance of an upward move which is extruded with half speed.\nThis can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "5.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_top_jump":
- {
- "label": "WP Knot Size",
- "description": "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled and wireframe_strategy == 'knot'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_fall_down":
- {
- "label": "WP Fall Down",
- "description": "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_drag_along":
- {
- "label": "WP Drag Along",
- "description": "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_strategy":
- {
- "label": "WP Strategy",
- "description": "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted.",
- "type": "enum",
- "options":
- {
- "compensate": "Compensate",
- "knot": "Knot",
- "retract": "Retract"
- },
- "default_value": "compensate",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_straight_before_down":
- {
- "label": "WP Straighten Downward Lines",
- "description": "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing.",
- "type": "float",
- "unit": "%",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_fall_down":
- {
- "label": "WP Roof Fall Down",
- "description": "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 2,
- "minimum_value_warning": "0",
- "maximum_value_warning": "wireframe_roof_inset",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_drag_along":
- {
- "label": "WP Roof Drag Along",
- "description": "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_outer_delay":
- {
- "label": "WP Roof Outer Delay",
- "description": "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing.",
- "type": "float",
- "unit": "s",
- "default_value": 0.2,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_nozzle_clearance":
- {
- "label": "WP Nozzle Clearance",
- "description": "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_enabled":
- {
- "label": "Use Adaptive Layers",
- "description": "Adaptive layers computes the layer heights depending on the shape of the model.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation":
- {
- "label": "Adaptive Layers Maximum Variation",
- "description": "The maximum allowed height different from the base layer height.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "unit": "mm",
- "default_value": 0.1,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation_step":
- {
- "label": "Adaptive Layers Variation Step Size",
- "description": "The difference in height of the next layer height compared to the previous one.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 0.01,
- "unit": "mm",
- "settable_per_mesh": false,
- "minimum_value": "0.001",
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_threshold":
- {
- "label": "Adaptive Layers Topography Size",
- "description": "Target horizontal distance between two adjacent layers. Reducing this setting causes thinner layers to be used to bring the edges of the layers closer together.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 0.2,
- "unit": "mm",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wall_overhang_angle":
- {
- "label": "Overhanging Wall Angle",
- "description": "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "settable_per_mesh": true
- },
- "wall_overhang_speed_factor":
- {
- "label": "Overhanging Wall Speed",
- "description": "Overhanging walls will be printed at this percentage of their normal print speed.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0.001",
- "minimum_value_warning": "25",
- "settable_per_mesh": true
- },
- "bridge_settings_enabled":
- {
- "label": "Enable Bridge Settings",
- "description": "Detect bridges and modify print speed, flow and fan settings while bridges are printed.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('bridge_settings_enabled'))",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "bridge_wall_min_length":
- {
- "label": "Minimum Bridge Wall Length",
- "description": "Unsupported walls shorter than this will be printed using the normal wall settings. Longer unsupported walls will be printed using the bridge wall settings.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 5,
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "bridge_skin_support_threshold":
- {
- "label": "Bridge Skin Support Threshold",
- "description": "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_sparse_infill_max_density":
- {
- "label": "Bridge Sparse Infill Max Density",
- "description": "Maximum density of infill considered to be sparse. Skin over sparse infill is considered to be unsupported and so may be treated as a bridge skin.",
- "unit": "%",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_coast":
- {
- "label": "Bridge Wall Coasting",
- "description": "This controls the distance the extruder should coast immediately before a bridge wall begins. Coasting before the bridge starts can reduce the pressure in the nozzle and may produce a flatter bridge.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "500",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_speed":
- {
- "label": "Bridge Wall Speed",
- "description": "The speed at which the bridge walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_wall_0 / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_material_flow":
- {
- "label": "Bridge Wall Flow",
- "description": "When printing bridge walls, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed":
- {
- "label": "Bridge Skin Speed",
- "description": "The speed at which bridge skin regions are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_topbottom / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow":
- {
- "label": "Bridge Skin Flow",
- "description": "When printing bridge skin regions, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 60,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_density":
- {
- "label": "Bridge Skin Density",
- "description": "The density of the bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_fan_speed":
- {
- "label": "Bridge Fan Speed",
- "description": "Percentage fan speed to use when printing bridge walls and skin.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_enable_more_layers":
- {
- "label": "Bridge Has Multiple Layers",
- "description": "If enabled, the second and third layers above the air are printed using the following settings. Otherwise, those layers are printed using the normal settings.",
- "type": "bool",
- "default_value": true,
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_2":
- {
- "label": "Bridge Second Skin Speed",
- "description": "Print speed to use when printing the second bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 25,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_2":
- {
- "label": "Bridge Second Skin Flow",
- "description": "When printing the second bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "500",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_2":
- {
- "label": "Bridge Second Skin Density",
- "description": "The density of the second bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 75,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_2":
- {
- "label": "Bridge Second Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the second bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_3":
- {
- "label": "Bridge Third Skin Speed",
- "description": "Print speed to use when printing the third bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_3":
- {
- "label": "Bridge Third Skin Flow",
- "description": "When printing the third bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 110,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "500",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_3":
- {
- "label": "Bridge Third Skin Density",
- "description": "The density of the third bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 80,
- "type": "float",
- "minimum_value": "5",
- "maximum_value": "100",
- "minimum_value_warning": "20",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_3":
- {
- "label": "Bridge Third Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the third bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "clean_between_layers":
- {
- "label": "Wipe Nozzle Between Layers",
- "description": "Whether to include nozzle wipe G-Code between layers (maximum 1 per layer). Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "max_extrusion_before_wipe":
- {
- "label": "Material Volume Between Wipes",
- "description": "Maximum material that can be extruded before another nozzle wipe is initiated. If this value is less than the volume of material required in a layer, the setting has no effect in this layer, i.e. it is limited to one wipe per layer.",
- "default_value": 10,
- "type": "float",
- "unit": "mm³",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_enable":
- {
- "label": "Wipe Retraction Enable",
- "description": "Retract the filament when the nozzle is moving over a non-printed area.",
- "type": "bool",
- "default_value": true,
- "value": "retraction_enable",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_amount":
- {
- "label": "Wipe Retraction Distance",
- "description": "Amount to retract the filament so it does not ooze during the wipe sequence.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_amount",
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_extra_prime_amount":
- {
- "label": "Wipe Retraction Extra Prime Amount",
- "description": "Some material can ooze away during a wipe travel moves, which can be compensated for here.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "value": "retraction_extra_prime_amount",
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "wipe_retraction_speed":
- {
- "label": "Wipe Retraction Speed",
- "description": "The speed at which the filament is retracted and primed during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "value": "retraction_speed",
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "wipe_retraction_retract_speed":
- {
- "label": "Wipe Retraction Retract Speed",
- "description": "The speed at which the filament is retracted during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 3,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "wipe_retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "wipe_retraction_prime_speed":
- {
- "label": "Wipe Retraction Prime Speed",
- "description": "The speed at which the filament is primed during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 2,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "wipe_retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "wipe_pause":
- {
- "label": "Wipe Pause",
- "description": "Pause after the unretract.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_enable":
- {
- "label": "Wipe Z Hop",
- "description": "When wiping, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
- "type": "bool",
- "default_value": true,
- "value": "retraction_hop_enabled",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_amount":
- {
- "label": "Wipe Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_hop",
- "enabled": "wipe_hop_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_speed":
- {
- "label": "Wipe Hop Speed",
- "description": "Speed to move the z-axis during the hop.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "value": "speed_z_hop",
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "enabled": "wipe_hop_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_brush_pos_x":
- {
- "label": "Wipe Brush X Position",
- "description": "X location where wipe script will start.",
- "type": "float",
- "unit": "mm",
- "default_value": 100,
- "minimum_value_warning": "0",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_repeat_count":
- {
- "label": "Wipe Repeat Count",
- "description": "Number of times to move the nozzle across the brush.",
- "type": "int",
- "minimum_value": "0",
- "default_value": 5,
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_move_distance":
- {
- "label": "Wipe Move Distance",
- "description": "The distance to move the head back and forth across the brush.",
- "unit": "mm",
- "type": "float",
- "default_value": 20,
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "small_hole_max_size":
- {
- "label": "Small Hole Max Size",
- "description": "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "settable_per_mesh": true,
- "children":
- {
- "small_feature_max_length":
- {
- "label": "Small Feature Max Length",
- "description": "Feature outlines that are shorter than this length will be printed using Small Feature Speed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "value": "small_hole_max_size * math.pi",
- "settable_per_mesh": true
- }
- }
- },
- "small_feature_speed_factor":
- {
- "label": "Small Feature Speed",
- "description": "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
- "unit": "%",
- "type": "float",
- "default_value": 50,
- "minimum_value": "1",
- "minimum_value_warning": "25",
- "maximum_value_warning": "100",
- "settable_per_mesh": true
- },
- "small_feature_speed_factor_0":
- {
- "label": "Small Feature Initial Layer Speed",
- "description": "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
- "unit": "%",
- "type": "float",
- "default_value": 50,
- "value": "small_feature_speed_factor",
- "minimum_value": "1",
- "minimum_value_warning": "25",
- "maximum_value_warning": "100",
- "settable_per_mesh": true
- }
- }
- },
- "command_line_settings":
- {
- "label": "Command Line Settings",
- "description": "Settings which are only used if CuraEngine isn't called from the Cura frontend.",
- "type": "category",
- "enabled": false,
- "children": {
- "center_object":
- {
- "description": "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved.",
- "type": "bool",
- "label": "Center Object",
- "default_value": false,
- "enabled": false
- },
- "mesh_position_x":
- {
- "description": "Offset applied to the object in the x direction.",
- "type": "float",
- "label": "Mesh Position X",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_y":
- {
- "description": "Offset applied to the object in the y direction.",
- "type": "float",
- "label": "Mesh Position Y",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_z":
- {
- "description": "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'.",
- "type": "float",
- "label": "Mesh Position Z",
- "default_value": 0,
- "enabled": false
- },
- "mesh_rotation_matrix":
- {
- "label": "Mesh Rotation Matrix",
- "description": "Transformation matrix to be applied to the model when loading it from file.",
- "type": "str",
- "default_value": "[[1,0,0], [0,1,0], [0,0,1]]",
- "enabled": false
- }
- }
- }
- }
-}
diff --git a/software/Print3r/settings/slicer/cura4/map.ini b/software/Print3r/settings/slicer/cura4/map.ini
deleted file mode 100644
index 69e9abe7..00000000
--- a/software/Print3r/settings/slicer/cura4/map.ini
+++ /dev/null
@@ -1,49 +0,0 @@
-infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-machine_nozzle_diameter=$nozzle_diameter
-machine_material_diameter=$filament_diameter
-material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-initial_bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_amount
-machine_start_gcode=$start_gcode
-machine_end_gcode=$end_gcode
-retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-speed_print_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-line_width=$nozzle_diameter
-infill_line_width=$nozzle_diameter
-prime_tower_line_width=$nozzle_diameter
-raft_surface_line_width=$nozzle_diameter
-roofing_line_width=$nozzle_diameter
-skin_line_width=$nozzle_diameter
-skirt_brim_line_width=$nozzle_diameter
-support_bottom_line_width=$nozzle_diameter
-support_interface_line_width=$nozzle_diameter
-support_line_width=$nozzle_diameter
-support_roof_line_width=$nozzle_diameter
-wall_line_width_0=$nozzle_diameter
-wall_line_width=$nozzle_diameter
-wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-material_print_temperature=$temperature
-material_print_bed_temperature=$bed_temperature
-material_bed_temperature_layer_0=$bed_temperature
-material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-speed_print=$print_speed
-speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:40}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-brim_line_count=$brims
-skirt_line_count=$skirts
-raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/cura5/base.ini b/software/Print3r/settings/slicer/cura5/base.ini
deleted file mode 100644
index 1ff53230..00000000
--- a/software/Print3r/settings/slicer/cura5/base.ini
+++ /dev/null
@@ -1,532 +0,0 @@
-acceleration_enabled="False"
-acceleration_infill="3000"
-acceleration_ironing="3000"
-acceleration_layer_0="3000"
-acceleration_prime_tower="3000"
-acceleration_print="3000"
-acceleration_print_layer_0="3000"
-acceleration_roofing="3000"
-acceleration_skirt_brim="3000"
-acceleration_support="3000"
-acceleration_support_bottom="3000"
-acceleration_support_infill="3000"
-acceleration_support_interface="3000"
-acceleration_support_roof="3000"
-acceleration_topbottom="3000"
-acceleration_travel="5000"
-acceleration_travel_layer_0="5000.0"
-acceleration_wall="3000"
-acceleration_wall_0="3000"
-acceleration_wall_x="3000"
-adaptive_layer_height_enabled="False"
-adaptive_layer_height_threshold="200.0"
-adaptive_layer_height_variation="0.1"
-adaptive_layer_height_variation_step="0.01"
-adhesion_extruder_nr="0"
-adhesion_type="skirt"
-alternate_carve_order="True"
-alternate_extra_perimeter="False"
-anti_overhang_mesh="False"
-blackmagic="0"
-bottom_layers="2"
-bottom_skin_expand_distance="1.0"
-bottom_skin_preshrink="1.0"
-bottom_thickness="0.8"
-bridge_enable_more_layers="True"
-bridge_fan_speed="100"
-bridge_fan_speed_2="0"
-bridge_fan_speed_3="0"
-bridge_settings_enabled="False"
-bridge_skin_density="100"
-bridge_skin_density_2="75"
-bridge_skin_density_3="80"
-bridge_skin_material_flow="60"
-bridge_skin_material_flow_2="100"
-bridge_skin_material_flow_3="110"
-bridge_skin_speed="15.0"
-bridge_skin_speed_2="15.0"
-bridge_skin_speed_3="15.0"
-bridge_skin_support_threshold="50"
-bridge_wall_coast="100"
-bridge_wall_material_flow="50"
-bridge_wall_min_length="5"
-bridge_wall_speed="15.0"
-brim_line_count="20"
-brim_outside_only="True"
-brim_width="8.0"
-carve_multiple_volumes="False"
-center_object="False"
-coasting_enable="False"
-coasting_min_volume="0.8"
-coasting_speed="90"
-coasting_volume="0.064"
-command_line_settings="0"
-conical_overhang_angle="50"
-conical_overhang_enabled="False"
-connect_infill_polygons="False"
-connect_skin_polygons="False"
-cool_fan_enabled="True"
-cool_fan_full_at_height="0.35"
-cool_fan_full_layer="2"
-cool_fan_speed="100.0"
-cool_fan_speed_0="0"
-cool_fan_speed_max="100.0"
-cool_fan_speed_min="100.0"
-cool_lift_head="False"
-cool_min_layer_time="5"
-cool_min_layer_time_fan_speed_max="10"
-cool_min_speed="10"
-cooling="0"
-cross_infill_pocket_size="4.0"
-cutting_mesh="False"
-date="14-10-2018"
-day="Sun"
-default_material_bed_temperature="60"
-default_material_print_temperature="210"
-draft_shield_dist="10"
-draft_shield_enabled="False"
-draft_shield_height="10"
-draft_shield_height_limitation="full"
-dual="0"
-expand_skins_expand_distance="1.0"
-experimental="0"
-extruder_nr="0"
-extruder_prime_pos_abs="False"
-extruder_prime_pos_x="0"
-extruder_prime_pos_y="0"
-extruder_prime_pos_z="0"
-extruders_enabled_count="1"
-fill_outline_gaps="False"
-fill_perimeter_gaps="everywhere"
-filter_out_tiny_gaps="True"
-flow_rate_extrusion_offset_factor="100"
-flow_rate_max_extrusion_offset="0"
-gantry_height="55"
-gradual_infill_step_height="1.5"
-gradual_infill_steps="0"
-gradual_support_infill_step_height="1"
-gradual_support_infill_steps="0"
-infill="0"
-infill_angles="[ ]"
-infill_before_walls="True"
-infill_enable_travel_optimization="False"
-infill_extruder_nr="-1"
-infill_line_distance="4.0"
-infill_line_width="0.5"
-infill_mesh="False"
-infill_mesh_order="0"
-infill_multiplier="1"
-infill_offset_x="0"
-infill_offset_y="0"
-infill_overlap="10"
-infill_overlap_mm="0.05"
-infill_pattern="grid"
-infill_sparse_density="20"
-infill_sparse_thickness="0.4"
-infill_support_angle="40"
-infill_support_enabled="False"
-infill_wall_line_count="0"
-infill_wipe_dist="0.125"
-initial_extruder_nr="0"
-initial_layer_line_width_factor="100.0"
-ironing_enabled="False"
-ironing_flow="10.0"
-ironing_inset="0.25"
-ironing_line_spacing="0.1"
-ironing_only_highest_layer="False"
-ironing_pattern="zigzag"
-jerk_enabled="False"
-jerk_infill="20"
-jerk_ironing="20"
-jerk_layer_0="20"
-jerk_prime_tower="20"
-jerk_print="20"
-jerk_print_layer_0="20"
-jerk_roofing="20"
-jerk_skirt_brim="20"
-jerk_support="20"
-jerk_support_bottom="20"
-jerk_support_infill="20"
-jerk_support_interface="20"
-jerk_support_roof="20"
-jerk_topbottom="20"
-jerk_travel="30"
-jerk_travel_layer_0="30.0"
-jerk_wall="20"
-jerk_wall_0="20"
-jerk_wall_x="20"
-layer_0_z_overlap="0.15"
-layer_height="0.4"
-layer_height_0="0.35"
-layer_start_x="0.0"
-layer_start_y="0.0"
-limit_support_retractions="True"
-line_width="0.5"
-machine_acceleration="4000"
-machine_buildplate_type="glass"
-machine_center_is_zero="False"
-machine_depth="200"
-machine_disallowed_areas="[]"
-machine_end_gcode="M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n;G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG28 X0\nG90\nG1 Y290 F9000\nM84 ;steppers off\nG90 ;absolute positioning"
-machine_endstop_positive_direction_x="False"
-machine_endstop_positive_direction_y="False"
-machine_endstop_positive_direction_z="True"
-machine_extruder_count="1"
-machine_extruder_cooling_fan_number="0"
-machine_extruder_end_pos_abs="False"
-machine_extruder_end_pos_x="0"
-machine_extruder_end_pos_y="0"
-machine_extruder_start_pos_abs="False"
-machine_extruder_start_pos_x="0"
-machine_extruder_start_pos_y="0"
-machine_feeder_wheel_diameter="10.0"
-machine_filament_park_distance="16"
-machine_firmware_retract="False"
-machine_gcode_flavor="RepRap (Marlin/Sprinter)"
-machine_head_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_head_with_fans_polygon="[[-75, -18], [-75, 35], [18, 35], [18, -18]]"
-machine_heat_zone_length="16"
-machine_heated_bed="True"
-machine_height="210"
-machine_max_acceleration_e="10000"
-machine_max_acceleration_x="9000"
-machine_max_acceleration_y="9000"
-machine_max_acceleration_z="100"
-machine_max_feedrate_e="299792458000"
-machine_max_feedrate_x="500"
-machine_max_feedrate_y="500"
-machine_max_feedrate_z="5"
-machine_max_jerk_e="5.0"
-machine_max_jerk_xy="20.0"
-machine_max_jerk_z="0.4"
-machine_min_cool_heat_time_window="50.0"
-machine_minimum_feedrate="0.0"
-machine_name="Prusa i3"
-machine_nozzle_cool_down_speed="2.0"
-machine_nozzle_expansion_angle="45"
-machine_nozzle_head_distance="3"
-machine_nozzle_heat_up_speed="2.0"
-machine_nozzle_id="unknown"
-machine_nozzle_offset_x="0"
-machine_nozzle_offset_y="0"
-machine_nozzle_size="0.5"
-machine_nozzle_temp_enabled="True"
-machine_nozzle_tip_outer_diameter="1"
-machine_settings="0"
-machine_shape="rectangular"
-machine_show_variants="False"
-machine_start_gcode="G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM206 X0 Y0\n;M92 X100 Y100 E95 ; metal 16 teeth pulley\n;M92 Z3200; M6 z-axis\n;G1 Z15; move up\nG28 X0 Y0 ;move X/Y to min endstops\nG1 X40; move away to avoid crashing into bed mount\nG28 Z0 ;move Z to min endstops\n;G1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X10.0 E9.0 F1000.0 ; intro line\nG1 X60.0 E21.5 F1000.0 ; intro line\nG1 X20.0 E30.0 F1000\nG92 E0 ;zero the extruded length again\n;G1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
-machine_steps_per_mm_e="1600"
-machine_steps_per_mm_x="50"
-machine_steps_per_mm_y="50"
-machine_steps_per_mm_z="50"
-machine_use_extruder_offset_to_offset_coords="True"
-machine_width="210"
-magic_fuzzy_skin_enabled="False"
-magic_fuzzy_skin_point_density="1.25"
-magic_fuzzy_skin_point_dist="0.8"
-magic_fuzzy_skin_thickness="0.3"
-magic_mesh_surface_mode="normal"
-magic_spiralize="False"
-material="0"
-material_adhesion_tendency="10"
-material_bed_temp_prepend="True"
-material_bed_temp_wait="True"
-material_bed_temperature="0"
-material_bed_temperature_layer_0="0"
-material_diameter="1.75"
-material_extrusion_cool_down_speed="0.7"
-material_final_print_temperature="195"
-material_flow="100"
-material_flow_dependent_temperature="False"
-material_flow_layer_0="100"
-material_flow_temp_graph="[[3.5,200],[7.0,240]]"
-material_guid="0ff92885-617b-4144-a03c-9989872454bc"
-material_initial_print_temperature="200"
-material_print_temp_prepend="True"
-material_print_temp_wait="True"
-material_print_temperature="210"
-material_print_temperature_layer_0="210"
-material_shrinkage_percentage="0"
-material_standby_temperature="175"
-material_surface_energy="100"
-max_feedrate_z_override="0"
-max_skin_angle_for_expansion="90"
-mesh_position_x="0"
-mesh_position_y="0"
-mesh_position_z="0"
-mesh_rotation_matrix="[[1,0,0], [0,1,0], [0,0,1]]"
-meshfix="0"
-meshfix_extensive_stitching="False"
-meshfix_keep_open_polygons="False"
-meshfix_maximum_resolution="0.01"
-meshfix_maximum_travel_resolution="0.02"
-meshfix_union_all="True"
-meshfix_union_all_remove_holes="False"
-min_infill_area="0"
-min_skin_width_for_expansion="4.898587196589413e-17"
-minimum_polygon_circumference="1.0"
-mold_angle="40"
-mold_enabled="False"
-mold_roof_height="0.5"
-mold_width="5"
-multiple_mesh_overlap="0.15"
-nozzle_disallowed_areas="[]"
-ooze_shield_angle="60"
-ooze_shield_dist="2"
-ooze_shield_enabled="False"
-optimize_wall_printing_order="False"
-outer_inset_first="False"
-platform_adhesion="0"
-prime_blob_enable="True"
-prime_tower_circular="True"
-prime_tower_enable="False"
-prime_tower_flow="100"
-prime_tower_line_width="0.5"
-prime_tower_min_volume="6"
-prime_tower_position_x="375.3"
-prime_tower_position_y="275.3"
-prime_tower_size="20"
-prime_tower_wipe_enabled="True"
-print_bed_temperature="0"
-print_sequence="all_at_once"
-print_temperature="210"
-raft_acceleration="3000"
-raft_airgap="0.3"
-raft_base_acceleration="3000"
-raft_base_fan_speed="0"
-raft_base_jerk="20"
-raft_base_line_spacing="2.0"
-raft_base_line_width="1.0"
-raft_base_speed="22.5"
-raft_base_thickness="0.42"
-raft_fan_speed="0"
-raft_interface_acceleration="3000"
-raft_interface_fan_speed="0"
-raft_interface_jerk="20"
-raft_interface_line_spacing="1.2"
-raft_interface_line_width="1.0"
-raft_interface_speed="22.5"
-raft_interface_thickness="0.6000000000000001"
-raft_jerk="20"
-raft_margin="15"
-raft_smoothing="5"
-raft_speed="30.0"
-raft_surface_acceleration="3000"
-raft_surface_fan_speed="0"
-raft_surface_jerk="20"
-raft_surface_layers="2"
-raft_surface_line_spacing="0.5"
-raft_surface_line_width="0.5"
-raft_surface_speed="30.0"
-raft_surface_thickness="0.4"
-relative_extrusion="False"
-remove_empty_first_layers="True"
-resolution="0"
-retract_at_layer_change="False"
-retraction_amount="6.5"
-retraction_combing="all"
-retraction_combing_max_distance="0"
-retraction_count_max="90"
-retraction_enable="True"
-retraction_extra_prime_amount="0"
-retraction_extrusion_window="6.5"
-retraction_hop="1"
-retraction_hop_after_extruder_switch="True"
-retraction_hop_enabled="False"
-retraction_hop_only_when_collides="False"
-retraction_min_travel="1.0"
-retraction_prime_speed="35"
-retraction_retract_speed="35"
-retraction_speed="35"
-roofing_angles="[ ]"
-roofing_extruder_nr="-1"
-roofing_layer_count="0"
-roofing_line_width="0.5"
-roofing_pattern="lines"
-shell="0"
-skin_alternate_rotation="False"
-skin_angles="[ ]"
-skin_line_width="0.5"
-skin_no_small_gaps_heuristic="True"
-skin_outline_count="1"
-skin_overlap="5"
-skin_overlap_mm="0.025"
-skin_preshrink="1.0"
-skirt_brim_line_width="0.5"
-skirt_brim_minimal_length="250"
-skirt_brim_speed="30.0"
-skirt_gap="3"
-skirt_line_count="1"
-slicing_tolerance="middle"
-smooth_spiralized_contours="True"
-spaghetti_flow="20"
-spaghetti_infill_enabled="False"
-spaghetti_infill_extra_volume="0"
-spaghetti_infill_stepped="True"
-spaghetti_inset="0.2"
-spaghetti_max_height="2.0"
-spaghetti_max_infill_angle="10"
-speed="0"
-speed_equalize_flow_enabled="False"
-speed_equalize_flow_max="150"
-speed_infill="80"
-speed_ironing="20.0"
-speed_layer_0="30.0"
-speed_prime_tower="60"
-speed_print="60"
-speed_print_layer_0="30.0"
-speed_roofing="30.0"
-speed_slowdown_layers="2"
-speed_support="60"
-speed_support_bottom="40.0"
-speed_support_infill="60"
-speed_support_interface="40.0"
-speed_support_roof="40.0"
-speed_topbottom="30.0"
-speed_travel="120"
-speed_travel_layer_0="60.0"
-speed_wall="30.0"
-speed_wall_0="30.0"
-speed_wall_x="60.0"
-start_layers_at_same_position="False"
-sub_div_rad_add="0.5"
-support="0"
-support_angle="50"
-support_bottom_density="100"
-support_bottom_distance="0"
-support_bottom_enable="False"
-support_bottom_extruder_nr="0"
-support_bottom_height="1"
-support_bottom_line_distance="0.5"
-support_bottom_line_width="0.5"
-support_bottom_pattern="concentric"
-support_bottom_stair_step_height="0.3"
-support_bottom_stair_step_width="5.0"
-support_conical_angle="30"
-support_conical_enabled="False"
-support_conical_min_width="5.0"
-support_connect_zigzags="True"
-support_enable="False"
-support_extruder_nr="0"
-support_extruder_nr_layer_0="0"
-support_fan_enable="False"
-support_infill_angle="0"
-support_infill_extruder_nr="0"
-support_infill_rate="15"
-support_infill_sparse_thickness="0.4"
-support_initial_layer_line_distance="3.3333333333333335"
-support_interface_density="100"
-support_interface_enable="False"
-support_interface_extruder_nr="0"
-support_interface_height="1"
-support_interface_line_width="0.5"
-support_interface_pattern="concentric"
-support_interface_skip_height="0.3"
-support_join_distance="2.0"
-support_line_distance="3.3333333333333335"
-support_line_width="0.5"
-support_mesh="False"
-support_mesh_drop_down="True"
-support_minimal_diameter="3.0"
-support_offset="0.2"
-support_pattern="zigzag"
-support_roof_density="100"
-support_roof_enable="False"
-support_roof_extruder_nr="0"
-support_roof_height="1"
-support_roof_line_distance="0.5"
-support_roof_line_width="0.5"
-support_roof_pattern="concentric"
-support_skip_some_zags="False"
-support_skip_zag_per_mm="20"
-support_supported_skin_fan_speed="100"
-support_top_distance="0.1"
-support_tower_diameter="3.0"
-support_tower_roof_angle="65"
-support_tree_angle="40"
-support_tree_branch_diameter="2"
-support_tree_branch_diameter_angle="5"
-support_tree_branch_distance="1"
-support_tree_collision_resolution="0.25"
-support_tree_enable="False"
-support_tree_wall_count="1"
-support_tree_wall_thickness="0.5"
-support_type="buildplate"
-support_use_towers="True"
-support_wall_count="0"
-support_xy_distance="0.7"
-support_xy_distance_overhang="0.25"
-support_xy_overrides_z="z_overrides_xy"
-support_z_distance="0.1"
-support_zag_skip_count="8"
-switch_extruder_prime_speed="20"
-switch_extruder_retraction_amount="16"
-switch_extruder_retraction_speed="20"
-switch_extruder_retraction_speeds="20"
-time="09:46:45"
-top_bottom_extruder_nr="-1"
-top_bottom_pattern="lines"
-top_bottom_pattern_0="lines"
-top_bottom_thickness="0.8"
-top_layers="2"
-top_skin_expand_distance="1.0"
-top_skin_preshrink="1.0"
-top_thickness="0.8"
-travel="0"
-travel_avoid_distance="0.625"
-travel_avoid_other_parts="True"
-travel_avoid_supports="False"
-travel_compensate_overlapping_walls_0_enabled="True"
-travel_compensate_overlapping_walls_enabled="True"
-travel_compensate_overlapping_walls_x_enabled="True"
-travel_retract_before_outer_wall="False"
-wall_0_extruder_nr="-1"
-wall_0_inset="0"
-wall_0_wipe_dist="0.25"
-wall_extruder_nr="-1"
-wall_line_count="2"
-wall_line_width="0.5"
-wall_line_width_0="0.5"
-wall_line_width_x="0.5"
-wall_min_flow="0"
-wall_min_flow_retract="False"
-wall_overhang_angle="90"
-wall_overhang_speed_factor="100"
-wall_thickness="0.8"
-wall_x_extruder_nr="-1"
-wireframe_bottom_delay="0"
-wireframe_drag_along="0.6"
-wireframe_enabled="False"
-wireframe_fall_down="0.5"
-wireframe_flat_delay="0.1"
-wireframe_flow="100"
-wireframe_flow_connection="100"
-wireframe_flow_flat="100"
-wireframe_height="3"
-wireframe_nozzle_clearance="1"
-wireframe_printspeed="5"
-wireframe_printspeed_bottom="5"
-wireframe_printspeed_down="5"
-wireframe_printspeed_flat="5"
-wireframe_printspeed_up="5"
-wireframe_roof_drag_along="0.8"
-wireframe_roof_fall_down="2"
-wireframe_roof_inset="3"
-wireframe_roof_outer_delay="0.2"
-wireframe_straight_before_down="20"
-wireframe_strategy="compensate"
-wireframe_top_delay="0"
-wireframe_top_jump="0.6"
-wireframe_up_half_speed="0.3"
-xy_offset="0"
-xy_offset_layer_0="0"
-z_seam_corner="z_seam_corner_inner"
-z_seam_relative="False"
-z_seam_type="sharpest_corner"
-z_seam_x="190.0"
-z_seam_y="900"
-zig_zaggify_infill="False"
-zig_zaggify_support="False"
-machine_extruder_start_code=""
-roofing_monotonic=0
diff --git a/software/Print3r/settings/slicer/cura5/fdmprinter.def.json b/software/Print3r/settings/slicer/cura5/fdmprinter.def.json
deleted file mode 100644
index b8fd5fa7..00000000
--- a/software/Print3r/settings/slicer/cura5/fdmprinter.def.json
+++ /dev/null
@@ -1,8145 +0,0 @@
-{
- "name": "FDM Printer Base Description",
- "version": 2,
- "metadata":
- {
- "type": "machine",
- "author": "Unknown",
- "manufacturer": "Unknown",
- "setting_version": 20,
- "file_formats": "text/x-gcode;model/stl;application/x-wavefront-obj;application/x3g",
- "visible": false,
- "has_materials": true,
- "has_variants": false,
- "has_machine_quality": false,
- "preferred_material": "generic_pla",
- "preferred_quality_type": "normal",
- "machine_extruder_trains":
- {
- "0": "fdmextruder"
- },
- "supports_usb_connection": true,
- "supports_network_connection": false
- },
- "settings":
- {
- "machine_settings":
- {
- "label": "Machine",
- "type": "category",
- "description": "Machine specific settings",
- "icon": "Printer",
- "children":
- {
- "machine_name":
- {
- "label": "Machine Type",
- "description": "The name of your 3D printer model.",
- "default_value": "Unknown",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_show_variants":
- {
- "label": "Show Machine Variants",
- "description": "Whether to show the different variants of this machine, which are described in separate json files.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_start_gcode":
- {
- "label": "Start G-code",
- "description": "G-code commands to be executed at the very start - separated by \\n.",
- "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_end_gcode":
- {
- "label": "End G-code",
- "description": "G-code commands to be executed at the very end - separated by \\n.",
- "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
- "type": "str",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_guid":
- {
- "label": "Material GUID",
- "description": "GUID of the material. This is set automatically.",
- "default_value": "",
- "type": "str",
- "enabled": false
- },
- "material_diameter":
- {
- "label": "Diameter",
- "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.85,
- "minimum_value": "0.0001",
- "minimum_value_warning": "0.4",
- "maximum_value_warning": "3.5",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_bed_temp_wait":
- {
- "label": "Wait for Build Plate Heatup",
- "description": "Whether to insert a command to wait until the build plate temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_wait":
- {
- "label": "Wait for Nozzle Heatup",
- "description": "Whether to wait until the nozzle temperature is reached at the start.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_print_temp_prepend":
- {
- "label": "Include Material Temperatures",
- "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temp_prepend":
- {
- "label": "Include Build Plate Temperature",
- "description": "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting.",
- "default_value": true,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_width":
- {
- "label": "Machine Width",
- "description": "The width (X-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.001",
- "maximum_value": "2000000",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_depth":
- {
- "label": "Machine Depth",
- "description": "The depth (Y-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.001",
- "maximum_value": "2000000",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_height":
- {
- "label": "Machine Height",
- "description": "The height (Z-direction) of the printable area.",
- "default_value": 100,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_shape":
- {
- "label": "Build Plate Shape",
- "description": "The shape of the build plate without taking unprintable areas into account.",
- "default_value": "rectangular",
- "type": "enum",
- "options":
- {
- "rectangular": "Rectangular",
- "elliptic": "Elliptic"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_buildplate_type":
- {
- "label": "Build Plate Material",
- "description": "The material of the build plate installed on the printer.",
- "default_value": "glass",
- "type": "enum",
- "options":
- {
- "glass": "Glass",
- "aluminum": "Aluminum"
- },
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heated_bed":
- {
- "label": "Has Heated Build Plate",
- "description": "Whether the machine has a heated build plate present.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heated_build_volume":
- {
- "label": "Has Build Volume Temperature Stabilization",
- "description": "Whether the machine is able to stabilize the build volume temperature.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_always_write_active_tool":
- {
- "label": "Always Write Active Tool",
- "description": "Write active tool after sending temp commands to inactive tool. Required for Dual Extruder printing with Smoothie or other firmware with modal tool commands.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_center_is_zero":
- {
- "label": "Is Center Origin",
- "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruder_count":
- {
- "label": "Number of Extruders",
- "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruders_enabled_count":
- {
- "label": "Number of Extruders That Are Enabled",
- "description": "Number of extruder trains that are enabled; automatically set in software",
- "value": "machine_extruder_count",
- "default_value": 1,
- "minimum_value": "1",
- "maximum_value": "16",
- "type": "int",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_tip_outer_diameter":
- {
- "label": "Outer Nozzle Diameter",
- "description": "The outer diameter of the tip of the nozzle.",
- "unit": "mm",
- "default_value": 1,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "machine_nozzle_head_distance":
- {
- "label": "Nozzle Length",
- "description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
- "unit": "mm",
- "default_value": 3,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_expansion_angle":
- {
- "label": "Nozzle Angle",
- "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.",
- "unit": "°",
- "type": "int",
- "default_value": 45,
- "maximum_value": "89",
- "minimum_value": "1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_heat_zone_length":
- {
- "label": "Heat Zone Length",
- "description": "The distance from the tip of the nozzle in which heat from the nozzle is transferred to the filament.",
- "unit": "mm",
- "default_value": 16,
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_temp_enabled":
- {
- "label": "Enable Nozzle Temperature Control",
- "description": "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura.",
- "default_value": true,
- "value": "machine_gcode_flavor != \"UltiGCode\"",
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_heat_up_speed":
- {
- "label": "Heat Up Speed",
- "description": "The speed (°C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_cool_down_speed":
- {
- "label": "Cool Down Speed",
- "description": "The speed (°C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.",
- "default_value": 2.0,
- "unit": "°C/s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_min_cool_heat_time_window":
- {
- "label": "Minimal Time Standby Temperature",
- "description": "The minimal time an extruder has to be inactive before the nozzle is cooled. Only when an extruder is not used for longer than this time will it be allowed to cool down to the standby temperature.",
- "default_value": 50.0,
- "unit": "s",
- "type": "float",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_gcode_flavor":
- {
- "label": "G-code Flavor",
- "description": "The type of g-code to be generated.",
- "type": "enum",
- "options":
- {
- "RepRap (Marlin/Sprinter)": "Marlin",
- "RepRap (Volumetric)": "Marlin (Volumetric)",
- "RepRap (RepRap)": "RepRap",
- "UltiGCode": "Ultimaker 2",
- "Griffin": "Griffin",
- "Makerbot": "Makerbot",
- "BFB": "Bits from Bytes",
- "MACH3": "Mach3",
- "Repetier": "Repetier"
- },
- "default_value": "RepRap (Marlin/Sprinter)",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_firmware_retract":
- {
- "label": "Firmware Retraction",
- "description": "Whether to use firmware retract commands (G10/G11) instead of using the E property in G1 commands to retract the material.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor == 'RepRap (Volumetric)' or machine_gcode_flavor == 'UltiGCode' or machine_gcode_flavor == 'BFB'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_share_heater":
- {
- "label": "Extruders Share Heater",
- "description": "Whether the extruders share a single heater rather than each extruder having its own heater.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_share_nozzle":
- {
- "label": "Extruders Share Nozzle",
- "description": "Whether the extruders share a single nozzle rather than each extruder having its own nozzle. When set to true, it is expected that the printer-start gcode script properly sets up all extruders in an initial retraction state that is known and mutually compatible (either zero or one filament not retracted); in that case the initial retraction status is described, per extruder, by the 'machine_extruders_shared_nozzle_initial_retraction' parameter.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_extruders_shared_nozzle_initial_retraction":
- {
- "label": "Shared Nozzle Initial Retraction",
- "description": "How much the filament of each extruder is assumed to have been retracted from the shared nozzle tip at the completion of the printer-start gcode script; the value should be equal to or greater than the length of the common part of the nozzle's ducts.",
- "unit": "mm",
- "default_value": 0,
- "minimum_value": "0",
- "type": "float",
- "enabled": "machine_extruders_share_nozzle",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "machine_disallowed_areas":
- {
- "label": "Disallowed Areas",
- "description": "A list of polygons with areas the print head is not allowed to enter.",
- "type": "polygons",
- "default_value": [],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "nozzle_disallowed_areas":
- {
- "label": "Nozzle Disallowed Areas",
- "description": "A list of polygons with areas the nozzle is not allowed to enter.",
- "type": "polygons",
- "default_value": [],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_head_with_fans_polygon":
- {
- "label": "Machine Head & Fan Polygon",
- "description": "The shape of the print head. These are coordinates relative to the position of the print head, which is usually the position of its first extruder. The dimensions left and in front of the print head must be negative coordinates.",
- "type": "polygon",
- "default_value":
- [
- [ -20, 10 ],
- [ 10, 10 ],
- [ 10, -10 ],
- [ -20, -10 ]
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "gantry_height":
- {
- "label": "Gantry Height",
- "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
- "default_value": 99999999999,
- "value": "machine_height",
- "type": "float",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_nozzle_id":
- {
- "label": "Nozzle ID",
- "description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".",
- "type": "str",
- "default_value": "unknown",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_nozzle_size":
- {
- "label": "Nozzle Diameter",
- "description": "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_use_extruder_offset_to_offset_coords":
- {
- "label": "Offset with Extruder",
- "description": "Apply the extruder offset to the coordinate system. Affects all extruders.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "extruder_prime_pos_z":
- {
- "label": "Extruder Prime Z Position",
- "description": "The Z coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value": "machine_height",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "extruder_prime_pos_abs":
- {
- "label": "Absolute Extruder Prime Position",
- "description": "Make the extruder prime position absolute rather than relative to the last-known location of the head.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_max_feedrate_x":
- {
- "label": "Maximum Speed X",
- "description": "The maximum speed for the motor of the X-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_y":
- {
- "label": "Maximum Speed Y",
- "description": "The maximum speed for the motor of the Y-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_z":
- {
- "label": "Maximum Speed Z",
- "description": "The maximum speed for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_feedrate_e":
- {
- "label": "Maximum Speed E",
- "description": "The maximum speed of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 299792458000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_x":
- {
- "label": "Maximum Acceleration X",
- "description": "Maximum acceleration for the motor of the X-direction",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_y":
- {
- "label": "Maximum Acceleration Y",
- "description": "Maximum acceleration for the motor of the Y-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 9000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_z":
- {
- "label": "Maximum Acceleration Z",
- "description": "Maximum acceleration for the motor of the Z-direction.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 100,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_acceleration_e":
- {
- "label": "Maximum Filament Acceleration",
- "description": "Maximum acceleration for the motor of the filament.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 10000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_acceleration":
- {
- "label": "Default Acceleration",
- "description": "The default acceleration of print head movement.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 4000,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_xy":
- {
- "label": "Default X-Y Jerk",
- "description": "Default jerk for movement in the horizontal plane.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_z":
- {
- "label": "Default Z Jerk",
- "description": "Default jerk for the motor of the Z-direction.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_max_jerk_e":
- {
- "label": "Default Filament Jerk",
- "description": "Default jerk for the motor of the filament.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5.0,
- "minimum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_steps_per_mm_x":
- {
- "label": "Steps per Millimeter (X)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the X direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_y":
- {
- "label": "Steps per Millimeter (Y)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Y direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_z":
- {
- "label": "Steps per Millimeter (Z)",
- "description": "How many steps of the stepper motor will result in one millimeter of movement in the Z direction.",
- "type": "float",
- "default_value": 50,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_steps_per_mm_e":
- {
- "label": "Steps per Millimeter (E)",
- "description": "How many steps of the stepper motors will result in moving the feeder wheel by one millimeter around its circumference.",
- "type": "float",
- "default_value": 1600,
- "minimum_value": "0.0000001",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_x":
- {
- "label": "X Endstop in Positive Direction",
- "description": "Whether the endstop of the X axis is in the positive direction (high X coordinate) or negative (low X coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_y":
- {
- "label": "Y Endstop in Positive Direction",
- "description": "Whether the endstop of the Y axis is in the positive direction (high Y coordinate) or negative (low Y coordinate).",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_endstop_positive_direction_z":
- {
- "label": "Z Endstop in Positive Direction",
- "description": "Whether the endstop of the Z axis is in the positive direction (high Z coordinate) or negative (low Z coordinate).",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_minimum_feedrate":
- {
- "label": "Minimum Feedrate",
- "description": "The minimal movement speed of the print head.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 0.0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "machine_feeder_wheel_diameter":
- {
- "label": "Feeder Wheel Diameter",
- "description": "The diameter of the wheel that drives the material in the feeder.",
- "unit": "mm",
- "type": "float",
- "default_value": 10.0,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "machine_scale_fan_speed_zero_to_one":
- {
- "label": "Scale Fan Speed To 0-1",
- "description": "Scale the fan speed to be between 0 and 1 instead of between 0 and 256.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "resolution":
- {
- "label": "Quality",
- "type": "category",
- "icon": "PrintQuality",
- "description": "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)",
- "children":
- {
- "layer_height":
- {
- "label": "Layer Height",
- "description": "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "layer_height_0":
- {
- "label": "Initial Layer Height",
- "description": "The height of the initial layer in mm. A thicker initial layer makes adhesion to the build plate easier.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "resolve": "min(extruderValues('layer_height_0'))",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "line_width":
- {
- "label": "Line Width",
- "description": "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "machine_nozzle_size",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width":
- {
- "label": "Wall Line Width",
- "description": "Width of a single wall line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "value": "line_width",
- "default_value": 0.4,
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_width_0":
- {
- "label": "Outer Wall Line Width",
- "description": "Width of the outermost wall line. By lowering this value, higher levels of detail can be printed.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "(0.1 + 0.4 * machine_nozzle_size) if inset_direction == \"outside_in\" else 0.1 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_line_width_x":
- {
- "label": "Inner Wall(s) Line Width",
- "description": "Width of a single wall line for all wall lines except the outermost one.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "value": "wall_line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "skin_line_width":
- {
- "label": "Top/Bottom Line Width",
- "description": "Width of a single top/bottom line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_line_width":
- {
- "label": "Infill Line Width",
- "description": "Width of a single infill line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skirt_brim_line_width":
- {
- "label": "Skirt/Brim Line Width",
- "description": "Width of a single skirt or brim line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable') or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_line_width":
- {
- "label": "Support Line Width",
- "description": "Width of a single support structure line.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "3 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "enabled": "(support_enable or support_meshes_present)",
- "value": "line_width",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_interface_line_width":
- {
- "label": "Support Interface Line Width",
- "description": "Width of a single line of support roof or floor.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_width":
- {
- "label": "Support Roof Line Width",
- "description": "Width of a single support roof line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_line_width":
- {
- "label": "Support Floor Line Width",
- "description": "Width of a single support floor line.",
- "unit": "mm",
- "default_value": 0.4,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "prime_tower_line_width":
- {
- "label": "Prime Tower Line Width",
- "description": "Width of a single prime tower line.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "initial_layer_line_width_factor":
- {
- "label": "Initial Layer Line Width",
- "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.",
- "type": "float",
- "unit": "%",
- "default_value": 100.0,
- "minimum_value": "0.001",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "shell":
- {
- "label": "Walls",
- "icon": "PrintShell",
- "description": "Shell",
- "type": "category",
- "children":
- {
- "wall_extruder_nr":
- {
- "label": "Wall Extruder",
- "description": "The extruder train used for printing the walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1",
- "children":
- {
- "wall_0_extruder_nr":
- {
- "label": "Outer Wall Extruder",
- "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "wall_x_extruder_nr":
- {
- "label": "Inner Wall Extruder",
- "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "value": "wall_extruder_nr",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- }
- }
- },
- "wall_thickness":
- {
- "label": "Wall Thickness",
- "description": "The thickness of the walls in the horizontal direction. This value divided by the wall line width defines the number of walls.",
- "unit": "mm",
- "default_value": 0.8,
- "value": "wall_line_width_0 if magic_spiralize else 0.8",
- "minimum_value": "0",
- "minimum_value_warning": "line_width",
- "maximum_value_warning": "10 * line_width",
- "maximum_value": "999999 * line_width",
- "type": "float",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "wall_line_count":
- {
- "label": "Wall Line Count",
- "description": "The number of walls. When calculated by the wall thickness, this value is rounded to a whole number.",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "10",
- "maximum_value": "999999",
- "type": "int",
- "value": "1 if magic_spiralize else max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1) if wall_thickness != 0 else 0",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "wall_transition_length":
- {
- "label": "Wall Transition Length",
- "description": "When transitioning between different numbers of walls as the part becomes thinner, a certain amount of space is allotted to split or join the wall lines.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.5 * line_width",
- "maximum_value_warning": "2 * line_width",
- "maximum_value": "min_bead_width * 3 * math.pi"
- },
- "wall_distribution_count":
- {
- "label": "Wall Distribution Count",
- "description": "The number of walls, counted from the center, over which the variation needs to be spread. Lower values mean that the outer walls don't change in width.",
- "type": "int",
- "maximum_value": "999999",
- "default_value": 1,
- "minimum_value": "1"
- },
- "wall_transition_angle":
- {
- "label": "Wall Transitioning Threshold Angle",
- "description": "When to create transitions between even and odd numbers of walls. A wedge shape with an angle greater than this setting will not have transitions and no walls will be printed in the center to fill the remaining space. Reducing this setting reduces the number and length of these center walls, but may leave gaps or overextrude.",
- "type": "float",
- "unit": "°",
- "default_value": 10,
- "minimum_value": "1",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "maximum_value": "59"
- },
- "wall_transition_filter_distance":
- {
- "label": "Wall Transitioning Filter Distance",
- "description": "If it would be transitioning back and forth between different numbers of walls in quick succession, don't transition at all. Remove transitions if they are closer together than this distance.",
- "type": "float",
- "unit": "mm",
- "value": "100",
- "enabled": false,
- "default_value": 100,
- "minimum_value": "wall_transition_length",
- "minimum_value_warning": "math.cos(wall_transition_angle / 180 * math.pi) * wall_line_width_x",
- "maximum_value": "999999"
- },
- "wall_transition_filter_deviation":
- {
- "label": "Wall Transitioning Filter Margin",
- "description": "Prevent transitioning back and forth between one extra wall and one less. This margin extends the range of line widths which follow to [Minimum Wall Line Width - Margin, 2 * Minimum Wall Line Width + Margin]. Increasing this margin reduces the number of transitions, which reduces the number of extrusion starts/stops and travel time. However, large line width variation can lead to under- or overextrusion problems.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.1,
- "value": ".25 * machine_nozzle_size",
- "minimum_value": "0",
- "minimum_value_warning": ".01",
- "maximum_value_warning": "machine_nozzle_size"
- },
- "wall_0_wipe_dist":
- {
- "label": "Outer Wall Wipe Distance",
- "description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_0_inset":
- {
- "label": "Outer Wall Inset",
- "description": "Inset applied to the path of the outer wall. If the outer wall is smaller than the nozzle, and printed after the inner walls, use this offset to get the hole in the nozzle to overlap with the inner walls instead of the outside of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "(machine_nozzle_size - wall_line_width_0) / 2 if (wall_line_width_0 < machine_nozzle_size and inset_direction != \"outside_in\") else 0",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "optimize_wall_printing_order":
- {
- "label": "Optimize Wall Printing Order",
- "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "inset_direction":
- {
- "label": "Wall Ordering",
- "description": "Determines the order in which walls are printed. Printing outer walls earlier helps with dimensional accuracy, as faults from inner walls cannot propagate to the outside. However printing them later allows them to stack better when overhangs are printed. When there is an uneven amount of total innner walls, the 'center last line' is always printed last.",
- "type": "enum",
- "options":
- {
- "inside_out": "Inside To Outside",
- "outside_in": "Outside To Inside"
- },
- "default_value": "inside_out",
- "settable_per_mesh": true
- },
- "alternate_extra_perimeter":
- {
- "label": "Alternate Extra Wall",
- "description": "Prints an extra wall at every other layer. This way infill gets caught between these extra walls, resulting in stronger prints.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "min_wall_line_width":
- {
- "label": "Minimum Wall Line Width",
- "description": "For thin structures around once or twice the nozzle size, the line widths need to be altered to adhere to the thickness of the model. This setting controls the minimum line width allowed for the walls. The minimum line widths inherently also determine the maximum line widths, since we transition from N to N+1 walls at some geometry thickness where the N walls are wide and the N+1 walls are narrow. The widest possible wall line is twice the Minimum Wall Line Width.",
- "unit": "mm",
- "minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
- "maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
- "default_value": 0.3,
- "value": "machine_nozzle_size * .85",
- "type": "float",
- "settable_per_mesh": true,
- "children":
- {
- "min_even_wall_line_width":
- {
- "label": "Minimum Even Wall Line Width",
- "description": "The minimum line width for normal polygonal walls. This setting determines at which model thickness we switch from printing a single thin wall line, to printing two wall lines. A higher Minimum Even Wall Line Width leads to a higher maximum odd wall line width. The maximum even wall line width is calculated as Outer Wall Line Width + 0.5 * Minimum Odd Wall Line Width.",
- "unit": "mm",
- "minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
- "maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
- "default_value": 0.3,
- "value": "min_wall_line_width",
- "type": "float",
- "settable_per_mesh": true
- },
- "min_odd_wall_line_width":
- {
- "label": "Minimum Odd Wall Line Width",
- "description": "The minimum line width for middle line gap filler polyline walls. This setting determines at which model thickness we switch from printing two wall lines, to printing two outer walls and a single central wall in the middle. A higher Minimum Odd Wall Line Width leads to a higher maximum even wall line width. The maximum odd wall line width is calculated as 2 * Minimum Even Wall Line Width.",
- "unit": "mm",
- "minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
- "maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
- "default_value": 0.3,
- "value": "min_wall_line_width",
- "type": "float",
- "settable_per_mesh": true
- }
- }
- },
- "fill_outline_gaps":
- {
- "label": "Print Thin Walls",
- "description": "Print pieces of the model which are horizontally thinner than the nozzle size.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "min_feature_size":
- {
- "label": "Minimum Feature Size",
- "description": "Minimum thickness of thin features. Model features that are thinner than this value will not be printed, while features thicker than the Minimum Feature Size will be widened to the Minimum Wall Line Width.",
- "unit": "mm",
- "default_value": 0.1,
- "value": "wall_line_width_0 / 4",
- "minimum_value": "0",
- "maximum_value": "wall_line_width_0",
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr",
- "enabled": "fill_outline_gaps",
- "settable_per_mesh": true
- },
- "min_bead_width":
- {
- "label": "Minimum Thin Wall Line Width",
- "description": "Width of the wall that will replace thin features (according to the Minimum Feature Size) of the model. If the Minimum Wall Line Width is thinner than the thickness of the feature, the wall will become as thick as the feature itself.",
- "unit": "mm",
- "value": "min_wall_line_width",
- "default_value": 0.2,
- "minimum_value": "0.001",
- "minimum_value_warning": "min_feature_size",
- "maximum_value_warning": "wall_line_width_0",
- "type": "float",
- "limit_to_extruder": "wall_0_extruder_nr",
- "enabled": "fill_outline_gaps",
- "settable_per_mesh": true
- },
- "xy_offset":
- {
- "label": "Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "xy_offset_layer_0":
- {
- "label": "Initial Layer Horizontal Expansion",
- "description": "Amount of offset applied to all polygons in the first layer. A negative value can compensate for squishing of the first layer known as \"elephant's foot\".",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "value": "xy_offset",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "hole_xy_offset":
- {
- "label": "Hole Horizontal Expansion",
- "description": "Amount of offset applied to all holes in each layer. Positive values increase the size of the holes, negative values reduce the size of the holes.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "-1",
- "maximum_value_warning": "1",
- "default_value": 0,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_type":
- {
- "label": "Z Seam Alignment",
- "description": "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker.",
- "type": "enum",
- "options":
- {
- "back": "User Specified",
- "shortest": "Shortest",
- "random": "Random",
- "sharpest_corner": "Sharpest Corner"
- },
- "default_value": "sharpest_corner",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_position":
- {
- "label": "Z Seam Position",
- "description": "The position near where to start printing each part in a layer.",
- "type": "enum",
- "options":
- {
- "backleft": "Back Left",
- "back": "Back",
- "backright": "Back Right",
- "right": "Right",
- "frontright": "Front Right",
- "front": "Front",
- "frontleft": "Front Left",
- "left": "Left"
- },
- "enabled": "z_seam_type == 'back'",
- "default_value": "back",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "z_seam_x":
- {
- "label": "Z Seam X",
- "description": "The X coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'left' or z_seam_position == 'backleft') else machine_width / 2 if (z_seam_position == 'front' or z_seam_position == 'back') else machine_width) - (machine_width / 2 if z_seam_relative or machine_center_is_zero else 0)",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_y":
- {
- "label": "Z Seam Y",
- "description": "The Y coordinate of the position near where to start printing each part in a layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 100.0,
- "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'front' or z_seam_position == 'frontright') else machine_depth / 2 if (z_seam_position == 'left' or z_seam_position == 'right') else machine_depth) - (machine_depth / 2 if z_seam_relative or machine_center_is_zero else 0)",
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "z_seam_corner":
- {
- "label": "Seam Corner Preference",
- "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate.",
- "type": "enum",
- "options":
- {
- "z_seam_corner_none": "None",
- "z_seam_corner_inner": "Hide Seam",
- "z_seam_corner_outer": "Expose Seam",
- "z_seam_corner_any": "Hide or Expose Seam",
- "z_seam_corner_weighted": "Smart Hiding"
- },
- "default_value": "z_seam_corner_inner",
- "enabled": "z_seam_type != 'random'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "z_seam_relative":
- {
- "label": "Z Seam Relative",
- "description": "When enabled, the z seam coordinates are relative to each part's centre. When disabled, the coordinates define an absolute position on the build plate.",
- "unit": "mm",
- "type": "bool",
- "default_value": false,
- "enabled": "z_seam_type == 'back'",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "top_bottom":
- {
- "label": "Top/Bottom",
- "icon": "PrintTopBottom",
- "description": "Top/Bottom",
- "type": "category",
- "children":
- {
- "roofing_extruder_nr":
- {
- "label": "Top Surface Skin Extruder",
- "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "value": "top_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
- },
- "roofing_layer_count":
- {
- "label": "Top Surface Skin Layers",
- "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "top_layers - 1",
- "type": "int",
- "maximum_value": "999999",
- "value": "0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "top_layers > 0",
- "children":
- {
- "roofing_line_width":
- {
- "label": "Top Surface Skin Line Width",
- "description": "Width of a single line of the areas at the top of the print.",
- "unit": "mm",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size",
- "maximum_value_warning": "2 * machine_nozzle_size",
- "default_value": 0.4,
- "type": "float",
- "value": "skin_line_width",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_pattern":
- {
- "label": "Top Surface Skin Pattern",
- "description": "The pattern of the top most layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "roofing_monotonic":
- {
- "label": "Monotonic Top Surface Order",
- "description": "Print top surface lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "value": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0 and roofing_pattern != 'concentric'",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "roofing_angles":
- {
- "label": "Top Surface Skin Line Directions",
- "description": "A list of integer line directions to use when the top surface skin layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "skin_angles",
- "enabled": "roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "top_bottom_extruder_nr":
- {
- "label": "Top/Bottom Extruder",
- "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "top_bottom_thickness":
- {
- "label": "Top/Bottom Thickness",
- "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.6",
- "maximum_value": "machine_height",
- "type": "float",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_thickness":
- {
- "label": "Top Thickness",
- "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "maximum_value": "machine_height",
- "type": "float",
- "value": "top_bottom_thickness",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_layers":
- {
- "label": "Top Layers",
- "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.",
- "default_value": 8,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "maximum_value": "999999",
- "type": "int",
- "minimum_value_warning": "2",
- "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "bottom_thickness":
- {
- "label": "Bottom Thickness",
- "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "type": "float",
- "value": "top_bottom_thickness",
- "maximum_value": "machine_height",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "bottom_layers":
- {
- "label": "Bottom Layers",
- "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "maximum_value": "999999",
- "type": "int",
- "value": "999999 if infill_sparse_density == 100 and not magic_spiralize else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "initial_bottom_layers":
- {
- "label": "Initial Bottom Layers",
- "description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "999999",
- "default_value": 6,
- "type": "int",
- "value": "bottom_layers",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "top_bottom_pattern":
- {
- "label": "Top/Bottom Pattern",
- "description": "The pattern of the top/bottom layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "top_bottom_pattern_0":
- {
- "label": "Bottom Pattern Initial Layer",
- "description": "The pattern on the bottom of the print on the first layer.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_skin_polygons":
- {
- "label": "Connect Top/Bottom Polygons",
- "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality.",
- "type": "bool",
- "default_value": false,
- "enabled": "((top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric') or (initial_bottom_layers > 0 and top_bottom_pattern_0 == 'concentric') or (roofing_layer_count > 0 and roofing_pattern == 'concentric')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_monotonic":
- {
- "label": "Monotonic Top/Bottom Order",
- "description": "Print top/bottom lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "default_value": false,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_bottom_pattern != 'concentric' or top_bottom_pattern_0 != 'concentric')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_angles":
- {
- "label": "Top/Bottom Line Directions",
- "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_no_small_gaps_heuristic":
- {
- "label": "No Skin in Z Gaps",
- "description": "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air.",
- "type": "bool",
- "default_value": false,
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_outline_count":
- {
- "label": "Extra Skin Wall Count",
- "description": "Replaces the outermost part of the top/bottom pattern with a number of concentric lines. Using one or two lines improves roofs that start on infill material.",
- "value": "0 if top_bottom_pattern == 'concentric' and top_bottom_pattern_0 == 'concentric' and roofing_layer_count <= 0 else 1",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "maximum_value": "999999",
- "type": "int",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_bottom_pattern != 'concentric' or top_bottom_pattern_0 != 'concentric' or (roofing_layer_count > 0 and roofing_pattern != 'concentric'))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_enabled":
- {
- "label": "Enable Ironing",
- "description": "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_only_highest_layer":
- {
- "label": "Iron Only Highest Layer",
- "description": "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish.",
- "type": "bool",
- "default_value": false,
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_pattern":
- {
- "label": "Ironing Pattern",
- "description": "The pattern to use for ironing top surfaces.",
- "type": "enum",
- "options":
- {
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "zigzag",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_monotonic":
- {
- "label": "Monotonic Ironing Order",
- "description": "Print ironing lines in an ordering that causes them to always overlap with adjacent lines in a single direction. This takes slightly more time to print, but makes flat surfaces look more consistent.",
- "type": "bool",
- "default_value": false,
- "enabled": "ironing_enabled and ironing_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_line_spacing":
- {
- "label": "Ironing Line Spacing",
- "description": "The distance between the lines of ironing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.1,
- "minimum_value": "0.001",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_flow":
- {
- "label": "Ironing Flow",
- "description": "The amount of material, relative to a normal skin line, to extrude during ironing. Keeping the nozzle filled helps filling some of the crevices of the top surface, but too much results in overextrusion and blips on the side of the surface.",
- "type": "float",
- "unit": "%",
- "default_value": 10.0,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "ironing_inset":
- {
- "label": "Ironing Inset",
- "description": "A distance to keep from the edges of the model. Ironing all the way to the edge of the mesh may result in a jagged edge on your print.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.35,
- "value": "wall_line_width_0 / 2 + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)",
- "minimum_value_warning": "0",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_ironing":
- {
- "label": "Ironing Speed",
- "description": "The speed at which to pass over the top surface.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 20.0,
- "value": "speed_topbottom * 20 / 30",
- "minimum_value": "0.001",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_ironing":
- {
- "label": "Ironing Acceleration",
- "description": "The acceleration with which ironing is performed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_ironing":
- {
- "label": "Ironing Jerk",
- "description": "The maximum instantaneous velocity change while performing ironing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and ironing_enabled",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_overlap":
- {
- "label": "Skin Overlap Percentage",
- "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.",
- "unit": "%",
- "type": "float",
- "default_value": 5,
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "value": "5 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "skin_overlap_mm":
- {
- "label": "Skin Overlap",
- "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.02,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "skin_preshrink":
- {
- "label": "Skin Removal Width",
- "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_preshrink":
- {
- "label": "Top Skin Removal Width",
- "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_preshrink":
- {
- "label": "Bottom Skin Removal Width",
- "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "expand_skins_expand_distance":
- {
- "label": "Skin Expand Distance",
- "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "-skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_expand_distance":
- {
- "label": "Top Skin Expand Distance",
- "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-top_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_expand_distance":
- {
- "label": "Bottom Skin Expand Distance",
- "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-bottom_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "max_skin_angle_for_expansion":
- {
- "label": "Maximum Skin Angle for Expansion",
- "description": "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal and will cause no skin to be expanded, while an angle of 90° is vertical and will cause all skin to be expanded.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "min_skin_width_for_expansion":
- {
- "label": "Minimum Skin Width for Expansion",
- "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
- "minimum_value": "0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "infill":
- {
- "label": "Infill",
- "icon": "Infill1",
- "description": "Infill",
- "type": "category",
- "children":
- {
- "infill_extruder_nr":
- {
- "label": "Infill Extruder",
- "description": "The extruder train used for printing infill. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "infill_sparse_density":
- {
- "label": "Infill Density",
- "description": "Adjusts the density of infill of the print.",
- "unit": "%",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_line_distance":
- {
- "label": "Infill Line Distance",
- "description": "Distance between the printed infill lines. This setting is calculated by the infill density and the infill line width.",
- "unit": "mm",
- "type": "float",
- "default_value": 2,
- "minimum_value": "0",
- "minimum_value_warning": "infill_line_width",
- "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else (1.6 if infill_pattern == 'lightning' else 1)))))",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "infill_pattern":
- {
- "label": "Infill Pattern",
- "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Gyroid, cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction. Lightning infill tries to minimize the infill, by only supporting the ceiling of the object.",
- "type": "enum",
- "options":
- {
- "grid": "Grid",
- "lines": "Lines",
- "triangles": "Triangles",
- "trihexagon": "Tri-Hexagon",
- "cubic": "Cubic",
- "cubicsubdiv": "Cubic Subdivision",
- "tetrahedral": "Octet",
- "quarter_cubic": "Quarter Cubic",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross",
- "cross_3d": "Cross 3D",
- "gyroid": "Gyroid",
- "lightning": "Lightning"
- },
- "default_value": "grid",
- "enabled": "infill_line_distance > 0",
- "value": "'lines' if infill_sparse_density > 25 else 'grid'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "zig_zaggify_infill":
- {
- "label": "Connect Infill Lines",
- "description": "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used.",
- "type": "bool",
- "default_value": false,
- "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'gyroid'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_infill_polygons":
- {
- "label": "Connect Infill Polygons",
- "description": "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time.",
- "type": "bool",
- "default_value": true,
- "value": "(infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0) and infill_wall_line_count > 0",
- "enabled": "infill_pattern != 'lightning' and infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'concentric' or infill_multiplier % 2 == 0 or infill_wall_line_count > 1",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_angles":
- {
- "label": "Infill Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "infill_pattern not in ('concentric', 'cross', 'cross_3d', 'gyroid', 'lightning') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_x":
- {
- "label": "Infill X Offset",
- "description": "The infill pattern is moved this distance along the X axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern != 'lightning' and infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_offset_y":
- {
- "label": "Infill Y Offset",
- "description": "The infill pattern is moved this distance along the Y axis.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "enabled": "infill_pattern != 'lightning' and infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_randomize_start_location":
- {
- "label": "Randomize Infill Start",
- "description": "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move.",
- "type": "bool",
- "default_value": false,
- "warning_value": "True if infill_pattern not in ('grid', 'triangles', 'trihexagon', 'cubic', 'cubicsubdiv', 'tetrahedral', 'quarter_cubic') else None",
- "enabled": "not (infill_pattern == 'lightning' or (infill_pattern == 'cross' and connect_infill_polygons) or infill_pattern == 'concentric')",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_multiplier":
- {
- "label": "Infill Line Multiplier",
- "description": "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage.",
- "default_value": 1,
- "type": "int",
- "maximum_value": "999999",
- "minimum_value": "1",
- "maximum_value_warning": "infill_line_distance / infill_line_width",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'zigzag' and (gradual_infill_steps == 0 or not zig_zaggify_infill)",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_wall_line_count":
- {
- "label": "Extra Infill Wall Count",
- "description": "Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value": "999999",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "sub_div_rad_add":
- {
- "label": "Cubic Subdivision Shell",
- "description": "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "wall_line_width_x",
- "minimum_value_warning": "-1 * infill_line_distance",
- "maximum_value_warning": "5 * infill_line_distance",
- "enabled": "infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_overlap":
- {
- "label": "Infill Overlap Percentage",
- "description": "The amount of overlap between the infill and the walls as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "%",
- "type": "float",
- "default_value": 10,
- "value": "10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "minimum_value_warning": "-50",
- "maximum_value_warning": "100",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "infill_overlap_mm":
- {
- "label": "Infill Overlap",
- "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "minimum_value_warning": "-0.5 * machine_nozzle_size",
- "maximum_value_warning": "machine_nozzle_size",
- "value": "0.5 * (infill_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0",
- "enabled": "infill_sparse_density > 0 and infill_pattern != 'concentric'",
- "settable_per_mesh": true
- }
- }
- },
- "infill_wipe_dist":
- {
- "label": "Infill Wipe Distance",
- "description": "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.04,
- "value": "wall_line_width_0 / 4 if wall_line_count == 1 else wall_line_width_x / 4",
- "minimum_value_warning": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_sparse_thickness":
- {
- "label": "Infill Layer Thickness",
- "description": "The thickness per layer of infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height') / 2 if infill_line_distance > 0 else -999999",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * 8 if infill_line_distance > 0 else 999999",
- "value": "resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_steps":
- {
- "label": "Gradual Infill Steps",
- "description": "Number of times to reduce the infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'concentric') else 5",
- "maximum_value": "999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2))",
- "enabled": "infill_sparse_density > 0 and infill_pattern not in ['cubicsubdiv', 'cross', 'cross_3d', 'lightning']",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "gradual_infill_step_height":
- {
- "label": "Gradual Infill Step Height",
- "description": "The height of infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "infill_sparse_density > 0 and gradual_infill_steps > 0 and infill_pattern not in ['cubicsubdiv', 'cross', 'cross_3d', 'lightning']",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_before_walls":
- {
- "label": "Infill Before Walls",
- "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.",
- "type": "bool",
- "default_value": true,
- "enabled": "infill_sparse_density > 0 and wall_x_extruder_nr == infill_extruder_nr",
- "settable_per_mesh": true
- },
- "min_infill_area":
- {
- "label": "Minimum Infill Area",
- "description": "Don't generate areas of infill smaller than this (use skin instead).",
- "unit": "mm²",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_enabled":
- {
- "label": "Infill Support",
- "description": "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength.",
- "type": "bool",
- "default_value": false,
- "enabled": "infill_pattern != 'lightning' and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "infill_support_angle":
- {
- "label": "Infill Overhang Angle",
- "description": "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 40,
- "enabled": "infill_pattern != 'lightning' and infill_sparse_density > 0 and infill_support_enabled",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_edge_support_thickness":
- {
- "label": "Skin Edge Support Thickness",
- "description": "The thickness of the extra infill that supports skin edges.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value": "machine_height",
- "maximum_value_warning": "resolveOrValue('infill_sparse_thickness') * 10",
- "type": "float",
- "value": "0",
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_sparse_density > 0",
- "settable_per_mesh": true,
- "children":
- {
- "skin_edge_support_layers":
- {
- "label": "Skin Edge Support Layers",
- "description": "The number of infill layers that supports skin edges.",
- "default_value": 4,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "type": "int",
- "maximum_value": "999999",
- "value": "math.ceil(round(skin_edge_support_thickness / resolveOrValue('infill_sparse_thickness'), 4))",
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_sparse_density > 0",
- "settable_per_mesh": true
- }
- }
- },
- "lightning_infill_support_angle":
- {
- "label": "Lightning Infill Support Angle",
- "description": "Determines when a lightning infill layer has to support anything above it. Measured in the angle given the thickness of a layer.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "75",
- "default_value": 40,
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_pattern == 'lightning'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "lightning_infill_overhang_angle":
- {
- "label": "Lightning Infill Overhang Angle",
- "description": "Determines when a lightning infill layer has to support the model above it. Measured in the angle given the thickness.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "75",
- "default_value": 40,
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_pattern == 'lightning'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "value": "lightning_infill_support_angle"
- },
- "lightning_infill_prune_angle":
- {
- "label": "Lightning Infill Prune Angle",
- "description": "The endpoints of infill lines are shortened to save on material. This setting is the angle of overhang of the endpoints of these lines.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "75",
- "default_value": 40,
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_pattern == 'lightning'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "value": "lightning_infill_support_angle"
- },
- "lightning_infill_straightening_angle":
- {
- "label": "Lightning Infill Straightening Angle",
- "description": "The infill lines are straightened out to save on printing time. This is the maximum angle of overhang allowed across the length of the infill line.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "75",
- "default_value": 40,
- "limit_to_extruder": "infill_extruder_nr",
- "enabled": "infill_pattern == 'lightning'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "value": "lightning_infill_support_angle"
- }
- }
- }
- }
- },
- "material":
- {
- "label": "Material",
- "icon": "Spool",
- "description": "Material",
- "type": "category",
- "children":
- {
- "default_material_print_temperature":
- {
- "label": "Default Printing Temperature",
- "description": "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": false,
- "settable_per_extruder": true,
- "settable_per_mesh": false,
- "minimum_value": "-273.15"
- },
- "build_volume_temperature":
- {
- "label": "Build Volume Temperature",
- "description": "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted.",
- "unit": "°C",
- "type": "float",
- "default_value": 0,
- "resolve": "min(extruderValues('build_volume_temperature'))",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "enabled": "machine_heated_build_volume",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "material_print_temperature":
- {
- "label": "Printing Temperature",
- "description": "The temperature used for printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 210,
- "value": "default_material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not (material_flow_dependent_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_print_temperature_layer_0":
- {
- "label": "Printing Temperature Initial Layer",
- "description": "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer.",
- "unit": "°C",
- "type": "float",
- "default_value": 215,
- "value": "material_print_temperature",
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "285",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_initial_print_temperature":
- {
- "label": "Initial Printing Temperature",
- "description": "The minimal temperature while heating up to the Printing Temperature at which printing can already start.",
- "unit": "°C",
- "type": "float",
- "default_value": 200,
- "value": "max(-273.15, material_print_temperature - 10)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_final_print_temperature":
- {
- "label": "Final Printing Temperature",
- "description": "The temperature to which to already start cooling down just before the end of printing.",
- "unit": "°C",
- "type": "float",
- "default_value": 195,
- "value": "max(-273.15, material_print_temperature - 15)",
- "minimum_value": "-273.15",
- "minimum_value_warning": "material_standby_temperature",
- "maximum_value_warning": "material_print_temperature",
- "maximum_value": "365",
- "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_extrusion_cool_down_speed":
- {
- "label": "Extrusion Cool Down Speed Modifier",
- "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.",
- "unit": "°C/s",
- "type": "float",
- "default_value": 0.7,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "maximum_value": "machine_nozzle_heat_up_speed",
- "enabled": "material_flow_dependent_temperature or (extruders_enabled_count > 1 and material_final_print_temperature != material_print_temperature)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "default_material_bed_temperature":
- {
- "label": "Default Build Plate Temperature",
- "description": "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('default_material_bed_temperature'))",
- "default_value": 60,
- "minimum_value": "-273.15",
- "minimum_value_warning": "build_volume_temperature",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature":
- {
- "label": "Build Plate Temperature",
- "description": "The temperature used for the heated build plate. If this is 0, the build plate is left unheated.",
- "unit": "°C",
- "type": "float",
- "default_value": 60,
- "value": "default_material_bed_temperature",
- "resolve": "max(extruderValues('material_bed_temperature'))",
- "minimum_value": "-273.15",
- "minimum_value_warning": "build_volume_temperature",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_bed_temperature_layer_0":
- {
- "label": "Build Plate Temperature Initial Layer",
- "description": "The temperature used for the heated build plate at the first layer. If this is 0, the build plate is left unheated during the first layer.",
- "unit": "°C",
- "type": "float",
- "resolve": "max(extruderValues('material_bed_temperature_layer_0'))",
- "default_value": 60,
- "value": "resolveOrValue('material_bed_temperature')",
- "minimum_value": "-273.15",
- "minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))",
- "maximum_value_warning": "130",
- "maximum_value": "200",
- "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "material_adhesion_tendency":
- {
- "label": "Adhesion Tendency",
- "description": "Surface adhesion tendency.",
- "type": "int",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "10",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_surface_energy":
- {
- "label": "Surface Energy",
- "description": "Surface energy.",
- "unit": "%",
- "type": "int",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_shrinkage_percentage":
- {
- "label": "Scaling Factor Shrinkage Compensation",
- "description": "To compensate for the shrinkage of the material as it cools down, the model will be scaled with this factor.",
- "unit": "%",
- "type": "float",
- "default_value": 100.0,
- "enabled": true,
- "minimum_value": "0.001",
- "minimum_value_warning": "100",
- "maximum_value_warning": "120",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "resolve": "sum(extruderValues(\"material_shrinkage_percentage\")) / len(extruderValues(\"material_shrinkage_percentage\"))",
- "children":
- {
- "material_shrinkage_percentage_xy":
- {
- "label": "Horizontal Scaling Factor Shrinkage Compensation",
- "description": "To compensate for the shrinkage of the material as it cools down, the model will be scaled with this factor in the XY-direction (horizontally).",
- "unit": "%",
- "type": "float",
- "default_value": 100.0,
- "enabled": true,
- "minimum_value": "0.001",
- "minimum_value_warning": "100",
- "maximum_value_warning": "120",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "resolve": "sum(extruderValues(\"material_shrinkage_percentage_xy\")) / len(extruderValues(\"material_shrinkage_percentage_xy\"))",
- "value": "material_shrinkage_percentage"
- },
- "material_shrinkage_percentage_z":
- {
- "label": "Vertical Scaling Factor Shrinkage Compensation",
- "description": "To compensate for the shrinkage of the material as it cools down, the model will be scaled with this factor in the Z-direction (vertically).",
- "unit": "%",
- "type": "float",
- "default_value": 100.0,
- "enabled": true,
- "minimum_value": "0.001",
- "minimum_value_warning": "100",
- "maximum_value_warning": "120",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "resolve": "sum(extruderValues(\"material_shrinkage_percentage_z\")) / len(extruderValues(\"material_shrinkage_percentage_z\"))",
- "value": "material_shrinkage_percentage"
- }
- }
- },
- "material_crystallinity":
- {
- "label": "Crystalline Material",
- "description": "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?",
- "type": "bool",
- "default_value": false,
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_anti_ooze_retracted_position":
- {
- "label": "Anti-ooze Retracted Position",
- "description": "How far the material needs to be retracted before it stops oozing.",
- "type": "float",
- "unit": "mm",
- "default_value": -4,
- "enabled": false,
- "minimum_value_warning": "-switch_extruder_retraction_amount",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_anti_ooze_retraction_speed":
- {
- "label": "Anti-ooze Retraction Speed",
- "description": "How fast the material needs to be retracted during a filament switch to prevent oozing.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 5,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_retracted_position":
- {
- "label": "Break Preparation Retracted Position",
- "description": "How far the filament can be stretched before it breaks, while heated.",
- "type": "float",
- "unit": "mm",
- "default_value": -16,
- "enabled": false,
- "minimum_value_warning": "-retraction_amount * 4",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_speed":
- {
- "label": "Break Preparation Retraction Speed",
- "description": "How fast the filament needs to be retracted just before breaking it off in a retraction.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 2,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_preparation_temperature":
- {
- "label": "Break Preparation Temperature",
- "description": "The temperature used to purge material, should be roughly equal to the highest possible printing temperature.",
- "type": "float",
- "unit": "°C",
- "default_value": 50,
- "value": "material_print_temperature",
- "enabled": false,
- "minimum_value": "-273.15",
- "maximum_value_warning": "300",
- "maximum_value": "365",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_retracted_position":
- {
- "label": "Break Retracted Position",
- "description": "How far to retract the filament in order to break it cleanly.",
- "type": "float",
- "unit": "mm",
- "default_value": -50,
- "enabled": false,
- "minimum_value_warning": "-100",
- "maximum_value": "0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_speed":
- {
- "label": "Break Retraction Speed",
- "description": "The speed at which to retract the filament in order to break it cleanly.",
- "type": "float",
- "unit": "mm/s",
- "default_value": 25,
- "enabled": false,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_break_temperature":
- {
- "label": "Break Temperature",
- "description": "The temperature at which the filament is broken for a clean break.",
- "type": "float",
- "unit": "°C",
- "default_value": 50,
- "enabled": false,
- "minimum_value": "-273.15",
- "maximum_value": "365",
- "maximum_value_warning": "300",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flush_purge_speed":
- {
- "label": "Flush Purge Speed",
- "description": "How fast to prime the material after switching to a different material.",
- "type": "float",
- "default_value": 0.5,
- "enabled": false
- },
- "material_flush_purge_length":
- {
- "label": "Flush Purge Length",
- "description": "How much material to use to purge the previous material out of the nozzle (in length of filament) when switching to a different material.",
- "type": "float",
- "default_value": 60,
- "enabled": false
- },
- "material_end_of_filament_purge_speed":
- {
- "label": "End of Filament Purge Speed",
- "description": "How fast to prime the material after replacing an empty spool with a fresh spool of the same material.",
- "type": "float",
- "default_value": 0.5,
- "enabled": false
- },
- "material_end_of_filament_purge_length":
- {
- "label": "End of Filament Purge Length",
- "description": "How much material to use to purge the previous material out of the nozzle (in length of filament) when replacing an empty spool with a fresh spool of the same material.",
- "type": "float",
- "default_value": 20,
- "enabled": false
- },
- "material_maximum_park_duration":
- {
- "label": "Maximum Park Duration",
- "description": "How long the material can be kept out of dry storage safely.",
- "type": "float",
- "default_value": 300,
- "enabled": false
- },
- "material_no_load_move_factor":
- {
- "label": "No Load Move Factor",
- "description": "A factor indicating how much the filament gets compressed between the feeder and the nozzle chamber, used to determine how far to move the material for a filament switch.",
- "type": "float",
- "default_value": 0.940860215,
- "enabled": false
- },
- "material_flow":
- {
- "label": "Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": true,
- "children":
- {
- "wall_material_flow":
- {
- "label": "Wall Flow",
- "description": "Flow compensation on wall lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1",
- "settable_per_mesh": true,
- "children":
- {
- "wall_0_material_flow":
- {
- "label": "Outer Wall Flow",
- "description": "Flow compensation on the outermost wall line.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "wall_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_x_material_flow":
- {
- "label": "Inner Wall(s) Flow",
- "description": "Flow compensation on wall lines for all wall lines except the outermost one.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "wall_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "skin_material_flow":
- {
- "label": "Top/Bottom Flow",
- "description": "Flow compensation on top/bottom lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "roofing_material_flow":
- {
- "label": "Top Surface Skin Flow",
- "description": "Flow compensation on lines of the areas at the top of the print.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "skin_material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "infill_material_flow":
- {
- "label": "Infill Flow",
- "description": "Flow compensation on infill lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "skirt_brim_material_flow":
- {
- "label": "Skirt/Brim Flow",
- "description": "Flow compensation on skirt or brim lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_material_flow":
- {
- "label": "Support Flow",
- "description": "Flow compensation on support structure lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_interface_material_flow":
- {
- "label": "Support Interface Flow",
- "description": "Flow compensation on lines of support roof or floor.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_material_flow":
- {
- "label": "Support Roof Flow",
- "description": "Flow compensation on support roof lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_material_flow')",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_material_flow":
- {
- "label": "Support Floor Flow",
- "description": "Flow compensation on support floor lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_material_flow')",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "prime_tower_flow":
- {
- "label": "Prime Tower Flow",
- "description": "Flow compensation on prime tower lines.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "material_flow_layer_0":
- {
- "label": "Initial Layer Flow",
- "description": "Flow compensation for the first layer: the amount of material extruded on the initial layer is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "settable_per_mesh": true
- },
- "wall_x_material_flow_layer_0":
- {
- "label": "Initial Layer Inner Wall Flow",
- "description": "Flow compensation on wall lines for all wall lines except the outermost one, but only for the first layer",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow_layer_0",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- },
- "wall_0_material_flow_layer_0":
- {
- "label": "Initial Layer Outer Wall Flow",
- "description": "Flow compensation on the outermost wall line of the first layer.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow_layer_0",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_material_flow_layer_0":
- {
- "label": "Initial Layer Bottom Flow",
- "description": "Flow compensation on bottom lines of the first layer",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "value": "material_flow_layer_0",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "material_standby_temperature":
- {
- "label": "Standby Temperature",
- "description": "The temperature of the nozzle when another nozzle is currently used for printing.",
- "type": "float",
- "unit": "°C",
- "default_value": 150,
- "minimum_value": "-273.15",
- "minimum_value_warning": "0",
- "maximum_value_warning": "260",
- "maximum_value": "365",
- "enabled": "extruders_enabled_count > 1 and machine_nozzle_temp_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "speed":
- {
- "label": "Speed",
- "icon": "SpeedOMeter",
- "description": "Speed",
- "type": "category",
- "children":
- {
- "speed_print":
- {
- "label": "Print Speed",
- "description": "The speed at which printing happens.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value_warning": "150",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "default_value": 60,
- "settable_per_mesh": true,
- "children":
- {
- "speed_infill":
- {
- "label": "Infill Speed",
- "description": "The speed at which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall":
- {
- "label": "Wall Speed",
- "description": "The speed at which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "settable_per_mesh": true,
- "children":
- {
- "speed_wall_0":
- {
- "label": "Outer Wall Speed",
- "description": "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_wall",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "speed_wall_x":
- {
- "label": "Inner Wall Speed",
- "description": "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_wall * 2",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "speed_roofing":
- {
- "label": "Top Surface Skin Speed",
- "description": "The speed at which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 25,
- "value": "speed_topbottom",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "roofing_layer_count > 0 and top_layers > 0"
- },
- "speed_topbottom":
- {
- "label": "Top/Bottom Speed",
- "description": "The speed at which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 30,
- "value": "speed_print / 2",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "settable_per_mesh": true
- },
- "speed_support":
- {
- "label": "Support Speed",
- "description": "The speed at which the support structure is printed. Printing support at higher speeds can greatly reduce printing time. The surface quality of the support structure is not important since it is removed after printing.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "default_value": 60,
- "value": "speed_print",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_infill":
- {
- "label": "Support Infill Speed",
- "description": "The speed at which the infill of support is printed. Printing the infill at lower speeds improves stability.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 60,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "value": "speed_support",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_interface":
- {
- "label": "Support Interface Speed",
- "description": "The speed at which the roofs and floors of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "value": "speed_support / 1.5",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "speed_support_roof":
- {
- "label": "Support Roof Speed",
- "description": "The speed at which the roofs of support are printed. Printing them at lower speeds can improve overhang quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "value": "extruderValue(support_roof_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_support_bottom":
- {
- "label": "Support Floor Speed",
- "description": "The speed at which the floor of support is printed. Printing it at lower speed can improve adhesion of support on top of your model.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 40,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "value": "extruderValue(support_bottom_extruder_nr, 'speed_support_interface')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "speed_prime_tower":
- {
- "label": "Prime Tower Speed",
- "description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 60,
- "value": "speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "speed_travel":
- {
- "label": "Travel Speed",
- "description": "The speed at which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 120,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_print if magic_spiralize else 120",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_layer_0":
- {
- "label": "Initial Layer Speed",
- "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate. Does not affect the build plate adhesion structures themselves, like brim and raft.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 30,
- "value": "speed_print * 30 / 60",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true,
- "children":
- {
- "speed_print_layer_0":
- {
- "label": "Initial Layer Print Speed",
- "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 30,
- "value": "speed_layer_0",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_mesh": true
- },
- "speed_travel_layer_0":
- {
- "label": "Initial Layer Travel Speed",
- "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.",
- "unit": "mm/s",
- "type": "float",
- "enabled": "speed_slowdown_layers > 0",
- "default_value": 60,
- "value": "speed_layer_0 * speed_travel / speed_print",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "skirt_brim_speed":
- {
- "label": "Skirt/Brim Speed",
- "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "value": "speed_layer_0",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "speed_z_hop":
- {
- "label": "Z Hop Speed",
- "description": "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_z",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "speed_slowdown_layers":
- {
- "label": "Number of Slower Layers",
- "description": "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers.",
- "type": "int",
- "default_value": 2,
- "resolve": "round(sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers')))",
- "minimum_value": "0",
- "maximum_value": "999999",
- "maximum_value_warning": "3.2 / resolveOrValue('layer_height')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "speed_equalize_flow_width_factor":
- {
- "label": "Flow Equalization Ratio",
- "description": "Extrusion width based correction factor on the speed. At 0% the movement speed is kept constant at the Print Speed. At 100% the movement speed is adjusted so that the flow (in mm³/s) is kept constant, i.e. lines half the normal Line Width are printed twice as fast and lines twice as wide are printed half as fast. A value larger than 100% can help to compensate for the higher pressure required to extrude wide lines.",
- "type": "float",
- "unit": "%",
- "default_value": 100.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "200.0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_enabled":
- {
- "label": "Enable Acceleration Control",
- "description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('acceleration_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "acceleration_travel_enabled":
- {
- "label": "Enable Travel Acceleration",
- "description": "Use a separate acceleration rate for travel moves. If disabled, travel moves will use the acceleration value of the printed line at their destination.",
- "type": "bool",
- "default_value": true,
- "resolve": "any(extruderValues('acceleration_travel_enabled'))",
- "enabled": "acceleration_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "acceleration_print":
- {
- "label": "Print Acceleration",
- "description": "The acceleration with which printing happens.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_infill":
- {
- "label": "Infill Acceleration",
- "description": "The acceleration with which infill is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall":
- {
- "label": "Wall Acceleration",
- "description": "The acceleration with which the walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_wall_0":
- {
- "label": "Outer Wall Acceleration",
- "description": "The acceleration with which the outermost walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_wall_x":
- {
- "label": "Inner Wall Acceleration",
- "description": "The acceleration with which all inner walls are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_wall",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "acceleration_roofing":
- {
- "label": "Top Surface Skin Acceleration",
- "description": "The acceleration with which top surface skin layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_topbottom",
- "enabled": "resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_topbottom":
- {
- "label": "Top/Bottom Acceleration",
- "description": "The acceleration with which top/bottom layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "acceleration_support":
- {
- "label": "Support Acceleration",
- "description": "The acceleration with which the support structure is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "limit_to_extruder": "support_extruder_nr",
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_infill":
- {
- "label": "Support Infill Acceleration",
- "description": "The acceleration with which the infill of support is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_interface":
- {
- "label": "Support Interface Acceleration",
- "description": "The acceleration with which the roofs and floors of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_support",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "acceleration_support_roof":
- {
- "label": "Support Roof Acceleration",
- "description": "The acceleration with which the roofs of support are printed. Printing them at lower acceleration can improve overhang quality.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_roof_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "acceleration_support_bottom":
- {
- "label": "Support Floor Acceleration",
- "description": "The acceleration with which the floors of support are printed. Printing them at lower acceleration can improve adhesion of support on top of your model.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "extruderValue(support_bottom_extruder_nr, 'acceleration_support_interface')",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "acceleration_enabled and support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "acceleration_prime_tower":
- {
- "label": "Prime Tower Acceleration",
- "description": "The acceleration with which the prime tower is printed.",
- "unit": "mm/s²",
- "type": "float",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "default_value": 3000,
- "value": "acceleration_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_travel":
- {
- "label": "Travel Acceleration",
- "description": "The acceleration with which travel moves are made.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 5000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print if magic_spiralize else 5000",
- "enabled": "resolveOrValue('acceleration_enabled') and resolveOrValue('acceleration_travel_enabled')",
- "settable_per_mesh": false
- },
- "acceleration_layer_0":
- {
- "label": "Initial Layer Acceleration",
- "description": "The acceleration for the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "acceleration_print_layer_0":
- {
- "label": "Initial Layer Print Acceleration",
- "description": "The acceleration during the printing of the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": true
- },
- "acceleration_travel_layer_0":
- {
- "label": "Initial Layer Travel Acceleration",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0 * acceleration_travel / acceleration_print",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and resolveOrValue('acceleration_travel_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "acceleration_skirt_brim":
- {
- "label": "Skirt/Brim Acceleration",
- "description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "acceleration_layer_0",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('acceleration_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))",
- "settable_per_mesh": false,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "jerk_enabled":
- {
- "label": "Enable Jerk Control",
- "description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('jerk_enabled'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "jerk_travel_enabled":
- {
- "label": "Enable Travel Jerk",
- "description": "Use a separate jerk rate for travel moves. If disabled, travel moves will use the jerk value of the printed line at their destination.",
- "type": "bool",
- "default_value": true,
- "resolve": "any(extruderValues('jerk_travel_enabled'))",
- "enabled": "jerk_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "jerk_print":
- {
- "label": "Print Jerk",
- "description": "The maximum instantaneous velocity change of the print head.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_infill":
- {
- "label": "Infill Jerk",
- "description": "The maximum instantaneous velocity change with which infill is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and infill_sparse_density > 0",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall":
- {
- "label": "Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_wall_0":
- {
- "label": "Outer Wall Jerk",
- "description": "The maximum instantaneous velocity change with which the outermost walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_wall_x":
- {
- "label": "Inner Wall Jerk",
- "description": "The maximum instantaneous velocity change with which all inner walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_wall",
- "enabled": "resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "wall_x_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "jerk_roofing":
- {
- "label": "Top Surface Skin Jerk",
- "description": "The maximum instantaneous velocity change with which top surface skin layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_topbottom",
- "enabled": "resolveOrValue('jerk_enabled') and roofing_layer_count > 0 and top_layers > 0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_topbottom":
- {
- "label": "Top/Bottom Jerk",
- "description": "The maximum instantaneous velocity change with which top/bottom layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and resolveOrValue('jerk_enabled')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "jerk_support":
- {
- "label": "Support Jerk",
- "description": "The maximum instantaneous velocity change with which the support structure is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_extruder_nr",
- "children":
- {
- "jerk_support_infill":
- {
- "label": "Support Infill Jerk",
- "description": "The maximum instantaneous velocity change with which the infill of support is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_interface":
- {
- "label": "Support Interface Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs and floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_support",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_interface_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "jerk_support_roof":
- {
- "label": "Support Roof Jerk",
- "description": "The maximum instantaneous velocity change with which the roofs of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_roof_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "jerk_support_bottom":
- {
- "label": "Support Floor Jerk",
- "description": "The maximum instantaneous velocity change with which the floors of support are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and (support_enable or support_meshes_present)",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "jerk_prime_tower":
- {
- "label": "Prime Tower Jerk",
- "description": "The maximum instantaneous velocity change with which the prime tower is printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "default_value": 20,
- "value": "jerk_print",
- "enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false
- }
- }
- },
- "jerk_travel":
- {
- "label": "Travel Jerk",
- "description": "The maximum instantaneous velocity change with which travel moves are made.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 30,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_print if magic_spiralize else 30",
- "enabled": "resolveOrValue('jerk_enabled') and resolveOrValue('jerk_travel_enabled')",
- "settable_per_mesh": false
- },
- "jerk_layer_0":
- {
- "label": "Initial Layer Jerk",
- "description": "The print maximum instantaneous velocity change for the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true,
- "children":
- {
- "jerk_print_layer_0":
- {
- "label": "Initial Layer Print Jerk",
- "description": "The maximum instantaneous velocity change during the printing of the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled')",
- "settable_per_mesh": true
- },
- "jerk_travel_layer_0":
- {
- "label": "Initial Layer Travel Jerk",
- "description": "The acceleration for travel moves in the initial layer.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "jerk_layer_0 * jerk_travel / jerk_print",
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('jerk_enabled') and resolveOrValue('jerk_travel_enabled')",
- "settable_per_extruder": true,
- "settable_per_mesh": false
- }
- }
- },
- "jerk_skirt_brim":
- {
- "label": "Skirt/Brim Jerk",
- "description": "The maximum instantaneous velocity change with which the skirt and brim are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50",
- "value": "jerk_layer_0",
- "enabled": "resolveOrValue('jerk_enabled') and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('draft_shield_enabled') or resolveOrValue('ooze_shield_enabled'))",
- "settable_per_mesh": false,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- }
- }
- },
- "travel":
- {
- "label": "Travel",
- "icon": "PrintTravel",
- "description": "travel",
- "type": "category",
- "children":
- {
- "retraction_enable":
- {
- "label": "Enable Retraction",
- "description": "Retract the filament when the nozzle is moving over a non-printed area.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retract_at_layer_change":
- {
- "label": "Retract at Layer Change",
- "description": "Retract the filament when the nozzle is moving to the next layer.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_amount":
- {
- "label": "Retraction Distance",
- "description": "The length of material retracted during a retraction move.",
- "unit": "mm",
- "type": "float",
- "default_value": 6.5,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_speed":
- {
- "label": "Retraction Speed",
- "description": "The speed at which the filament is retracted and primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "retraction_retract_speed":
- {
- "label": "Retraction Retract Speed",
- "description": "The speed at which the filament is retracted during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_prime_speed":
- {
- "label": "Retraction Prime Speed",
- "description": "The speed at which the filament is primed during a retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 25,
- "minimum_value": "0.0001",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
- "value": "retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "retraction_extra_prime_amount":
- {
- "label": "Retraction Extra Prime Amount",
- "description": "Some material can ooze away during a travel move, which can be compensated for here.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "5.0",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_min_travel":
- {
- "label": "Retraction Minimum Travel",
- "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.5,
- "value": "line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "line_width * 1.5",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_count_max":
- {
- "label": "Maximum Retraction Count",
- "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.",
- "default_value": 90,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "maximum_value": 999999999,
- "type": "int",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_extrusion_window":
- {
- "label": "Minimum Extrusion Distance Window",
- "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.",
- "unit": "mm",
- "type": "float",
- "default_value": 4.5,
- "minimum_value": "0",
- "maximum_value_warning": "retraction_amount * 2",
- "value": "retraction_amount",
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "limit_support_retractions":
- {
- "label": "Limit Support Retractions",
- "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_combing":
- {
- "label": "Combing Mode",
- "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas or to only comb within the infill.",
- "type": "enum",
- "options":
- {
- "off": "Off",
- "all": "All",
- "no_outer_surfaces": "Not on Outer Surface",
- "noskin": "Not in Skin",
- "infill": "Within Infill"
- },
- "default_value": "all",
- "value": "'no_outer_surfaces' if (any(extruderValues('skin_monotonic')) or any(extruderValues('ironing_enabled')) or (any(extruderValues('roofing_monotonic')) and any(extruderValues('roofing_layer_count')))) else 'all'",
- "resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('infill' if 'infill' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else ('no_outer_surfaces' if 'no_outer_surfaces' in extruderValues('retraction_combing') else 'off')))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "retraction_combing_max_distance":
- {
- "label": "Max Comb Distance With No Retract",
- "description": "When greater than zero, combing travel moves that are longer than this distance will use retraction. If set to zero, there is no maximum and combing moves will not use retraction.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_retract_before_outer_wall":
- {
- "label": "Retract Before Outer Wall",
- "description": "Always retract when moving to start an outer wall.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "travel_avoid_other_parts":
- {
- "label": "Avoid Printed Parts When Traveling",
- "description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_supports":
- {
- "label": "Avoid Supports When Traveling",
- "description": "The nozzle avoids already printed supports when traveling. This option is only available when combing is enabled.",
- "type": "bool",
- "default_value": false,
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "travel_avoid_distance":
- {
- "label": "Travel Avoid Distance",
- "description": "The distance between the nozzle and already printed parts when avoiding during travel moves.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.625,
- "value": "machine_nozzle_tip_outer_diameter / 2 * 1.25",
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_tip_outer_diameter * 0.5",
- "maximum_value_warning": "machine_nozzle_tip_outer_diameter * 5",
- "enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "layer_start_x":
- {
- "label": "Layer Start X",
- "description": "The X coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_width / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "layer_start_y":
- {
- "label": "Layer Start Y",
- "description": "The Y coordinate of the position near where to find the part to start printing each layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": true
- },
- "retraction_hop_enabled": {
- "label": "Z Hop When Retracted",
- "description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_only_when_collides": {
- "label": "Z Hop Only Over Printed Parts",
- "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop": {
- "label": "Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_after_extruder_switch": {
- "label": "Z Hop After Extruder Switch",
- "description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
- "type": "bool",
- "default_value": true,
- "enabled": "retraction_hop_enabled and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop_after_extruder_switch_height":
- {
- "label": "Z Hop After Extruder Switch Height",
- "description": "The height difference when performing a Z Hop after extruder switch.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_hop",
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_after_extruder_switch and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cooling":
- {
- "label": "Cooling",
- "icon": "Fan",
- "description": "Cooling",
- "type": "category",
- "children":
- {
- "cool_fan_enabled":
- {
- "label": "Enable Print Cooling",
- "description": "Enables the print cooling fans while printing. The fans improve print quality on layers with short layer times and bridging / overhangs.",
- "type": "bool",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed":
- {
- "label": "Fan Speed",
- "description": "The speed at which the print cooling fans spin.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "value": "100.0 if cool_fan_enabled else 0.0",
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_speed_min":
- {
- "label": "Regular Fan Speed",
- "description": "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "value": "cool_fan_speed",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_max":
- {
- "label": "Maximum Fan Speed",
- "description": "The speed at which the fans spin on the minimum layer time. The fan speed gradually increases between the regular fan speed and maximum fan speed when the threshold is hit.",
- "unit": "%",
- "type": "float",
- "minimum_value": "max(0, cool_fan_speed_min)",
- "maximum_value": "100",
- "default_value": 100,
- "enabled": "cool_fan_enabled",
- "value": "cool_fan_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time_fan_speed_max":
- {
- "label": "Regular/Maximum Fan Speed Threshold",
- "description": "The layer time which sets the threshold between regular fan speed and maximum fan speed. Layers that print slower than this time use regular fan speed. For faster layers the fan speed gradually increases towards the maximum fan speed.",
- "unit": "s",
- "type": "float",
- "default_value": 10,
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_speed_0":
- {
- "label": "Initial Fan Speed",
- "description": "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "enabled": "cool_fan_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_fan_full_at_height":
- {
- "label": "Regular Fan Speed at Height",
- "description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.5,
- "value": "0 if resolveOrValue('adhesion_type') == 'raft' else resolveOrValue('layer_height_0')",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "cool_fan_full_layer":
- {
- "label": "Regular Fan Speed at Layer",
- "description": "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "1",
- "maximum_value_warning": "10 / resolveOrValue('layer_height')",
- "value": "max(1, int(math.floor((cool_fan_full_at_height - resolveOrValue('layer_height_0')) / resolveOrValue('layer_height')) + 2))",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "cool_min_layer_time":
- {
- "label": "Minimum Layer Time",
- "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.",
- "unit": "s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "maximum_value_warning": "600",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_min_speed":
- {
- "label": "Minimum Speed",
- "description": "The minimum print speed, despite slowing down due to the minimum layer time. When the printer would slow down too much, the pressure in the nozzle would be too low and result in bad print quality.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cool_lift_head":
- {
- "label": "Lift Head",
- "description": "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support":
- {
- "label": "Support",
- "type": "category",
- "icon": "Support",
- "description": "Support",
- "children":
- {
- "support_enable":
- {
- "label": "Generate Support",
- "description": "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_extruder_nr":
- {
- "label": "Support Extruder",
- "description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "int(defaultExtruderPosition())",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children":
- {
- "support_infill_extruder_nr":
- {
- "label": "Support Infill Extruder",
- "description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_extruder_nr_layer_0":
- {
- "label": "First Layer Support Extruder",
- "description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_interface_extruder_nr":
- {
- "label": "Support Interface Extruder",
- "description": "The extruder train to use for printing the roofs and floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "resolve": "max(extruderValues('support_interface_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children":
- {
- "support_roof_extruder_nr":
- {
- "label": "Support Roof Extruder",
- "description": "The extruder train to use for printing the roofs of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "resolve": "max(extruderValues('support_roof_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_bottom_extruder_nr":
- {
- "label": "Support Floor Extruder",
- "description": "The extruder train to use for printing the floors of the support. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
- "resolve": "max(extruderValues('support_bottom_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- }
- }
- },
- "support_structure":
- {
- "label": "Support Structure",
- "description": "Chooses between the techniques available to generate support. \"Normal\" support creates a support structure directly below the overhanging parts and drops those areas straight down. \"Tree\" support creates branches towards the overhanging areas that support the model on the tips of those branches, and allows the branches to crawl around the model to support it from the build plate as much as possible.",
- "type": "enum",
- "options":
- {
- "normal": "Normal",
- "tree": "Tree"
- },
- "enabled": "support_enable",
- "default_value": "normal",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_tree_angle":
- {
- "label": "Tree Support Branch Angle",
- "description": "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "60",
- "default_value": 40,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_distance":
- {
- "label": "Tree Support Branch Distance",
- "description": "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "default_value": 1,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": true
- },
- "support_tree_branch_diameter":
- {
- "label": "Tree Support Branch Diameter",
- "description": "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width * 2",
- "default_value": 2,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_max_diameter":
- {
- "label": "Tree Support Trunk Diameter",
- "description": "The diameter of the widest branches of tree support. A thicker trunk is more sturdy; a thinner trunk takes up less space on the build plate.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "support_tree_branch_diameter",
- "minimum_value_warning": "support_line_width * 5",
- "default_value": 15,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_branch_diameter_angle":
- {
- "label": "Tree Support Branch Diameter Angle",
- "description": "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "89.9999",
- "maximum_value_warning": "15",
- "default_value": 5,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_tree_collision_resolution":
- {
- "label": "Tree Support Collision Resolution",
- "description": "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "support_line_width / 4",
- "maximum_value_warning": "support_line_width * 2",
- "default_value": 0.4,
- "value": "support_line_width / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure=='tree' and support_tree_branch_diameter_angle > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_type":
- {
- "label": "Support Placement",
- "description": "Adjusts the placement of the support structures. The placement can be set to touching build plate or everywhere. When set to everywhere the support structures will also be printed on the model.",
- "type": "enum",
- "options":
- {
- "buildplate": "Touching Buildplate",
- "everywhere": "Everywhere"
- },
- "default_value": "everywhere",
- "resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else 'buildplate'",
- "enabled": "support_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "support_angle":
- {
- "label": "Support Overhang Angle",
- "description": "The minimum angle of overhangs for which support is added. At a value of 0° all overhangs are supported, 90° will not provide any support.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "90",
- "maximum_value_warning": "80",
- "default_value": 50,
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "enabled": "support_enable",
- "settable_per_mesh": true
- },
- "support_pattern":
- {
- "label": "Support Pattern",
- "description": "The pattern of the support structures of the print. The different options available result in sturdy or easy to remove support.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag",
- "cross": "Cross",
- "gyroid": "Gyroid"
- },
- "default_value": "zigzag",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_wall_count":
- {
- "label": "Support Wall Line Count",
- "description": "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used.",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "1 if support_pattern == 'concentric' else 0",
- "maximum_value_warning": "0 if (support_skip_some_zags and support_pattern == 'zigzag') else 3",
- "maximum_value": "999999",
- "type": "int",
- "value": "1 if support_enable and support_structure == 'tree' else (1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0)",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "zig_zaggify_support":
- {
- "label": "Connect Support Lines",
- "description": "Connect the ends of the support lines together. Enabling this setting can make your support more sturdy and reduce underextrusion, but it will cost more material.",
- "type": "bool",
- "default_value": false,
- "value": "support_pattern == 'cross' or support_pattern == 'gyroid'",
- "enabled": "(support_enable or support_meshes_present) and (support_pattern == 'lines' or support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid')",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_connect_zigzags":
- {
- "label": "Connect Support ZigZags",
- "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.",
- "type": "bool",
- "default_value": true,
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_infill_rate":
- {
- "label": "Support Density",
- "description": "Adjusts the density of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 15,
- "value": "15 if support_enable and support_structure == 'normal' else 0 if support_enable and support_structure == 'tree' else 15",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_line_distance":
- {
- "label": "Support Line Distance",
- "description": "Distance between the printed support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_meshes_present",
- "value": "0 if support_infill_rate == 0 else (support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_initial_layer_line_distance":
- {
- "label": "Initial Layer Support Line Distance",
- "description": "Distance between the printed initial layer support structure lines. This setting is calculated by the support density.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_line_width",
- "default_value": 2.66,
- "enabled": "support_enable or support_meshes_present",
- "value": "support_line_distance",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_infill_angles":
- {
- "label": "Support Infill Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees.",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "(support_enable or support_meshes_present) and support_pattern != 'concentric' and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_brim_enable":
- {
- "label": "Enable Support Brim",
- "description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.",
- "type": "bool",
- "default_value": false,
- "value": "support_structure == 'tree'",
- "enabled": "support_enable or support_meshes_present",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_brim_width":
- {
- "label": "Support Brim Width",
- "description": "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material.",
- "type": "float",
- "unit": "mm",
- "default_value": 8.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "50.0",
- "maximum_value": "0.5 * min(machine_width, machine_depth)",
- "enabled": "(support_enable or support_meshes_present) and support_brim_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr",
- "children":
- {
- "support_brim_line_count":
- {
- "label": "Support Brim Line Count",
- "description": "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material.",
- "type": "int",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50 / skirt_brim_line_width",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
- "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
- "enabled": "(support_enable or support_meshes_present) and support_brim_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr"
- }
- }
- },
- "support_z_distance":
- {
- "label": "Support Z Distance",
- "description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true,
- "children":
- {
- "support_top_distance":
- {
- "label": "Support Top Distance",
- "description": "Distance from the top of the support to the print.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "type": "float",
- "enabled": "support_enable or support_meshes_present",
- "value": "extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance') + (layer_height if support_structure == 'tree' else 0)",
- "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_bottom_distance":
- {
- "label": "Support Bottom Distance",
- "description": "Distance from the print to the bottom of the support.",
- "unit": "mm",
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size",
- "default_value": 0.1,
- "value": "extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0",
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and resolveOrValue('support_type') == 'everywhere'",
- "settable_per_mesh": true
- }
- }
- },
- "support_xy_distance":
- {
- "label": "Support X/Y Distance",
- "description": "Distance of the support structure from the print in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "1.5 * machine_nozzle_tip_outer_diameter",
- "default_value": 0.7,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_xy_overrides_z":
- {
- "label": "Support Distance Priority",
- "description": "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs.",
- "type": "enum",
- "options":
- {
- "xy_overrides_z": "X/Y overrides Z",
- "z_overrides_xy": "Z overrides X/Y"
- },
- "default_value": "z_overrides_xy",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_xy_distance_overhang":
- {
- "label": "Minimum Support X/Y Distance",
- "description": "Distance of the support structure from the overhang in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "support_xy_distance - support_line_width * 2",
- "maximum_value_warning": "support_xy_distance",
- "default_value": 0.2,
- "value": "machine_nozzle_size / 2",
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_xy_overrides_z == 'z_overrides_xy'",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_height":
- {
- "label": "Support Stair Step Height",
- "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures. Set to zero to turn off the stair-like behaviour.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_width":
- {
- "label": "Support Stair Step Maximum Width",
- "description": "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.",
- "unit": "mm",
- "type": "float",
- "default_value": 5.0,
- "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_stair_step_min_slope":
- {
- "label": "Support Stair Step Minimum Slope Angle",
- "description": "The minimum slope of the area for stair-stepping to take effect. Low values should make support easier to remove on shallower slopes, but really low values may result in some very counter-intuitive results on other parts of the model.",
- "unit": "°",
- "type": "float",
- "default_value": 10.0,
- "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr",
- "minimum_value": "0.01",
- "maximum_value": "89.99",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_join_distance":
- {
- "label": "Support Join Distance",
- "description": "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "0",
- "maximum_value_warning": "10",
- "enabled": "(support_enable and support_structure == 'normal') or support_meshes_present",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_offset":
- {
- "label": "Support Horizontal Expansion",
- "description": "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value_warning": "-1 * machine_nozzle_size",
- "maximum_value_warning": "10 * machine_nozzle_size",
- "enabled": "(support_enable and support_structure == 'normal') or support_meshes_present",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_infill_sparse_thickness":
- {
- "label": "Support Infill Layer Thickness",
- "description": "The thickness per layer of support infill material. This value should always be a multiple of the layer height and is otherwise rounded.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "resolveOrValue('layer_height')",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "maximum_value": "resolveOrValue('layer_height') * 8",
- "value": "resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "gradual_support_infill_steps":
- {
- "label": "Gradual Support Infill Steps",
- "description": "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density.",
- "default_value": 0,
- "type": "int",
- "minimum_value": "0",
- "maximum_value_warning": "1 if (support_pattern == 'cross' or support_pattern == 'lines' or support_pattern == 'concentric') else 5",
- "maximum_value": "999999 if support_line_distance == 0 else (20 - math.log(support_line_distance) / math.log(2))",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "gradual_support_infill_step_height":
- {
- "label": "Gradual Support Infill Step Height",
- "description": "The height of support infill of a given density before switching to half the density.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0.0001",
- "minimum_value_warning": "3 * resolveOrValue('layer_height')",
- "enabled": "(support_enable or support_meshes_present) and support_infill_rate > 0 and gradual_support_infill_steps > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "minimum_support_area":
- {
- "label": "Minimum Support Area",
- "description": "Minimum area size for support polygons. Polygons which have an area smaller than this value will not be generated.",
- "unit": "mm²",
- "type": "float",
- "default_value": 0.0,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "(support_enable or support_meshes_present) and support_structure == 'normal'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_interface_enable":
- {
- "label": "Enable Support Interface",
- "description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_enable":
- {
- "label": "Enable Support Roof",
- "description": "Generate a dense slab of material between the top of support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- },
- "support_bottom_enable":
- {
- "label": "Enable Support Floor",
- "description": "Generate a dense slab of material between the bottom of the support and the model. This will create a skin between the model and support.",
- "type": "bool",
- "default_value": false,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_enable')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_height":
- {
- "label": "Support Interface Thickness",
- "description": "The thickness of the interface of the support where it touches with the model on the bottom or the top.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + layer_height",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true,
- "children":
- {
- "support_roof_height":
- {
- "label": "Support Roof Thickness",
- "description": "The thickness of the support roofs. This controls the amount of dense layers at the top of the support on which the model rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value": "0",
- "minimum_value_warning": "support_top_distance + layer_height",
- "maximum_value_warning": "10",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "support_bottom_height":
- {
- "label": "Support Floor Thickness",
- "description": "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_height')",
- "minimum_value": "0",
- "minimum_value_warning": "min(support_bottom_distance + layer_height, support_bottom_stair_step_height)",
- "maximum_value_warning": "10",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_skip_height": {
- "label": "Support Interface Resolution",
- "description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "support_interface_height",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "support_interface_density":
- {
- "label": "Support Interface Density",
- "description": "Adjusts the density of the roofs and floors of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_density":
- {
- "label": "Support Roof Density",
- "description": "The density of the roofs of the support structure. A higher value results in better overhangs, but the supports are harder to remove.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_line_distance":
- {
- "label": "Support Roof Line Distance",
- "description": "Distance between the printed support roof lines. This setting is calculated by the Support Roof Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_roof_line_width - 0.0001",
- "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_bottom_density":
- {
- "label": "Support Floor Density",
- "description": "The density of the floors of the support structure. A higher value results in better adhesion of the support on top of the model.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value": "100",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_density')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_bottom_line_distance":
- {
- "label": "Support Floor Line Distance",
- "description": "Distance between the printed support floor lines. This setting is calculated by the Support Floor Density, but can be adjusted separately.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "support_bottom_line_width - 0.0001",
- "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- }
- }
- },
- "support_interface_pattern":
- {
- "label": "Support Interface Pattern",
- "description": "The pattern with which the interface of the support with the model is printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_pattern":
- {
- "label": "Support Roof Pattern",
- "description": "The pattern with which the roofs of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_pattern":
- {
- "label": "Support Floor Pattern",
- "description": "The pattern with which the floors of the support are printed.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "grid": "Grid",
- "triangles": "Triangles",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "concentric",
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_pattern')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "minimum_interface_area":
- {
- "label": "Minimum Support Interface Area",
- "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "minimum_value": "0",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true,
- "children":
- {
- "minimum_roof_area":
- {
- "label": "Minimum Support Roof Area",
- "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "value": "extruderValue(support_roof_extruder_nr, 'minimum_interface_area')",
- "minimum_value": "0",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- },
- "minimum_bottom_area":
- {
- "label": "Minimum Support Floor Area",
- "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support.",
- "unit": "mm²",
- "type": "float",
- "default_value": 1.0,
- "value": "extruderValue(support_bottom_extruder_nr, 'minimum_interface_area')",
- "minimum_value": "0",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": true
- }
- }
- },
- "support_interface_offset":
- {
- "label": "Support Interface Horizontal Expansion",
- "description": "Amount of offset applied to the support interface polygons.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "support_interface_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_offset":
- {
- "label": "Support Roof Horizontal Expansion",
- "description": "Amount of offset applied to the roofs of the support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')",
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "support_roof_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_offset":
- {
- "label": "Support Floor Horizontal Expansion",
- "description": "Amount of offset applied to the floors of the support.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.0,
- "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')",
- "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "support_bottom_enable and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_interface_angles":
- {
- "label": "Support Interface Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "limit_to_extruder": "support_interface_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_interface_enable and support_interface_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_roof_angles":
- {
- "label": "Support Roof Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "support_interface_angles",
- "limit_to_extruder": "support_roof_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_roof_enable and support_roof_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_bottom_angles":
- {
- "label": "Support Floor Line Directions",
- "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "value": "support_interface_angles",
- "limit_to_extruder": "support_bottom_extruder_nr",
- "enabled": "(support_enable or support_meshes_present) and support_bottom_enable and support_bottom_pattern != 'concentric'",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "support_fan_enable":
- {
- "label": "Fan Speed Override",
- "description": "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable or support_meshes_present",
- "settable_per_mesh": false
- },
- "support_supported_skin_fan_speed":
- {
- "label": "Supported Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "(support_enable or support_meshes_present) and support_fan_enable",
- "settable_per_mesh": false
- },
- "support_use_towers":
- {
- "label": "Use Towers",
- "description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.",
- "type": "bool",
- "default_value": true,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure == 'normal'",
- "settable_per_mesh": true
- },
- "support_tower_diameter":
- {
- "label": "Tower Diameter",
- "description": "The diameter of a special tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_tower_maximum_supported_diameter":
- {
- "label": "Maximum Tower-Supported Diameter",
- "description": "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.",
- "unit": "mm",
- "type": "float",
- "default_value": 3.0,
- "limit_to_extruder": "support_infill_extruder_nr",
- "minimum_value": "0",
- "minimum_value_warning": "2 * machine_nozzle_size",
- "maximum_value_warning": "20",
- "maximum_value": "support_tower_diameter",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_tower_roof_angle":
- {
- "label": "Tower Roof Angle",
- "description": "The angle of a rooftop of a tower. A higher value results in pointed tower roofs, a lower value results in flattened tower roofs.",
- "unit": "°",
- "type": "int",
- "minimum_value": "0",
- "maximum_value": "90",
- "default_value": 65,
- "limit_to_extruder": "support_infill_extruder_nr",
- "enabled": "support_enable and support_structure == 'normal' and support_use_towers",
- "settable_per_mesh": true
- },
- "support_mesh_drop_down":
- {
- "label": "Drop Down Support Mesh",
- "description": "Make support everywhere below the support mesh, so that there's no overhang in the support mesh.",
- "type": "bool",
- "default_value": true,
- "enabled": "support_mesh",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "support_meshes_present":
- {
- "label": "Scene Has Support Meshes",
- "description": "There are support meshes present in the scene. This setting is controlled by Cura.",
- "type": "bool",
- "default_value": false,
- "enabled": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "platform_adhesion":
- {
- "label": "Build Plate Adhesion",
- "type": "category",
- "icon": "Adhesion",
- "description": "Adhesion",
- "children":
- {
- "prime_blob_enable":
- {
- "label": "Enable Prime Blob",
- "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false,
- "warning_value": "True if resolveOrValue('print_sequence') == 'one_at_a_time' else None"
- },
- "extruder_prime_pos_x":
- {
- "label": "Extruder Prime X Position",
- "description": "The X coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_width / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_width / 2 if machine_center_is_zero else machine_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "extruder_prime_pos_y":
- {
- "label": "Extruder Prime Y Position",
- "description": "The Y coordinate of the position where the nozzle primes at the start of printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0,
- "minimum_value_warning": "machine_depth / -2 if machine_center_is_zero else 0",
- "maximum_value_warning": "machine_depth / 2 if machine_center_is_zero else machine_depth",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": false
- },
- "adhesion_type":
- {
- "label": "Build Plate Adhesion Type",
- "description": "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model.",
- "type": "enum",
- "options":
- {
- "skirt": "Skirt",
- "brim": "Brim",
- "raft": "Raft",
- "none": "None"
- },
- "default_value": "brim",
- "resolve": "extruderValue(adhesion_extruder_nr, 'adhesion_type')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "adhesion_extruder_nr":
- {
- "label": "Build Plate Adhesion Extruder",
- "description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "int(defaultExtruderPosition())",
- "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
- "resolve": "max(extruderValues('adhesion_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "children":
- {
- "skirt_brim_extruder_nr":
- {
- "label": "Skirt/Brim Extruder",
- "description": "The extruder train to use for printing the skirt or brim. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "adhesion_extruder_nr",
- "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "raft_base_extruder_nr":
- {
- "label": "Raft Base Extruder",
- "description": "The extruder train to use for printing the first layer of the raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "adhesion_extruder_nr",
- "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
- "resolve": "max(extruderValues('raft_base_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "raft_interface_extruder_nr":
- {
- "label": "Raft Middle Extruder",
- "description": "The extruder train to use for printing the middle layer of the raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "adhesion_extruder_nr",
- "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
- "resolve": "max(extruderValues('raft_interface_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "raft_surface_extruder_nr":
- {
- "label": "Raft Top Extruder",
- "description": "The extruder train to use for printing the top layer(s) of the raft. This is used in multi-extrusion.",
- "type": "extruder",
- "default_value": "0",
- "value": "adhesion_extruder_nr",
- "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
- "resolve": "max(extruderValues('raft_surface_extruder_nr'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "skirt_line_count":
- {
- "label": "Skirt Line Count",
- "description": "Multiple skirt lines help to prime your extrusion better for small models. Setting this to 0 will disable the skirt.",
- "type": "int",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "skirt_gap":
- {
- "label": "Skirt Distance",
- "description": "The horizontal distance between the skirt and the first layer of the print.\nThis is the minimum distance. Multiple skirt lines will extend outwards from this distance.",
- "unit": "mm",
- "type": "float",
- "default_value": 3,
- "minimum_value_warning": "max(extruderValues('machine_nozzle_size'))",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "skirt_brim_minimal_length":
- {
- "label": "Skirt/Brim Minimum Length",
- "description": "The minimum length of the skirt or brim. If this length is not reached by all skirt or brim lines together, more skirt or brim lines will be added until the minimum length is reached. Note: If the line count is set to 0 this is ignored.",
- "unit": "mm",
- "type": "float",
- "default_value": 250,
- "minimum_value": "0",
- "minimum_value_warning": "25",
- "maximum_value_warning": "2500",
- "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "brim_width":
- {
- "label": "Brim Width",
- "description": "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area.",
- "type": "float",
- "unit": "mm",
- "default_value": 8.0,
- "minimum_value": "0.0",
- "maximum_value_warning": "50.0",
- "maximum_value": "0.5 * min(machine_width, machine_depth)",
- "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr",
- "children":
- {
- "brim_line_count":
- {
- "label": "Brim Line Count",
- "description": "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area.",
- "type": "int",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value_warning": "50 / skirt_brim_line_width",
- "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width",
- "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
- "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- }
- }
- },
- "brim_gap":
- {
- "label": "Brim Distance",
- "description": "The horizontal distance between the first brim line and the outline of the first layer of the print. A small gap can make the brim easier to remove while still providing the thermal benefits.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "skirt_brim_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": true,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "brim_replaces_support":
- {
- "label": "Brim Replaces Support",
- "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "support_infill_extruder_nr"
- },
- "brim_outside_only":
- {
- "label": "Brim Only on Outside",
- "description": "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much.",
- "type": "bool",
- "default_value": true,
- "enabled": "resolveOrValue('adhesion_type') == 'brim'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "skirt_brim_extruder_nr"
- },
- "raft_margin":
- {
- "label": "Raft Extra Margin",
- "description": "If the raft is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.",
- "unit": "mm",
- "type": "float",
- "default_value": 15,
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_smoothing":
- {
- "label": "Raft Smoothing",
- "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.",
- "unit": "mm",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and not raft_remove_inside_corners",
- "limit_to_extruder": "adhesion_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "raft_airgap":
- {
- "label": "Raft Air Gap",
- "description": "The gap between the final raft layer and the first layer of the model. Only the first layer is raised by this amount to lower the bonding between the raft layer and the model. Makes it easier to peel off the raft.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "min(extruderValues('machine_nozzle_size'))",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "layer_0_z_overlap":
- {
- "label": "Initial Layer Z Overlap",
- "description": "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.22,
- "value": "raft_airgap / 2",
- "minimum_value": "0",
- "maximum_value_warning": "raft_airgap",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_surface_layers":
- {
- "label": "Raft Top Layers",
- "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.",
- "type": "int",
- "default_value": 2,
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_surface_thickness":
- {
- "label": "Raft Top Layer Thickness",
- "description": "Layer thickness of the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.1,
- "value": "resolveOrValue('layer_height')",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_surface_line_width":
- {
- "label": "Raft Top Line Width",
- "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "value": "line_width",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.1",
- "maximum_value_warning": "machine_nozzle_size * 2",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_surface_line_spacing":
- {
- "label": "Raft Top Spacing",
- "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.4,
- "minimum_value": "0",
- "minimum_value_warning": "raft_surface_line_width",
- "maximum_value_warning": "raft_surface_line_width * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0",
- "value": "raft_surface_line_width",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_interface_layers":
- {
- "label": "Raft Middle Layers",
- "description": "The number of layers between the base and the surface of the raft. These comprise the main thickness of the raft. Increasing this creates a thicker, sturdier raft.",
- "type": "int",
- "default_value": 1,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_interface_thickness":
- {
- "label": "Raft Middle Thickness",
- "description": "Layer thickness of the middle raft layer.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.15,
- "value": "resolveOrValue('layer_height') * 1.5",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * machine_nozzle_size",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_interface_line_width":
- {
- "label": "Raft Middle Line Width",
- "description": "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.7,
- "value": "line_width * 2",
- "minimum_value": "0.001",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_interface_line_spacing":
- {
- "label": "Raft Middle Spacing",
- "description": "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.9,
- "value": "raft_interface_line_width + 0.2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_interface_line_width",
- "maximum_value_warning": "15.0",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_base_thickness":
- {
- "label": "Raft Base Thickness",
- "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.3,
- "value": "resolveOrValue('layer_height_0') * 1.2",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.04",
- "maximum_value_warning": "0.75 * raft_base_line_width",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_base_extruder_nr"
- },
- "raft_base_line_width":
- {
- "label": "Raft Base Line Width",
- "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.",
- "unit": "mm",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0.001",
- "value": "machine_nozzle_size * 2",
- "minimum_value_warning": "machine_nozzle_size * 0.5",
- "maximum_value_warning": "machine_nozzle_size * 3",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_base_extruder_nr"
- },
- "raft_base_line_spacing":
- {
- "label": "Raft Base Line Spacing",
- "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.6,
- "value": "raft_base_line_width * 2",
- "minimum_value": "0",
- "minimum_value_warning": "raft_base_line_width",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_base_extruder_nr"
- },
- "raft_speed":
- {
- "label": "Raft Print Speed",
- "description": "The speed at which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "speed_print / 60 * 30",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_speed":
- {
- "label": "Raft Top Print Speed",
- "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0",
- "value": "raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_interface_speed":
- {
- "label": "Raft Middle Print Speed",
- "description": "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "value": "raft_speed * 0.75",
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "150",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_base_speed":
- {
- "label": "Raft Base Print Speed",
- "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 15,
- "minimum_value": "0.1",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "200",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "value": "0.75 * raft_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_base_extruder_nr"
- }
- }
- },
- "raft_acceleration":
- {
- "label": "Raft Print Acceleration",
- "description": "The acceleration with which the raft is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "value": "acceleration_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_acceleration":
- {
- "label": "Raft Top Print Acceleration",
- "description": "The acceleration with which the top raft layers are printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled') and raft_surface_layers > 0",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_interface_acceleration":
- {
- "label": "Raft Middle Print Acceleration",
- "description": "The acceleration with which the middle raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled') and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_base_acceleration":
- {
- "label": "Raft Base Print Acceleration",
- "description": "The acceleration with which the base raft layer is printed.",
- "unit": "mm/s²",
- "type": "float",
- "default_value": 3000,
- "value": "raft_acceleration",
- "minimum_value": "0.1",
- "minimum_value_warning": "100",
- "maximum_value_warning": "10000",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_base_extruder_nr"
- }
- }
- },
- "raft_jerk":
- {
- "label": "Raft Print Jerk",
- "description": "The jerk with which the raft is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "value": "jerk_print",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_jerk":
- {
- "label": "Raft Top Print Jerk",
- "description": "The jerk with which the top raft layers are printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "100",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled') and raft_surface_layers > 0",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_interface_jerk":
- {
- "label": "Raft Middle Print Jerk",
- "description": "The jerk with which the middle raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled') and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_base_jerk":
- {
- "label": "Raft Base Print Jerk",
- "description": "The jerk with which the base raft layer is printed.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 20,
- "value": "raft_jerk",
- "minimum_value": "0",
- "minimum_value_warning": "5",
- "maximum_value_warning": "50",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
- "settable_per_mesh": false,
- "limit_to_extruder": "raft_base_extruder_nr"
- }
- }
- },
- "raft_fan_speed":
- {
- "label": "Raft Fan Speed",
- "description": "The fan speed for the raft.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "limit_to_extruder": "adhesion_extruder_nr",
- "children":
- {
- "raft_surface_fan_speed":
- {
- "label": "Raft Top Fan Speed",
- "description": "The fan speed for the top raft layers.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_surface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_surface_extruder_nr"
- },
- "raft_interface_fan_speed":
- {
- "label": "Raft Middle Fan Speed",
- "description": "The fan speed for the middle raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft' and raft_interface_layers > 0",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_interface_extruder_nr"
- },
- "raft_base_fan_speed":
- {
- "label": "Raft Base Fan Speed",
- "description": "The fan speed for the base raft layer.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "value": "raft_fan_speed",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "limit_to_extruder": "raft_base_extruder_nr"
- }
- }
- }
- }
- },
- "dual":
- {
- "label": "Dual Extrusion",
- "type": "category",
- "icon": "DualExtrusion",
- "description": "Settings used for printing with multiple extruders.",
- "children":
- {
- "prime_tower_enable":
- {
- "label": "Enable Prime Tower",
- "description": "Print a tower next to the print which serves to prime the material after each nozzle switch.",
- "type": "bool",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "resolve": "(extruders_enabled_count > 1) and any(extruderValues('prime_tower_enable'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_size":
- {
- "label": "Prime Tower Size",
- "description": "The width of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 20,
- "resolve": "max(extruderValues('prime_tower_size'))",
- "minimum_value": "0",
- "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
- "minimum_value_warning": "max(extruderValues('prime_tower_line_width')) * 2",
- "maximum_value_warning": "42",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_min_volume":
- {
- "label": "Prime Tower Minimum Volume",
- "description": "The minimum volume for each layer of the prime tower in order to purge enough material.",
- "unit": "mm³",
- "type": "float",
- "default_value": 6,
- "minimum_value": "0",
- "maximum_value_warning": "(resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_position_x":
- {
- "label": "Prime Tower X Position",
- "description": "The x coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_width - max(extruderValue(skirt_brim_extruder_nr, 'brim_width') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_x'))) - 1",
- "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width",
- "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_position_y":
- {
- "label": "Prime Tower Y Position",
- "description": "The y coordinate of the position of the prime tower.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": 200,
- "value": "machine_depth - prime_tower_size - max(extruderValue(skirt_brim_extruder_nr, 'brim_width') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - max(map(abs, extruderValues('machine_nozzle_offset_y'))) - 3",
- "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')",
- "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "prime_tower_wipe_enabled":
- {
- "label": "Wipe Inactive Nozzle on Prime Tower",
- "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable')",
- "default_value": true,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "prime_tower_brim_enable":
- {
- "label": "Prime Tower Brim",
- "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type.",
- "type": "bool",
- "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') != 'raft')",
- "resolve": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') in ('none', 'skirt'))",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_enabled":
- {
- "label": "Enable Ooze Shield",
- "description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.",
- "type": "bool",
- "resolve": "any(extruderValues('ooze_shield_enabled'))",
- "enabled": "extruders_enabled_count > 1",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_angle":
- {
- "label": "Ooze Shield Angle",
- "description": "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material.",
- "type": "float",
- "unit": "°",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 60,
- "resolve": "min(extruderValues('ooze_shield_angle'))",
- "minimum_value": "0",
- "maximum_value": "90",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "ooze_shield_dist":
- {
- "label": "Ooze Shield Distance",
- "description": "Distance of the ooze shield from the print, in the X/Y directions.",
- "type": "float",
- "unit": "mm",
- "enabled": "resolveOrValue('ooze_shield_enabled')",
- "default_value": 2,
- "resolve": "max(extruderValues('ooze_shield_dist'))",
- "minimum_value": "0",
- "maximum_value_warning": "20",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "switch_extruder_retraction_amount":
- {
- "label": "Nozzle Switch Retraction Distance",
- "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.",
- "type": "float",
- "unit": "mm",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "machine_heat_zone_length",
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_retraction_speeds":
- {
- "label": "Nozzle Switch Retraction Speed",
- "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "switch_extruder_retraction_speed":
- {
- "label": "Nozzle Switch Retract Speed",
- "description": "The speed at which the filament is retracted during a nozzle switch retract.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "switch_extruder_prime_speed":
- {
- "label": "Nozzle Switch Prime Speed",
- "description": "The speed at which the filament is pushed back after a nozzle switch retraction.",
- "type": "float",
- "unit": "mm/s",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "default_value": 20,
- "value": "switch_extruder_retraction_speeds",
- "minimum_value": "0.1",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')",
- "maximum_value_warning": "70",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "switch_extruder_extra_prime_amount":
- {
- "label": "Nozzle Switch Extra Prime Amount",
- "description": "Extra material to prime after nozzle switching.",
- "type": "float",
- "unit": "mm³",
- "default_value": 0,
- "minimum_value_warning": "0",
- "maximum_value_warning": "100",
- "enabled": "retraction_enable and extruders_enabled_count > 1",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "meshfix":
- {
- "label": "Mesh Fixes",
- "type": "category",
- "icon": "Bandage",
- "description": "Make the meshes more suited for 3D printing.",
- "children":
- {
- "meshfix_union_all":
- {
- "label": "Union Overlapping Volumes",
- "description": "Ignore the internal geometry arising from overlapping volumes within a mesh and print the volumes as one. This may cause unintended internal cavities to disappear.",
- "type": "bool",
- "default_value": true,
- "value": "magic_mesh_surface_mode != 'surface'",
- "settable_per_mesh": true
- },
- "meshfix_union_all_remove_holes":
- {
- "label": "Remove All Holes",
- "description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
- "type": "bool",
- "default_value": false,
- "value": "magic_spiralize",
- "settable_per_mesh": true
- },
- "meshfix_extensive_stitching":
- {
- "label": "Extensive Stitching",
- "description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "meshfix_keep_open_polygons":
- {
- "label": "Keep Disconnected Faces",
- "description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper g-code.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "multiple_mesh_overlap":
- {
- "label": "Merged Meshes Overlap",
- "description": "Make meshes which are touching each other overlap a bit. This makes them bond together better.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.15,
- "minimum_value": "0",
- "maximum_value_warning": "1.0",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "carve_multiple_volumes":
- {
- "label": "Remove Mesh Intersection",
- "description": "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other.",
- "type": "bool",
- "default_value": true,
- "value": "extruders_enabled_count > 1",
- "enabled": "all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "alternate_carve_order":
- {
- "label": "Alternate Mesh Removal",
- "description": "Switch to which mesh intersecting volumes will belong with every layer, so that the overlapping meshes become interwoven. Turning this setting off will cause one of the meshes to obtain all of the volume in the overlap, while it is removed from the other meshes.",
- "type": "bool",
- "default_value": true,
- "enabled": "carve_multiple_volumes and all(p != 'surface' for p in extruderValues('magic_mesh_surface_mode'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true
- },
- "remove_empty_first_layers":
- {
- "label": "Remove Empty First Layers",
- "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.",
- "type": "bool",
- "default_value": true,
- "enabled": "not (support_enable or support_meshes_present)",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "meshfix_maximum_resolution":
- {
- "label": "Maximum Resolution",
- "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.01",
- "maximum_value_warning": "3",
- "settable_per_mesh": true
- },
- "meshfix_maximum_travel_resolution":
- {
- "label": "Maximum Travel Resolution",
- "description": "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate.",
- "type": "float",
- "unit": "mm",
- "default_value": 1.0,
- "value": "min(meshfix_maximum_resolution * speed_travel / speed_print, 2 * line_width)",
- "minimum_value": "0.001",
- "minimum_value_warning": "0.05",
- "maximum_value_warning": "10",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "meshfix_maximum_deviation":
- {
- "label": "Maximum Deviation",
- "description": "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.025,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.01",
- "maximum_value_warning": "0.3",
- "settable_per_mesh": true
- },
- "meshfix_maximum_extrusion_area_deviation":
- {
- "label": "Maximum Extrusion Area Deviation",
- "description": "The maximum extrusion area deviation allowed when removing intermediate points from a straight line. An intermediate point may serve as width-changing point in a long straight line. Therefore, if it is removed, it will cause the line to have a uniform width and, as a result, lose (or gain) a bit of extrusion area. If you increase this you may notice slight under- (or over-) extrusion in between straight parallel walls, as more intermediate width-changing points will be allowed to be removed. Your print will be less accurate, but the g-code will be smaller.",
- "type": "float",
- "unit": "μm²",
- "default_value": 50000,
- "minimum_value": "0",
- "minimum_value_warning": "500",
- "maximum_value_warning": "100000",
- "settable_per_mesh": true
- }
- }
- },
- "blackmagic":
- {
- "label": "Special Modes",
- "type": "category",
- "icon": "BlackMagic",
- "description": "Non-traditional ways to print your models.",
- "children":
- {
- "print_sequence":
- {
- "label": "Print Sequence",
- "description": "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is possible if a) only one extruder is enabled and b) all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
- "type": "enum",
- "options":
- {
- "all_at_once": "All at Once",
- "one_at_a_time": "One at a Time"
- },
- "default_value": "all_at_once",
- "enabled": "extruders_enabled_count == 1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "infill_mesh":
- {
- "label": "Infill Mesh",
- "description": "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "infill_mesh_order":
- {
- "label": "Mesh Processing Rank",
- "description": "Determines the priority of this mesh when considering multiple overlapping infill meshes. Areas where multiple infill meshes overlap will take on the settings of the mesh with the highest rank. An infill mesh with a higher rank will modify the infill of infill meshes with lower rank and normal meshes.",
- "default_value": 0,
- "value": "1 if infill_mesh else 0",
- "minimum_value_warning": "1",
- "maximum_value_warning": "50",
- "type": "int",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "cutting_mesh":
- {
- "label": "Cutting Mesh",
- "description": "Limit the volume of this mesh to within other meshes. You can use this to make certain areas of one mesh print with different settings and with a whole different extruder.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "mold_enabled":
- {
- "label": "Mold",
- "description": "Print models as a mold, which can be cast in order to get a model which resembles the models on the build plate.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true
- },
- "mold_width":
- {
- "label": "Minimal Mold Width",
- "description": "The minimal distance between the outside of the mold and the outside of the model.",
- "unit": "mm",
- "type": "float",
- "minimum_value_warning": "wall_line_width_0 * 2",
- "maximum_value_warning": "100",
- "default_value": 5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_roof_height":
- {
- "label": "Mold Roof Height",
- "description": "The height above horizontal parts in your model which to print mold.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "5",
- "default_value": 0.5,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "mold_angle":
- {
- "label": "Mold Angle",
- "description": "The angle of overhang of the outer walls created for the mold. 0° will make the outer shell of the mold vertical, while 90° will make the outside of the model follow the contour of the model.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value_warning": "support_angle",
- "maximum_value": "90",
- "default_value": 40,
- "settable_per_mesh": true,
- "enabled": "mold_enabled"
- },
- "support_mesh":
- {
- "label": "Support Mesh",
- "description": "Use this mesh to specify support areas. This can be used to generate support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "anti_overhang_mesh":
- {
- "label": "Anti Overhang Mesh",
- "description": "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "settable_globally": false
- },
- "magic_mesh_surface_mode":
- {
- "label": "Surface Mode",
- "description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.",
- "type": "enum",
- "options":
- {
- "normal": "Normal",
- "surface": "Surface",
- "both": "Both"
- },
- "default_value": "normal",
- "settable_per_mesh": true
- },
- "magic_spiralize":
- {
- "label": "Spiralize Outer Contour",
- "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature should only be enabled when each layer only contains a single part.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "smooth_spiralized_contours":
- {
- "label": "Smooth Spiralized Contours",
- "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.",
- "type": "bool",
- "default_value": true,
- "enabled": "magic_spiralize",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "relative_extrusion":
- {
- "label": "Relative Extrusion",
- "description": "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the g-code. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any g-code script is output.",
- "type": "bool",
- "default_value": false,
- "value": "machine_gcode_flavor==\"RepRap (RepRap)\"",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "experimental":
- {
- "label": "Experimental",
- "type": "category",
- "icon": "Experiment",
- "description": "Features that haven't completely been fleshed out yet.",
- "children":
- {
- "slicing_tolerance":
- {
- "label": "Slicing Tolerance",
- "description": "Vertical tolerance in the sliced layers. The contours of a layer are normally generated by taking cross sections through the middle of each layer's thickness (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the entire thickness of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Inclusive retains the most details, Exclusive makes for the best fit and Middle stays closest to the original surface.",
- "type": "enum",
- "options":
- {
- "middle": "Middle",
- "exclusive": "Exclusive",
- "inclusive": "Inclusive"
- },
- "default_value": "middle",
- "settable_per_mesh": true
- },
- "infill_enable_travel_optimization":
- {
- "label": "Infill Travel Optimization",
- "description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.",
- "type": "bool",
- "enabled": "resolveOrValue('retraction_combing') != 'off'",
- "default_value": false,
- "settable_per_mesh": true
- },
- "material_flow_dependent_temperature":
- {
- "label": "Auto Temperature",
- "description": "Change the temperature for each layer automatically with the average flow speed of that layer.",
- "type": "bool",
- "default_value": false,
- "enabled": "machine_nozzle_temp_enabled and False",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "material_flow_temp_graph":
- {
- "label": "Flow Temperature Graph",
- "description": "Data linking material flow (in mm3 per second) to temperature (degrees Celsius).",
- "unit": "[[mm³,°C]]",
- "type": "str",
- "default_value": "[[3.5,200],[7.0,240]]",
- "enabled": "False and machine_nozzle_temp_enabled and material_flow_dependent_temperature",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "minimum_polygon_circumference":
- {
- "label": "Minimum Polygon Circumference",
- "description": "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details.",
- "unit": "mm",
- "type": "float",
- "default_value": 1.0,
- "minimum_value": "0",
- "minimum_value_warning": "0.05",
- "maximum_value_warning": "1.0",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "support_skip_some_zags":
- {
- "label": "Break Up Support In Chunks",
- "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.",
- "type": "bool",
- "default_value": false,
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_skip_zag_per_mm":
- {
- "label": "Support Chunk Size",
- "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.",
- "type": "float",
- "unit": "mm",
- "default_value": 20,
- "minimum_value": "0",
- "minimum_value_warning": "support_line_distance",
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "support_zag_skip_count":
- {
- "label": "Support Chunk Line Count",
- "description": "Skip one in every N connection lines to make the support structure easier to break away.",
- "type": "int",
- "default_value": 5,
- "value": "0 if support_line_distance == 0 else round(support_skip_zag_per_mm / support_line_distance)",
- "minimum_value": "1",
- "minimum_value_warning": "3",
- "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "draft_shield_enabled":
- {
- "label": "Enable Draft Shield",
- "description": "This will create a wall around the model, which traps (hot) air and shields against exterior airflow. Especially useful for materials which warp easily.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_dist":
- {
- "label": "Draft Shield X/Y Distance",
- "description": "Distance of the draft shield from the print, in the X/Y directions.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 10,
- "resolve": "max(extruderValues('draft_shield_dist'))",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height_limitation":
- {
- "label": "Draft Shield Limitation",
- "description": "Set the height of the draft shield. Choose to print the draft shield at the full height of the model or at a limited height.",
- "type": "enum",
- "options":
- {
- "full": "Full",
- "limited": "Limited"
- },
- "default_value": "full",
- "resolve": "'full' if 'full' in extruderValues('draft_shield_height_limitation') else 'limited'",
- "enabled": "draft_shield_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "draft_shield_height":
- {
- "label": "Draft Shield Height",
- "description": "Height limitation of the draft shield. Above this height no draft shield will be printed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "9999",
- "default_value": 10,
- "value": "10",
- "enabled": "draft_shield_enabled and draft_shield_height_limitation == 'limited'",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "conical_overhang_enabled":
- {
- "label": "Make Overhang Printable",
- "description": "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical.",
- "type": "bool",
- "default_value": false
- },
- "conical_overhang_angle":
- {
- "label": "Maximum Model Angle",
- "description": "The maximum angle of overhangs after the they have been made printable. At a value of 0° all overhangs are replaced by a piece of model connected to the build plate, 90° will not change the model in any way.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-89",
- "minimum_value_warning": "0",
- "maximum_value": "89",
- "default_value": 50,
- "enabled": "conical_overhang_enabled"
- },
- "conical_overhang_hole_size":
- {
- "label": "Maximum Overhang Hole Area",
- "description": "The maximum area of a hole in the base of the model before it's removed by Make Overhang Printable. Holes smaller than this will be retained. A value of 0 mm² will fill all holes in the models base.",
- "unit": "mm²",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "0",
- "default_value": 0,
- "enabled": "conical_overhang_enabled"
- },
- "coasting_enable":
- {
- "label": "Enable Coasting",
- "description": "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to print the last piece of the extrusion path in order to reduce stringing.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_volume":
- {
- "label": "Coasting Volume",
- "description": "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.064,
- "minimum_value": "0",
- "maximum_value_warning": "machine_nozzle_size * 5",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_min_volume":
- {
- "label": "Minimum Volume Before Coasting",
- "description": "The smallest volume an extrusion path should have before allowing coasting. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10.0",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "coasting_speed":
- {
- "label": "Coasting Speed",
- "description": "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops.",
- "unit": "%",
- "type": "float",
- "default_value": 90,
- "minimum_value": "0.0001",
- "maximum_value_warning": "100",
- "enabled": "coasting_enable",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "cross_infill_pocket_size":
- {
- "label": "Cross 3D Pocket Size",
- "description": "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself.",
- "unit": "mm",
- "type": "float",
- "default_value": 2.0,
- "value": "infill_line_distance",
- "minimum_value": "0",
- "maximum_value_warning": "infill_line_distance * math.sqrt(2)",
- "enabled": "infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_infill_density_image":
- {
- "label": "Cross Infill Density Image",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the infill of the print.",
- "type": "str",
- "default_value": "",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "limit_to_extruder": "infill_extruder_nr",
- "settable_per_mesh": true
- },
- "cross_support_density_image":
- {
- "label": "Cross Fill Density Image for Support",
- "description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support.",
- "type": "str",
- "default_value": "",
- "enabled": "support_pattern == 'cross' or support_pattern == 'cross_3d'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "support_conical_enabled":
- {
- "label": "Enable Conical Support",
- "description": "Make support areas smaller at the bottom than at the overhang.",
- "type": "bool",
- "default_value": false,
- "enabled": "support_enable and support_structure != 'tree'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_angle":
- {
- "label": "Conical Support Angle",
- "description": "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top.",
- "unit": "°",
- "type": "float",
- "minimum_value": "-90",
- "minimum_value_warning": "-45",
- "maximum_value_warning": "45",
- "maximum_value": "90",
- "default_value": 30,
- "enabled": "support_conical_enabled and support_enable and support_structure != 'tree'",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "support_conical_min_width":
- {
- "label": "Conical Support Minimum Width",
- "description": "Minimum width to which the base of the conical support area is reduced. Small widths can lead to unstable support structures.",
- "unit": "mm",
- "default_value": 5.0,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size * 3",
- "maximum_value_warning": "100.0",
- "type": "float",
- "enabled": "support_conical_enabled and support_enable and support_structure != 'tree' and support_conical_angle > 0",
- "limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_enabled":
- {
- "label": "Fuzzy Skin",
- "description": "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look.",
- "type": "bool",
- "default_value": false,
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_outside_only":
- {
- "label": "Fuzzy Skin Outside Only",
- "description": "Jitter only the parts' outlines and not the parts' holes.",
- "type": "bool",
- "default_value": false,
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_thickness":
- {
- "label": "Fuzzy Skin Thickness",
- "description": "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0.001",
- "maximum_value_warning": "wall_line_width_0",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- },
- "magic_fuzzy_skin_point_density":
- {
- "label": "Fuzzy Skin Density",
- "description": "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution.",
- "type": "float",
- "unit": "1/mm",
- "default_value": 1.25,
- "minimum_value": "0.008",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "maximum_value": "2 / magic_fuzzy_skin_thickness",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "magic_fuzzy_skin_point_dist":
- {
- "label": "Fuzzy Skin Point Distance",
- "description": "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "magic_fuzzy_skin_thickness / 2",
- "minimum_value_warning": "0.1",
- "maximum_value_warning": "10",
- "value": "10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density",
- "enabled": "magic_fuzzy_skin_enabled",
- "limit_to_extruder": "wall_0_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "flow_rate_max_extrusion_offset":
- {
- "label": "Flow Rate Compensation Max Extrusion Offset",
- "description": "The maximum distance in mm to move the filament to compensate for changes in flow rate.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "default_value": 0,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "flow_rate_extrusion_offset_factor":
- {
- "label": "Flow Rate Compensation Factor",
- "description": "How far to move the filament in order to compensate for changes in flow rate, as a percentage of how far the filament would move in one second of extrusion.",
- "unit": "%",
- "type": "float",
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "default_value": 100,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_enabled":
- {
- "label": "Wire Printing",
- "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_height":
- {
- "label": "WP Connection Height",
- "description": "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "value": "machine_nozzle_head_distance",
- "minimum_value": "0.001",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_inset":
- {
- "label": "WP Roof Inset Distance",
- "description": "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 3,
- "minimum_value": "0",
- "minimum_value_warning": "machine_nozzle_size",
- "maximum_value_warning": "20",
- "enabled": "wireframe_enabled",
- "value": "wireframe_height",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed":
- {
- "label": "WP Speed",
- "description": "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_printspeed_bottom":
- {
- "label": "WP Bottom Printing Speed",
- "description": "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed_flat",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_up":
- {
- "label": "WP Upward Printing Speed",
- "description": "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_down":
- {
- "label": "WP Downward Printing Speed",
- "description": "Speed of printing a line diagonally downward. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)",
- "maximum_value_warning": "50",
- "enabled": "wireframe_enabled",
- "value": "wireframe_printspeed",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_printspeed_flat":
- {
- "label": "WP Horizontal Printing Speed",
- "description": "Speed of printing the horizontal contours of the model. Only applies to Wire Printing.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "minimum_value": "0.05",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "100",
- "value": "wireframe_printspeed",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_flow":
- {
- "label": "WP Flow",
- "description": "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false,
- "children":
- {
- "wireframe_flow_connection":
- {
- "label": "WP Connection Flow",
- "description": "Flow compensation when going up or down. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flow_flat":
- {
- "label": "WP Flat Flow",
- "description": "Flow compensation when printing flat lines. Only applies to Wire Printing.",
- "unit": "%",
- "default_value": 100,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "float",
- "enabled": "wireframe_enabled",
- "value": "wireframe_flow",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- }
- }
- },
- "wireframe_top_delay":
- {
- "label": "WP Top Delay",
- "description": "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_bottom_delay":
- {
- "label": "WP Bottom Delay",
- "description": "Delay time after a downward move. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "1",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_flat_delay":
- {
- "label": "WP Flat Delay",
- "description": "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing.",
- "unit": "s",
- "type": "float",
- "default_value": 0.1,
- "minimum_value": "0",
- "maximum_value_warning": "0.5",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_up_half_speed":
- {
- "label": "WP Ease Upward",
- "description": "Distance of an upward move which is extruded with half speed.\nThis can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.3,
- "minimum_value": "0",
- "maximum_value_warning": "5.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_top_jump":
- {
- "label": "WP Knot Size",
- "description": "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled and wireframe_strategy == 'knot'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_fall_down":
- {
- "label": "WP Fall Down",
- "description": "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_drag_along":
- {
- "label": "WP Drag Along",
- "description": "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "maximum_value_warning": "wireframe_height",
- "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_strategy":
- {
- "label": "WP Strategy",
- "description": "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted.",
- "type": "enum",
- "options":
- {
- "compensate": "Compensate",
- "knot": "Knot",
- "retract": "Retract"
- },
- "default_value": "compensate",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_straight_before_down":
- {
- "label": "WP Straighten Downward Lines",
- "description": "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing.",
- "type": "float",
- "unit": "%",
- "default_value": 20,
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_fall_down":
- {
- "label": "WP Roof Fall Down",
- "description": "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 2,
- "minimum_value_warning": "0",
- "maximum_value_warning": "wireframe_roof_inset",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_drag_along":
- {
- "label": "WP Roof Drag Along",
- "description": "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "maximum_value_warning": "10",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_roof_outer_delay":
- {
- "label": "WP Roof Outer Delay",
- "description": "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing.",
- "type": "float",
- "unit": "s",
- "default_value": 0.2,
- "minimum_value": "0",
- "maximum_value_warning": "2.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wireframe_nozzle_clearance":
- {
- "label": "WP Nozzle Clearance",
- "description": "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing.",
- "type": "float",
- "unit": "mm",
- "default_value": 1,
- "minimum_value_warning": "0",
- "maximum_value_warning": "10.0",
- "enabled": "wireframe_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_enabled":
- {
- "label": "Use Adaptive Layers",
- "description": "Adaptive layers computes the layer heights depending on the shape of the model.",
- "type": "bool",
- "default_value": false,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation":
- {
- "label": "Adaptive Layers Maximum Variation",
- "description": "The maximum allowed height different from the base layer height.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "unit": "mm",
- "default_value": 0.1,
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_variation_step":
- {
- "label": "Adaptive Layers Variation Step Size",
- "description": "The difference in height of the next layer height compared to the previous one.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 0.01,
- "unit": "mm",
- "settable_per_mesh": false,
- "minimum_value": "0.001",
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "adaptive_layer_height_threshold":
- {
- "label": "Adaptive Layers Topography Size",
- "description": "Target horizontal distance between two adjacent layers. Reducing this setting causes thinner layers to be used to bring the edges of the layers closer together.",
- "type": "float",
- "enabled": "adaptive_layer_height_enabled",
- "default_value": 0.2,
- "unit": "mm",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "wall_overhang_angle":
- {
- "label": "Overhanging Wall Angle",
- "description": "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "settable_per_mesh": true
- },
- "wall_overhang_speed_factor":
- {
- "label": "Overhanging Wall Speed",
- "description": "Overhanging walls will be printed at this percentage of their normal print speed.",
- "unit": "%",
- "type": "float",
- "default_value": 100,
- "minimum_value": "0.001",
- "minimum_value_warning": "25",
- "settable_per_mesh": true
- },
- "bridge_settings_enabled":
- {
- "label": "Enable Bridge Settings",
- "description": "Detect bridges and modify print speed, flow and fan settings while bridges are printed.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('bridge_settings_enabled'))",
- "settable_per_mesh": true,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
- "bridge_wall_min_length":
- {
- "label": "Minimum Bridge Wall Length",
- "description": "Unsupported walls shorter than this will be printed using the normal wall settings. Longer unsupported walls will be printed using the bridge wall settings.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 5,
- "value": "line_width + support_xy_distance + 1.0",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true,
- "settable_per_extruder": false
- },
- "bridge_skin_support_threshold":
- {
- "label": "Bridge Skin Support Threshold",
- "description": "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "100",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_sparse_infill_max_density":
- {
- "label": "Bridge Sparse Infill Max Density",
- "description": "Maximum density of infill considered to be sparse. Skin over sparse infill is considered to be unsupported and so may be treated as a bridge skin.",
- "unit": "%",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_coast":
- {
- "label": "Bridge Wall Coasting",
- "description": "This controls the distance the extruder should coast immediately before a bridge wall begins. Coasting before the bridge starts can reduce the pressure in the nozzle and may produce a flatter bridge.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0",
- "maximum_value": "500",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_speed":
- {
- "label": "Bridge Wall Speed",
- "description": "The speed at which the bridge walls are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_wall_0 / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_wall_material_flow":
- {
- "label": "Bridge Wall Flow",
- "description": "When printing bridge walls, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 50,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed":
- {
- "label": "Bridge Skin Speed",
- "description": "The speed at which bridge skin regions are printed.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "max(cool_min_speed, speed_topbottom / 2)",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow":
- {
- "label": "Bridge Skin Flow",
- "description": "When printing bridge skin regions, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 60,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_density":
- {
- "label": "Bridge Skin Density",
- "description": "The density of the bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "5",
- "minimum_value_warning": "20",
- "maximum_value_warning": "100",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_fan_speed":
- {
- "label": "Bridge Fan Speed",
- "description": "Percentage fan speed to use when printing bridge walls and skin.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 100,
- "type": "float",
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_enable_more_layers":
- {
- "label": "Bridge Has Multiple Layers",
- "description": "If enabled, the second and third layers above the air are printed using the following settings. Otherwise, those layers are printed using the normal settings.",
- "type": "bool",
- "default_value": true,
- "enabled": "bridge_settings_enabled",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_2":
- {
- "label": "Bridge Second Skin Speed",
- "description": "Print speed to use when printing the second bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 25,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_2":
- {
- "label": "Bridge Second Skin Flow",
- "description": "When printing the second bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 100,
- "type": "float",
- "minimum_value": "0.0001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_2":
- {
- "label": "Bridge Second Skin Density",
- "description": "The density of the second bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 75,
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "20",
- "maximum_value_warning": "100",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_2":
- {
- "label": "Bridge Second Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the second bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_speed_3":
- {
- "label": "Bridge Third Skin Speed",
- "description": "Print speed to use when printing the third bridge skin layer.",
- "unit": "mm/s",
- "type": "float",
- "minimum_value": "cool_min_speed",
- "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)",
- "maximum_value_warning": "300",
- "default_value": 15,
- "value": "bridge_skin_speed",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_material_flow_3":
- {
- "label": "Bridge Third Skin Flow",
- "description": "When printing the third bridge skin layer, the amount of material extruded is multiplied by this value.",
- "unit": "%",
- "default_value": 110,
- "type": "float",
- "minimum_value": "0.001",
- "minimum_value_warning": "50",
- "maximum_value_warning": "150",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_skin_density_3":
- {
- "label": "Bridge Third Skin Density",
- "description": "The density of the third bridge skin layer. Values less than 100 will increase the gaps between the skin lines.",
- "unit": "%",
- "default_value": 80,
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "20",
- "maximum_value_warning": "100",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "bridge_fan_speed_3":
- {
- "label": "Bridge Third Skin Fan Speed",
- "description": "Percentage fan speed to use when printing the third bridge skin layer.",
- "unit": "%",
- "minimum_value": "0",
- "maximum_value": "100",
- "default_value": 0,
- "type": "float",
- "enabled": "bridge_settings_enabled and bridge_enable_more_layers",
- "settable_per_mesh": true
- },
- "clean_between_layers":
- {
- "label": "Wipe Nozzle Between Layers",
- "description": "Whether to include nozzle wipe G-Code between layers (maximum 1 per layer). Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working.",
- "default_value": false,
- "type": "bool",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "max_extrusion_before_wipe":
- {
- "label": "Material Volume Between Wipes",
- "description": "Maximum material that can be extruded before another nozzle wipe is initiated. If this value is less than the volume of material required in a layer, the setting has no effect in this layer, i.e. it is limited to one wipe per layer.",
- "default_value": 10,
- "type": "float",
- "unit": "mm³",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_enable":
- {
- "label": "Wipe Retraction Enable",
- "description": "Retract the filament when the nozzle is moving over a non-printed area.",
- "type": "bool",
- "default_value": true,
- "value": "retraction_enable",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_amount":
- {
- "label": "Wipe Retraction Distance",
- "description": "Amount to retract the filament so it does not ooze during the wipe sequence.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_amount",
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_retraction_extra_prime_amount":
- {
- "label": "Wipe Retraction Extra Prime Amount",
- "description": "Some material can ooze away during a wipe travel moves, which can be compensated for here.",
- "unit": "mm³",
- "type": "float",
- "default_value": 0,
- "value": "retraction_extra_prime_amount",
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10.0",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "wipe_retraction_speed":
- {
- "label": "Wipe Retraction Speed",
- "description": "The speed at which the filament is retracted and primed during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 5,
- "value": "retraction_speed",
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "maximum_value": "machine_max_feedrate_e",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "children":
- {
- "wipe_retraction_retract_speed":
- {
- "label": "Wipe Retraction Retract Speed",
- "description": "The speed at which the filament is retracted during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 3,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "wipe_retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "wipe_retraction_prime_speed":
- {
- "label": "Wipe Retraction Prime Speed",
- "description": "The speed at which the filament is primed during a wipe retraction move.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 2,
- "minimum_value": "0",
- "maximum_value": "machine_max_feedrate_e",
- "minimum_value_warning": "1",
- "maximum_value_warning": "70",
- "enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "wipe_retraction_speed",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
- },
- "wipe_pause":
- {
- "label": "Wipe Pause",
- "description": "Pause after the unretract.",
- "unit": "s",
- "type": "float",
- "default_value": 0,
- "minimum_value": "0",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_enable":
- {
- "label": "Wipe Z Hop",
- "description": "When wiping, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
- "type": "bool",
- "default_value": true,
- "value": "retraction_hop_enabled",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_amount":
- {
- "label": "Wipe Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "retraction_hop",
- "enabled": "wipe_hop_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_hop_speed":
- {
- "label": "Wipe Hop Speed",
- "description": "Speed to move the z-axis during the hop.",
- "unit": "mm/s",
- "type": "float",
- "default_value": 10,
- "value": "speed_z_hop",
- "minimum_value": "0",
- "minimum_value_warning": "1",
- "enabled": "wipe_hop_enable and clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_brush_pos_x":
- {
- "label": "Wipe Brush X Position",
- "description": "X location where wipe script will start.",
- "type": "float",
- "unit": "mm",
- "default_value": 100,
- "minimum_value_warning": "0",
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_repeat_count":
- {
- "label": "Wipe Repeat Count",
- "description": "Number of times to move the nozzle across the brush.",
- "type": "int",
- "minimum_value": "0",
- "default_value": 5,
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "wipe_move_distance":
- {
- "label": "Wipe Move Distance",
- "description": "The distance to move the head back and forth across the brush.",
- "unit": "mm",
- "type": "float",
- "default_value": 20,
- "enabled": "clean_between_layers",
- "settable_per_mesh": false,
- "settable_per_extruder": true,
- "settable_per_meshgroup": false
- },
- "small_hole_max_size":
- {
- "label": "Small Hole Max Size",
- "description": "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "settable_per_mesh": true,
- "children":
- {
- "small_feature_max_length":
- {
- "label": "Small Feature Max Length",
- "description": "Feature outlines that are shorter than this length will be printed using Small Feature Speed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "value": "small_hole_max_size * math.pi",
- "settable_per_mesh": true
- }
- }
- },
- "small_feature_speed_factor":
- {
- "label": "Small Feature Speed",
- "description": "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
- "unit": "%",
- "type": "float",
- "default_value": 50,
- "minimum_value": "1",
- "minimum_value_warning": "25",
- "maximum_value_warning": "100",
- "settable_per_mesh": true
- },
- "small_feature_speed_factor_0":
- {
- "label": "Small Feature Initial Layer Speed",
- "description": "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
- "unit": "%",
- "type": "float",
- "default_value": 50,
- "value": "small_feature_speed_factor",
- "minimum_value": "1",
- "minimum_value_warning": "25",
- "maximum_value_warning": "100",
- "settable_per_mesh": true
- },
- "material_alternate_walls":
- {
- "label": "Alternate Wall Directions",
- "description": "Alternate wall directions every other layer and inset. Useful for materials that can build up stress, like for metal printing.",
- "type": "bool",
- "default_value": false,
- "enabled": true,
- "settable_per_mesh": true,
- "settable_per_extruder": true
- },
- "raft_remove_inside_corners":
- {
- "label": "Remove Raft Inside Corners",
- "description": "Remove inside corners from the raft, causing the raft to become convex.",
- "type": "bool",
- "default_value": false,
- "resolve": "any(extruderValues('raft_remove_inside_corners'))",
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- },
- "raft_base_wall_count":
- {
- "label": "Raft Base Wall Count",
- "description": "The number of contours to print around the linear pattern in the base layer of the raft.",
- "type": "int",
- "default_value": 1,
- "enabled": "resolveOrValue('adhesion_type') == 'raft'",
- "resolve": "max(extruderValues('raft_base_wall_count'))",
- "settable_per_mesh": false,
- "settable_per_extruder": false
- }
- }
- },
- "command_line_settings":
- {
- "label": "Command Line Settings",
- "description": "Settings which are only used if CuraEngine isn't called from the Cura frontend.",
- "type": "category",
- "enabled": false,
- "children":
- {
- "center_object":
- {
- "description": "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved.",
- "type": "bool",
- "label": "Center Object",
- "default_value": false,
- "enabled": false
- },
- "mesh_position_x":
- {
- "description": "Offset applied to the object in the x direction.",
- "type": "float",
- "label": "Mesh Position X",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_y":
- {
- "description": "Offset applied to the object in the y direction.",
- "type": "float",
- "label": "Mesh Position Y",
- "default_value": 0,
- "enabled": false
- },
- "mesh_position_z":
- {
- "description": "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'.",
- "type": "float",
- "label": "Mesh Position Z",
- "default_value": 0,
- "enabled": false
- },
- "mesh_rotation_matrix":
- {
- "label": "Mesh Rotation Matrix",
- "description": "Transformation matrix to be applied to the model when loading it from file.",
- "type": "str",
- "default_value": "[[1,0,0], [0,1,0], [0,0,1]]",
- "enabled": false
- }
- }
- }
- }
-}
diff --git a/software/Print3r/settings/slicer/cura5/map.ini b/software/Print3r/settings/slicer/cura5/map.ini
deleted file mode 100644
index 69e9abe7..00000000
--- a/software/Print3r/settings/slicer/cura5/map.ini
+++ /dev/null
@@ -1,49 +0,0 @@
-infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-machine_nozzle_diameter=$nozzle_diameter
-machine_material_diameter=$filament_diameter
-material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-initial_bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_amount
-machine_start_gcode=$start_gcode
-machine_end_gcode=$end_gcode
-retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-speed_print_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-line_width=$nozzle_diameter
-infill_line_width=$nozzle_diameter
-prime_tower_line_width=$nozzle_diameter
-raft_surface_line_width=$nozzle_diameter
-roofing_line_width=$nozzle_diameter
-skin_line_width=$nozzle_diameter
-skirt_brim_line_width=$nozzle_diameter
-support_bottom_line_width=$nozzle_diameter
-support_interface_line_width=$nozzle_diameter
-support_line_width=$nozzle_diameter
-support_roof_line_width=$nozzle_diameter
-wall_line_width_0=$nozzle_diameter
-wall_line_width=$nozzle_diameter
-wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-material_print_temperature=$temperature
-material_print_bed_temperature=$bed_temperature
-material_bed_temperature_layer_0=$bed_temperature
-material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-speed_print=$print_speed
-speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:40}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-brim_line_count=$brims
-skirt_line_count=$skirts
-raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/enoch/base.ini b/software/Print3r/settings/slicer/enoch/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/enoch/map.ini b/software/Print3r/settings/slicer/enoch/map.ini
deleted file mode 100644
index 782ed66f..00000000
--- a/software/Print3r/settings/slicer/enoch/map.ini
+++ /dev/null
@@ -1,47 +0,0 @@
-infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-machine_nozzle_diameter=$nozzle_diameter
-machine_material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_length
-machine_start_gcode=$start_gcode
-machine_end_gcode=$end_gcode
-retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-print_speed_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-line_width=$nozzle_diameter
-infill_line_width=$nozzle_diameter
-prime_tower_line_width=$nozzle_diameter
-raft_surface_line_width=$nozzle_diameter
-roofing_line_width=$nozzle_diameter
-skin_line_width=$nozzle_diameter
-skirt_brim_line_width=$nozzle_diameter
-support_bottom_line_width=$nozzle_diameter
-support_interface_line_width=$nozzle_diameter
-support_line_width=$nozzle_diameter
-support_roof_line_width=$nozzle_diameter
-wall_line_width_0=$nozzle_diameter
-wall_line_width=$nozzle_diameter
-wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-material_print_temperature=$temperature
-material_print_bed_temperature=$bed_temperature
-material_bed_temperature_layer_0=$bed_temperature
-material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-speed_print=$print_speed
-speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:40}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-brim_line_count=$brims
-skirt_line_count=$skirts
-raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Print3r/settings/slicer/goslice/base.ini b/software/Print3r/settings/slicer/goslice/base.ini
deleted file mode 100644
index 43776e92..00000000
--- a/software/Print3r/settings/slicer/goslice/base.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-#force-safe-gcode=0
-initial-bed-temperature=0
diff --git a/software/Print3r/settings/slicer/goslice/map.ini b/software/Print3r/settings/slicer/goslice/map.ini
deleted file mode 100644
index f543c9f7..00000000
--- a/software/Print3r/settings/slicer/goslice/map.ini
+++ /dev/null
@@ -1,21 +0,0 @@
-inset-count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-brim-count=$brims
-skirt-count=$skirts
-filament-diameter={$filament_diameter*1000}
-extrusion-width={$nozzle_diameter*1000}
-hot-end-temperature=$temperature
-has-heated-bed={$bed_temperature>0?1:0}
-bed-temperature=$bed_temperature
-#initial-hot-end-temperture=$first_layer_temperature
-#initial-bed-temperature=$first_layer_bed_temperature
-layer-speed=$print_speed
-layer-thickness={$layer_height*1000}
-move-speed=$travel_speed
-number-bottom-layers=$bottom_layers
-number-top-layers=$top_layers
-retraction-length=$retraction_length
-start-gcode=$start_gcode
-end-gcode=$end_gcode
-retraction-speed=$retract_speed
-support-enabled={'$support' ne 'none'?1:0}
-infill-percent=$fill_density
diff --git a/software/Print3r/settings/slicer/goslice/strict.ini b/software/Print3r/settings/slicer/goslice/strict.ini
deleted file mode 100644
index bca6b85e..00000000
--- a/software/Print3r/settings/slicer/goslice/strict.ini
+++ /dev/null
@@ -1,43 +0,0 @@
-additional_internal_infill_overlap_percent
-bed_temperature
-brim_count
-center
-end_gcode
-extrusion_multiplier
-extrusion_width
-fan_speed
-filament_diameter
-finish_polygon_snap_distance
-force_safe_gcode
-has_heated_bed
-hot_end_temperature
-infill_overlap_percent
-infill_percent
-infill_rotation_degree
-infill_zig_zag
-initial_bed_temperature
-initial_hot_end_temperature
-initial_layer_speed
-initial_layer_thickness
-initial_temperature_layer_count
-inset_count
-join_polygon_snap_distance
-layer_speed
-layer_thickness
-meld_distance
-move_speed
-number_bottom_layers
-number_top_layers
-outer_perimeter_speed
-output
-retraction_length
-retraction_speed
-skirt_count
-skirt_distance
-start_gcode
-support_enabled
-support_gap
-support_interface_layers
-support_pattern_spacing
-support_threshold_angle
-support_top_gap_layers
diff --git a/software/Print3r/settings/slicer/kirimoto/base.ini b/software/Print3r/settings/slicer/kirimoto/base.ini
deleted file mode 100644
index 08b0cee7..00000000
--- a/software/Print3r/settings/slicer/kirimoto/base.ini
+++ /dev/null
@@ -1 +0,0 @@
-# empty for now as KiriMotoSlicer has sane defaults
diff --git a/software/Print3r/settings/slicer/kirimoto/map.ini b/software/Print3r/settings/slicer/kirimoto/map.ini
deleted file mode 100644
index aea35a53..00000000
--- a/software/Print3r/settings/slicer/kirimoto/map.ini
+++ /dev/null
@@ -1,25 +0,0 @@
-sliceHeight=$layer_height
-firstSliceHeight={$first_layer_height>0 ? $first_layer_height : $layer_height}
-sliceShells={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-sliceFillSparse={$fill_density / 100}
-sliceBottomLayers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-sliceTopLayers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-sliceSkirtCount=$skirts
-sliceSupportEnable={'$support' eq 'bed' || '$support' eq 'everywhere' ? 'true' : 'false'}
-bedWidth=$machine_width
-bedDepth=$machine_depth
-maxHeight=$machine_height
-outputTemp=$temperature
-outputBedTemp=$bed_temperature
-outputFeedrate=$print_speed
-outputFinishrate=$print_speed
-outputSeekrate=$travel_speed
-#outputShellMult=1.25
-#outputFillMult=1.25
-#outputSparseMult=1.25
-outputRetractDist=$retraction_length
-outputRetractSpeed=$retract_speed
-##outputRetractDwell=...
-gcodePre=$start_gcode
-gcodePost=$end_gcode
-deviceName=$machine_name
diff --git a/software/Print3r/settings/slicer/lab/base.ini b/software/Print3r/settings/slicer/lab/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/lab/map.ini b/software/Print3r/settings/slicer/lab/map.ini
deleted file mode 100644
index 74398616..00000000
--- a/software/Print3r/settings/slicer/lab/map.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-walls={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-
-retraction_speed=$retract_speed
diff --git a/software/Print3r/settings/slicer/mandoline/base.ini b/software/Print3r/settings/slicer/mandoline/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/mandoline/map.ini b/software/Print3r/settings/slicer/mandoline/map.ini
deleted file mode 100644
index 2f1fa147..00000000
--- a/software/Print3r/settings/slicer/mandoline/map.ini
+++ /dev/null
@@ -1,14 +0,0 @@
-nozzle_0_diameter=$nozzle_diameter
-retract_length=$retraction_length
-skirt_lines=$skirts
-skirt_layers={$skirts>0?1:0}
-shell_count=$perimeters
-bed_size_x=$machine_width
-bed_size_y=$machine_depth
-bed_center_x={$machine_width/2}
-bed_center_y={$machine_depth/2}
-nozzle_0_max_speed=$print_speed
-bed_temp=$bed_temperature
-infill_density=$fill_density
-nozzle_0_temp=$temperature
-shell_count=$perimeters
diff --git a/software/Print3r/settings/slicer/metatron/base.ini b/software/Print3r/settings/slicer/metatron/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/metatron/map.ini b/software/Print3r/settings/slicer/metatron/map.ini
deleted file mode 100644
index 74398616..00000000
--- a/software/Print3r/settings/slicer/metatron/map.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-walls={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-
-retraction_speed=$retract_speed
diff --git a/software/Print3r/settings/slicer/prusa/base.ini b/software/Print3r/settings/slicer/prusa/base.ini
deleted file mode 100644
index e22ea1f3..00000000
--- a/software/Print3r/settings/slicer/prusa/base.ini
+++ /dev/null
@@ -1,188 +0,0 @@
-# generated by Slic3r Prusa Edition 1.40.1+linux64 on 2018-10-14 at 18:48:34
-avoid_crossing_perimeters = 0
-#bed_shape = 32x25,332x25,332x325,32x325
-bed_temperature = 0
-before_layer_gcode =
-between_objects_gcode =
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_angle = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_width = 0
-clip_multipart_objects = 0
-complete_objects = 0
-cooling = 1
-cooling_tube_length = 5
-cooling_tube_retraction = 91.5
-default_acceleration = 0
-default_filament_profile = ""
-default_print_profile =
-deretract_speed = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-elefant_foot_compensation = 0
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-ensure_vertical_shell_thickness = 0
-external_fill_pattern = rectilinear
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_colour = ""
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #7729B2
-filament_cost = 0
-filament_density = 0
-filament_diameter = 1.75
-filament_loading_speed = 28
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
-filament_settings_id = ""
-filament_soluble = 0
-filament_toolchange_delay = 0
-filament_type = PLA
-filament_unloading_speed = 90
-fill_angle = 45
-fill_density = 20%
-#fill_pattern = rectlinear
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 0
-first_layer_extrusion_width = 100%
-first_layer_height = 0.25
-first_layer_speed = 30
-first_layer_temperature = 210
-gap_fill_speed = 20
-gcode_comments = 0
-gcode_flavor = marlin
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 25%
-infill_speed = 80
-inherits =
-interface_shells = 0
-layer_gcode =
-layer_height = 0.4
-max_fan_speed = 100
-max_layer_height = 0
-max_print_height = 200
-max_print_speed = 80
-max_volumetric_extrusion_rate_slope_negative = 0
-max_volumetric_extrusion_rate_slope_positive = 0
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.07
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 0.5
-octoprint_apikey =
-octoprint_cafile =
-octoprint_host =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-parking_pos_retraction = 92
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-print_settings_id =
-printer_model =
-printer_notes =
-printer_settings_id =
-printer_variant =
-printer_vendor =
-raft_layers = 0
-resolution = 0
-retract_before_travel = 2
-retract_before_wipe = 0%
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-serial_port =
-serial_speed = 250000
-single_extruder_multi_material = 0
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_contact_loops = 0
-support_material_interface_extruder = 1
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_pattern = rectilinear
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_synchronize_layers = 0
-support_material_threshold = 0
-support_material_with_sheath = 1
-support_material_xy_spacing = 50%
-temperature = 195
-thin_walls = 1
-threads = 8
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_volumetric_e = 0
-variable_layer_height = 1
-wipe = 0
-wipe_tower = 0
-wipe_tower_bridging = 10
-wipe_tower_rotation_angle = 0
-wipe_tower_width = 60
-wipe_tower_x = 180
-wipe_tower_y = 140
-wiping_volumes_extruders = 70,70
-wiping_volumes_matrix = 0
-xy_size_compensation = 0
-z_offset = 0
-machine_limits_usage = ignore
diff --git a/software/Print3r/settings/slicer/prusa/map.ini b/software/Print3r/settings/slicer/prusa/map.ini
deleted file mode 100644
index 334d2502..00000000
--- a/software/Print3r/settings/slicer/prusa/map.ini
+++ /dev/null
@@ -1,16 +0,0 @@
-top_solid_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_solid_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-perimeters={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-first_layer_bed_temperature=$bed_temperature
-#first_layer_bed_temperature={$first_layer_bed_temperature?$first_layer_bed_temperature:$bed_temperature}
-max_print_speed={$print_speed*1.2}
-brim_width={$brims>0?$nozzle_diameter*$brims:0}
-raft_layers=$rafts
-skirts={$brims>0||$rafts>0?0:$skirts}
-skirt_height={$brims>0||$rafts>0?0:($skirts>0?1:0)}
-support_material={'$support' eq 'bed' || '$support' eq 'everywhere' ? 1 : 0}
-support_material_angle=$support_angle
-support_material_buildplate_only={'$support' eq 'bed' ? 1 : 0 }
-seam_position={'$seam' eq 'sharpest_corner' ? 'aligned' : '$seam' }
-max_fan_speed=$cool_fan_speed_max
-min_fan_speed=$cool_fan_speed_min
diff --git a/software/Print3r/settings/slicer/slic3r-pe/base.ini b/software/Print3r/settings/slicer/slic3r-pe/base.ini
deleted file mode 100644
index 5efa659b..00000000
--- a/software/Print3r/settings/slicer/slic3r-pe/base.ini
+++ /dev/null
@@ -1,187 +0,0 @@
-# generated by Slic3r Prusa Edition 1.40.1+linux64 on 2018-10-14 at 18:48:34
-avoid_crossing_perimeters = 0
-#bed_shape = 32x25,332x25,332x325,32x325
-bed_temperature = 0
-before_layer_gcode =
-between_objects_gcode =
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_angle = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_width = 0
-clip_multipart_objects = 0
-complete_objects = 0
-cooling = 1
-cooling_tube_length = 5
-cooling_tube_retraction = 91.5
-default_acceleration = 0
-default_filament_profile = ""
-default_print_profile =
-deretract_speed = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-elefant_foot_compensation = 0
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-ensure_vertical_shell_thickness = 0
-external_fill_pattern = rectilinear
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_colour = ""
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #7729B2
-filament_cost = 0
-filament_density = 0
-filament_diameter = 1.75
-filament_loading_speed = 28
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
-filament_settings_id = ""
-filament_soluble = 0
-filament_toolchange_delay = 0
-filament_type = PLA
-filament_unloading_speed = 90
-fill_angle = 45
-fill_density = 20%
-#fill_pattern = rectlinear
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 0
-first_layer_extrusion_width = 100%
-first_layer_height = 0.25
-first_layer_speed = 30
-first_layer_temperature = 210
-gap_fill_speed = 20
-gcode_comments = 0
-gcode_flavor = marlin
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 25%
-infill_speed = 80
-inherits =
-interface_shells = 0
-layer_gcode =
-layer_height = 0.4
-max_fan_speed = 100
-max_layer_height = 0
-max_print_height = 200
-max_print_speed = 80
-max_volumetric_extrusion_rate_slope_negative = 0
-max_volumetric_extrusion_rate_slope_positive = 0
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.07
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 0.5
-octoprint_apikey =
-octoprint_cafile =
-octoprint_host =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-parking_pos_retraction = 92
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-print_settings_id =
-printer_model =
-printer_notes =
-printer_settings_id =
-printer_variant =
-printer_vendor =
-raft_layers = 0
-resolution = 0
-retract_before_travel = 2
-retract_before_wipe = 0%
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-serial_port =
-serial_speed = 250000
-single_extruder_multi_material = 0
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_contact_loops = 0
-support_material_interface_extruder = 1
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_pattern = rectilinear
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_synchronize_layers = 0
-support_material_threshold = 0
-support_material_with_sheath = 1
-support_material_xy_spacing = 50%
-temperature = 195
-thin_walls = 1
-threads = 8
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_volumetric_e = 0
-variable_layer_height = 1
-wipe = 0
-wipe_tower = 0
-wipe_tower_bridging = 10
-wipe_tower_rotation_angle = 0
-wipe_tower_width = 60
-wipe_tower_x = 180
-wipe_tower_y = 140
-#wiping_volumes_extruders = 70,70
-#wiping_volumes_matrix = 0
-xy_size_compensation = 0
-z_offset = 0
diff --git a/software/Print3r/settings/slicer/slic3r-pe/map.ini b/software/Print3r/settings/slicer/slic3r-pe/map.ini
deleted file mode 100644
index e428b9cf..00000000
--- a/software/Print3r/settings/slicer/slic3r-pe/map.ini
+++ /dev/null
@@ -1,20 +0,0 @@
-top_solid_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_solid_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-perimeters={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-first_layer_bed_temperature=$bed_temperature
-#first_layer_bed_temperature={$first_layer_bed_temperature?$first_layer_bed_temperature:$bed_temperature}
-max_print_speed={$print_speed*1.2}
-brim_width={$brims>0?$nozzle_diameter*$brims:0}
-raft_layers=$rafts
-skirts={$brims>0||$rafts>0?0:$skirts}
-skirt_height={$brims>0||$rafts>0?0:$skirts}
-support_material={'$support' eq 'bed' || '$support' eq 'everywhere' ? 1 : 0}
-support_material_angle=$support_angle
-support_material_buildplate_only={'$support' eq 'bed' ? 1 : 0 }
-seam_position={'$seam' eq 'sharpest_corner' ? 'aligned' : '$seam' }
-nozzle_diameter={$extruders_count>1?join(',',("$nozzle_diameter")x$extruders_count):$nozzle_diameter}
-filament_diameter={$extruders_count>1?join(',',("$filament_diameter")x$extruders_count):$filament_diameter}
-temperature={$extruders_count>1?join(',',("$temperature")x$extruders_count):$temperature}
-first_layer_temperature={$extruders_count>1?join(',',("$first_layer_temperature")x$extruders_count):$first_layer_temperature}
-max_fan_speed=$cool_fan_speed_max
-min_fan_speed=$cool_fan_speed_min
diff --git a/software/Print3r/settings/slicer/slic3r-pe/vase.ini b/software/Print3r/settings/slicer/slic3r-pe/vase.ini
deleted file mode 100644
index c2fe8188..00000000
--- a/software/Print3r/settings/slicer/slic3r-pe/vase.ini
+++ /dev/null
@@ -1 +0,0 @@
-../slic3r/vase.ini
\ No newline at end of file
diff --git a/software/Print3r/settings/slicer/slic3r/base.ini b/software/Print3r/settings/slicer/slic3r/base.ini
deleted file mode 100644
index 9aa9514c..00000000
--- a/software/Print3r/settings/slicer/slic3r/base.ini
+++ /dev/null
@@ -1,187 +0,0 @@
-# generated by Slic3r Prusa Edition 1.40.1+linux64 on 2018-10-14 at 18:48:34
-avoid_crossing_perimeters = 0
-#bed_shape = 32x25,332x25,332x325,32x325
-bed_temperature = 0
-before_layer_gcode =
-between_objects_gcode =
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_angle = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_width = 0
-clip_multipart_objects = 0
-complete_objects = 0
-cooling = 1
-cooling_tube_length = 5
-cooling_tube_retraction = 91.5
-default_acceleration = 0
-default_filament_profile = ""
-default_print_profile =
-deretract_speed = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-elefant_foot_compensation = 0
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-ensure_vertical_shell_thickness = 0
-external_fill_pattern = rectilinear
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_colour = ""
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #7729B2
-filament_cost = 0
-filament_density = 0
-filament_diameter = 1.75
-filament_loading_speed = 28
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
-filament_settings_id = ""
-filament_soluble = 0
-filament_toolchange_delay = 0
-filament_type = PLA
-filament_unloading_speed = 90
-fill_angle = 45
-fill_density = 20%
-#fill_pattern = rectlinear
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 0
-first_layer_extrusion_width = 200%
-first_layer_height = 0.25
-first_layer_speed = 30
-first_layer_temperature = 210
-gap_fill_speed = 20
-gcode_comments = 0
-gcode_flavor = marlin
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 25%
-infill_speed = 80
-inherits =
-interface_shells = 0
-layer_gcode =
-layer_height = 0.4
-max_fan_speed = 100
-max_layer_height = 0
-max_print_height = 200
-max_print_speed = 80
-max_volumetric_extrusion_rate_slope_negative = 0
-max_volumetric_extrusion_rate_slope_positive = 0
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.07
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 0.5
-octoprint_apikey =
-octoprint_cafile =
-octoprint_host =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-parking_pos_retraction = 92
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-print_settings_id =
-printer_model =
-printer_notes =
-printer_settings_id =
-printer_variant =
-printer_vendor =
-raft_layers = 0
-resolution = 0
-retract_before_travel = 2
-retract_before_wipe = 0%
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-serial_port =
-serial_speed = 250000
-single_extruder_multi_material = 0
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_contact_loops = 0
-support_material_interface_extruder = 1
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_pattern = rectilinear
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_synchronize_layers = 0
-support_material_threshold = 0
-support_material_with_sheath = 1
-support_material_xy_spacing = 50%
-temperature = 195
-thin_walls = 1
-threads = 8
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_volumetric_e = 0
-variable_layer_height = 1
-wipe = 0
-wipe_tower = 0
-wipe_tower_bridging = 10
-wipe_tower_rotation_angle = 0
-wipe_tower_width = 60
-wipe_tower_x = 180
-wipe_tower_y = 140
-wiping_volumes_extruders = 70,70
-wiping_volumes_matrix = 0
-xy_size_compensation = 0
-z_offset = 0
diff --git a/software/Print3r/settings/slicer/slic3r/map.ini b/software/Print3r/settings/slicer/slic3r/map.ini
deleted file mode 100644
index a3fa4d19..00000000
--- a/software/Print3r/settings/slicer/slic3r/map.ini
+++ /dev/null
@@ -1,20 +0,0 @@
-top_solid_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_solid_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-perimeters={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-first_layer_bed_temperature=$bed_temperature
-#first_layer_bed_temperature={$first_layer_bed_temperature?$first_layer_bed_temperature:$bed_temperature}
-max_print_speed={$print_speed*1.2}
-brim_width={$brims>0?$nozzle_diameter*$brims:0}
-raft_layers=$rafts
-skirts={$brims>0||$rafts>0?0:$skirts}
-skirt_height={$brims>0||$rafts>0?0:1}
-support_material={'$support' eq 'bed' || '$support' eq 'everywhere' ? 1 : 0}
-support_material_buildplate_only={'$support' eq 'bed' ? 1 : 0 }
-support_material_angle=$support_angle
-seam_position={'$seam' eq 'rear' ? 'aligned' : '$seam' eq 'sharpest_corner' ? 'aligned' : '$seam'}
-nozzle_diameter={$extruders_count>1?join(',',("$nozzle_diameter")x$extruders_count):$nozzle_diameter}
-filament_diameter={$extruders_count>1?join(',',("$filament_diameter")x$extruders_count):$filament_diameter}
-max_fan_speed=$cool_fan_speed_max
-min_fan_speed=$cool_fan_speed_min
-retract_length=$retraction_length?$retraction_length:2
-retract_speed=$retraction_speed?$retraction_speed:80
diff --git a/software/Print3r/settings/slicer/slicer4rtn/base.ini b/software/Print3r/settings/slicer/slicer4rtn/base.ini
deleted file mode 100644
index 9aa9514c..00000000
--- a/software/Print3r/settings/slicer/slicer4rtn/base.ini
+++ /dev/null
@@ -1,187 +0,0 @@
-# generated by Slic3r Prusa Edition 1.40.1+linux64 on 2018-10-14 at 18:48:34
-avoid_crossing_perimeters = 0
-#bed_shape = 32x25,332x25,332x325,32x325
-bed_temperature = 0
-before_layer_gcode =
-between_objects_gcode =
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_angle = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_width = 0
-clip_multipart_objects = 0
-complete_objects = 0
-cooling = 1
-cooling_tube_length = 5
-cooling_tube_retraction = 91.5
-default_acceleration = 0
-default_filament_profile = ""
-default_print_profile =
-deretract_speed = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-elefant_foot_compensation = 0
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-ensure_vertical_shell_thickness = 0
-external_fill_pattern = rectilinear
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_colour = ""
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #7729B2
-filament_cost = 0
-filament_density = 0
-filament_diameter = 1.75
-filament_loading_speed = 28
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
-filament_settings_id = ""
-filament_soluble = 0
-filament_toolchange_delay = 0
-filament_type = PLA
-filament_unloading_speed = 90
-fill_angle = 45
-fill_density = 20%
-#fill_pattern = rectlinear
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 0
-first_layer_extrusion_width = 200%
-first_layer_height = 0.25
-first_layer_speed = 30
-first_layer_temperature = 210
-gap_fill_speed = 20
-gcode_comments = 0
-gcode_flavor = marlin
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 25%
-infill_speed = 80
-inherits =
-interface_shells = 0
-layer_gcode =
-layer_height = 0.4
-max_fan_speed = 100
-max_layer_height = 0
-max_print_height = 200
-max_print_speed = 80
-max_volumetric_extrusion_rate_slope_negative = 0
-max_volumetric_extrusion_rate_slope_positive = 0
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.07
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 0.5
-octoprint_apikey =
-octoprint_cafile =
-octoprint_host =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-parking_pos_retraction = 92
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-print_settings_id =
-printer_model =
-printer_notes =
-printer_settings_id =
-printer_variant =
-printer_vendor =
-raft_layers = 0
-resolution = 0
-retract_before_travel = 2
-retract_before_wipe = 0%
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-serial_port =
-serial_speed = 250000
-single_extruder_multi_material = 0
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_contact_loops = 0
-support_material_interface_extruder = 1
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_pattern = rectilinear
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_synchronize_layers = 0
-support_material_threshold = 0
-support_material_with_sheath = 1
-support_material_xy_spacing = 50%
-temperature = 195
-thin_walls = 1
-threads = 8
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_volumetric_e = 0
-variable_layer_height = 1
-wipe = 0
-wipe_tower = 0
-wipe_tower_bridging = 10
-wipe_tower_rotation_angle = 0
-wipe_tower_width = 60
-wipe_tower_x = 180
-wipe_tower_y = 140
-wiping_volumes_extruders = 70,70
-wiping_volumes_matrix = 0
-xy_size_compensation = 0
-z_offset = 0
diff --git a/software/Print3r/settings/slicer/slicer4rtn/map.ini b/software/Print3r/settings/slicer/slicer4rtn/map.ini
deleted file mode 100644
index 86c52ef9..00000000
--- a/software/Print3r/settings/slicer/slicer4rtn/map.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-top_solid_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_solid_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-perimeters={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-first_layer_bed_temperature=$bed_temperature
-#first_layer_bed_temperature={$first_layer_bed_temperature?$first_layer_bed_temperature:$bed_temperature}
-max_print_speed={$print_speed*1.2}
-brim_width={$brims>0?$nozzle_diameter*$brims:0}
-raft_layers=$rafts
-skirts={$brims>0||$rafts>0?0:$skirts}
-skirt_height={$brims>0||$rafts>0?0:$skirts}
-support_material={'$support' eq 'bed' || '$support' eq 'everywhere' ? 1 : 0}
-support_material_buildplate_only={'$support' eq 'bed' ? 1 : 0 }
-support_material_angle=$support_angle
-seam_position={'$seam' eq 'rear' ? 'aligned' : '$seam' eq 'sharpest_corner' ? 'aligned' : '$seam'}
-nozzle_diameter={$extruders_count>1?join(',',("$nozzle_diameter")x$extruders_count):$nozzle_diameter}
-filament_diameter={$extruders_count>1?join(',',("$filament_diameter")x$extruders_count):$filament_diameter}
-max_fan_speed=$cool_fan_speed_max
-min_fan_speed=$cool_fan_speed_min
-
diff --git a/software/Print3r/settings/slicer/slicers.json b/software/Print3r/settings/slicer/slicers.json
deleted file mode 100644
index 3d3275a9..00000000
--- a/software/Print3r/settings/slicer/slicers.json
+++ /dev/null
@@ -1,157 +0,0 @@
-{
- "cura" : {
- "exe" : "CuraEngine",
- "formats" : {
- "stl" : 1
- }
- },
- "cura-legacy" : {
- "exe" : "CuraEngineLegacy",
- "formats" : {
- "stl" : 1
- }
- },
- "cura4" : {
- "exe" : "CuraEngine4",
- "formats" : {
- "stl" : 1
- }
- },
- "cura5" : {
- "exe" : "CuraEngine5",
- "formats" : {
- "stl" : 1
- }
- },
- "curax" : {
- "exe" : "CuraEngineX",
- "formats" : {
- "stl" : 1,
- "obj" : 1,
- "off" : 1
- }
- },
- "prusa" : {
- "exe" : "prusa-slicer",
- "formats" : {
- "obj" : 1,
- "3mf" : 1,
- "amf" : 1,
- "stl" : 1
- }
- },
- "slic3r" : {
- "exe" : "slic3r",
- "formats" : {
- "obj" : 1,
- "amf" : 1,
- "stl" : 1
- }
- },
- "slic3r-pe" : {
- "exe" : "slic3r-prusa3d",
- "formats" : {
- "obj" : 1,
- "amf" : 1,
- "stl" : 1
- }
- },
- "slicer4rtn": {
- "exe" : "slicer4rtn",
- "format": {
- "stl": 1
- }
- },
- "cura-slicer" : {
- "exe" : "cura-slicer",
- "formats" : {
- "stl" : 1
- }
- },
- "super": {
- "exe": "superslicer",
- "formats": {
- "obj" : 1,
- "3mf" : 1,
- "amf" : 1,
- "stl" : 1
- }
- },
- "mandoline" : {
- "exe" : "mandoline",
- "formats" : {
- "stl" : 1
- }
- },
- "5dmaker": {
- "exe": "5dmaker",
- "formats": {
- "stl": 1,
- "5mf": 1
- }
- },
- "kirimoto": {
- "exe": "kirimoto-slicer",
- "formats": {
- "stl": 1
- }
- },
- "zplus": {
- "exe": "zplus-slicer",
- "formats": {
- "stl": 1
- }
- },
- "lab": {
- "exe": "lab-slicer",
- "formats": {
- "stl": 1,
- "obj": 1,
- "3mj": 1,
- "3mf": 1
- }
- },
- "vox3l": {
- "exe": "vox3l-slicer",
- "formats": {
- "stl": 1,
- "obj": 1,
- "3mj": 1,
- "3mf": 1
- }
- },
- "voxgl": {
- "exe": "voxgl-slicer",
- "formats": {
- "stl": 1,
- "off": 1,
- "3mj": 1,
- "3mf": 1
- },
- "stdout": 1
- },
- "metatron": {
- "exe": "metatron-slicer",
- "formats": {
- "stl": 1,
- "off": 1,
- "3mj": 1,
- "3mf": 1
- }
- },
- "enoch": {
- "exe": "enoch-slicer",
- "formats": {
- "stl": 1,
- "off": 1,
- "3mj": 1,
- "3mf": 1
- }
- },
- "goslice": {
- "exe": "goslice",
- "formats": {
- "stl": 1
- }
- }
-}
diff --git a/software/Print3r/settings/slicer/super/base.ini b/software/Print3r/settings/slicer/super/base.ini
deleted file mode 100644
index c98d3a91..00000000
--- a/software/Print3r/settings/slicer/super/base.ini
+++ /dev/null
@@ -1,187 +0,0 @@
-# generated by Slic3r Prusa Edition 1.40.1+linux64 on 2018-10-14 at 18:48:34
-avoid_crossing_perimeters = 0
-#bed_shape = 32x25,332x25,332x325,32x325
-bed_temperature = 0
-before_layer_gcode =
-between_objects_gcode =
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_angle = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_width = 0
-clip_multipart_objects = 0
-complete_objects = 0
-cooling = 1
-cooling_tube_length = 5
-cooling_tube_retraction = 91.5
-default_acceleration = 0
-default_filament_profile = ""
-default_print_profile =
-deretract_speed = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-elefant_foot_compensation = 0
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-ensure_vertical_shell_thickness = 0
-external_fill_pattern = rectilinear
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_colour = ""
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #7729B2
-filament_cost = 0
-filament_density = 0
-filament_diameter = 1.75
-filament_loading_speed = 28
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
-filament_settings_id = ""
-filament_soluble = 0
-filament_toolchange_delay = 0
-filament_type = PLA
-filament_unloading_speed = 90
-fill_angle = 45
-fill_density = 20%
-#fill_pattern = rectlinear
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 0
-first_layer_extrusion_width = 100%
-first_layer_height = 0.25
-first_layer_speed = 30
-first_layer_temperature = 210
-gap_fill_speed = 20
-gcode_comments = 0
-gcode_flavor = marlin
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 25%
-infill_speed = 80
-inherits =
-interface_shells = 0
-layer_gcode =
-layer_height = 0.4
-max_fan_speed = 100
-max_layer_height = 0
-max_print_height = 200
-max_print_speed = 80
-max_volumetric_extrusion_rate_slope_negative = 0
-max_volumetric_extrusion_rate_slope_positive = 0
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.07
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 0.5
-octoprint_apikey =
-octoprint_cafile =
-octoprint_host =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-parking_pos_retraction = 92
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-print_settings_id =
-printer_model =
-printer_notes =
-printer_settings_id =
-printer_variant =
-printer_vendor =
-raft_layers = 0
-resolution = 0
-retract_before_travel = 2
-retract_before_wipe = 0%
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-serial_port =
-serial_speed = 250000
-single_extruder_multi_material = 0
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_contact_loops = 0
-support_material_interface_extruder = 1
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_pattern = rectilinear
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_synchronize_layers = 0
-support_material_threshold = 0
-support_material_with_sheath = 1
-support_material_xy_spacing = 50%
-temperature = 195
-thin_walls = 1
-threads = 8
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_volumetric_e = 0
-variable_layer_height = 1
-wipe = 0
-wipe_tower = 0
-wipe_tower_bridging = 10
-wipe_tower_rotation_angle = 0
-wipe_tower_width = 60
-wipe_tower_x = 180
-wipe_tower_y = 140
-wiping_volumes_extruders = 70,70
-wiping_volumes_matrix = 0
-xy_size_compensation = 0
-z_offset = 0
diff --git a/software/Print3r/settings/slicer/super/map.ini b/software/Print3r/settings/slicer/super/map.ini
deleted file mode 100644
index 985a1c6b..00000000
--- a/software/Print3r/settings/slicer/super/map.ini
+++ /dev/null
@@ -1,16 +0,0 @@
-top_solid_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_solid_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-perimeters={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-first_layer_bed_temperature=$bed_temperature
-#first_layer_bed_temperature={$first_layer_bed_temperature?$first_layer_bed_temperature:$bed_temperature}
-max_print_speed={$print_speed*1.2}
-brim_width={$brims>0?$nozzle_diameter*$brims:0}
-raft_layers=$rafts
-skirts={$brims>0||$rafts>0?0:$skirts}
-skirt_height={$brims>0||$rafts>0?0:$skirts}
-support_material={'$support' eq 'bed' || '$support' eq 'everywhere' ? 1 : 0}
-support_material_angle=$support_angle
-support_material_buildplate_only={'$support' eq 'bed' ? 1 : 0 }
-seam_position={'$seam' eq 'sharpest_corner' ? 'aligned' : '$seam' }
-max_fan_speed=$cool_fan_speed_max
-min_fan_speed=$cool_fan_speed_min
diff --git a/software/Print3r/settings/slicer/vox3l/base.ini b/software/Print3r/settings/slicer/vox3l/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/vox3l/map.ini b/software/Print3r/settings/slicer/vox3l/map.ini
deleted file mode 100644
index 74398616..00000000
--- a/software/Print3r/settings/slicer/vox3l/map.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-walls={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-
-retraction_speed=$retract_speed
diff --git a/software/Print3r/settings/slicer/voxgl/base.ini b/software/Print3r/settings/slicer/voxgl/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/voxgl/map.ini b/software/Print3r/settings/slicer/voxgl/map.ini
deleted file mode 100644
index 74398616..00000000
--- a/software/Print3r/settings/slicer/voxgl/map.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-walls={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-
-retraction_speed=$retract_speed
diff --git a/software/Print3r/settings/slicer/zplus/base.ini b/software/Print3r/settings/slicer/zplus/base.ini
deleted file mode 100644
index e69de29b..00000000
diff --git a/software/Print3r/settings/slicer/zplus/map.ini b/software/Print3r/settings/slicer/zplus/map.ini
deleted file mode 100644
index 927c2363..00000000
--- a/software/Print3r/settings/slicer/zplus/map.ini
+++ /dev/null
@@ -1,47 +0,0 @@
-#infill_line_distance={$fill_density==0?0:$nozzle_diameter*100/$fill_density*2}
-#machine_nozzle_diameter=$nozzle_diameter
-#machine_material_diameter=$filament_diameter
-top_layers={$top_thickness>0?int($top_thickness/$layer_height+0.5):$top_layers}
-bottom_layers={$bottom_thickness>0?int($bottom_thickness/$layer_height+0.5):$bottom_layers}
-#wall_line_count={$wall_thickness>0?int($wall_thickness/$nozzle_diameter+0.5):$perimeters}
-retraction_amount=$retraction_length
-#machine_start_gcode=$start_gcode
-#machine_end_gcode=$end_gcode
-#retraction_amount=$retraction_length
-layer_height_0={$first_layer_height>0?$first_layer_height:$layer_height}
-print_speed_layer_0=$first_layer_speed
-material_bed_temperature_layer_0={$first_layer_bed_temparature?$first_layer_bed_temperature:$bed_temperature}
-#line_width=$nozzle_diameter
-#infill_line_width=$nozzle_diameter
-#prime_tower_line_width=$nozzle_diameter
-#raft_surface_line_width=$nozzle_diameter
-#roofing_line_width=$nozzle_diameter
-#skin_line_width=$nozzle_diameter
-#skirt_brim_line_width=$nozzle_diameter
-#support_bottom_line_width=$nozzle_diameter
-#support_interface_line_width=$nozzle_diameter
-#support_line_width=$nozzle_diameter
-#support_roof_line_width=$nozzle_diameter
-#wall_line_width_0=$nozzle_diameter
-#wall_line_width=$nozzle_diameter
-#wall_line_width_x=$nozzle_diameter
-#default_material_print_temperature=$temperature
-#default_material_print_bed_temperature=$bed_temperature
-#material_print_temperature=$temperature
-#material_print_bed_temperature=$bed_temperature
-#material_bed_temperature_layer_0=$bed_temperature
-#material_print_temperature_layer_0=$first_layer_temperature
-#print_temperature=$temperature
-#print_bed_temperature=$bed_temperature
-#speed_print=$print_speed
-#speed_wall={$perimeter_speed?$perimeter_speed:$print_speed*0.8}
-#speed_infill={$infill_speed?$infill_speed:$print_speed*1.5}
-retraction_speed={$retract_speed?$retract_speed:80}
-speed_travel=$travel_speed
-adhesion_type={$rafts>0?"raft":$brims>0?"brim":"skirt"}
-#brim_line_count=$brims
-#skirt_line_count=$skirts
-#raft_surface_layers=$rafts
-support_enable={'$support' ne 'none' && '$support' ne '0' ? 1 : 0}
-support_type={'$support' eq "bed"?"buildplate":"everywhere"}
-z_seam_type={'$seam' eq 'aligned' ? 'sharpest_corner' : '$seam' eq 'nearest' ? "shortest" : '$seam' eq 'rear'? 'back' : '$seam'}
diff --git a/software/Slic3r-1.3.0.64bit/MANIFEST b/software/Slic3r-1.3.0.64bit/MANIFEST
deleted file mode 100644
index 52667ed6..00000000
--- a/software/Slic3r-1.3.0.64bit/MANIFEST
+++ /dev/null
@@ -1,2894 +0,0 @@
-
-MANIFEST
-META.yml
-Slic3r-console.exe
-Slic3r-debug-console.exe
-Slic3r.exe
-freeglut.dll
-lib/AutoLoader.pm
-lib/B.pm
-lib/B/Deparse.pm
-lib/CPAN/Config.pm
-lib/Carp.pm
-lib/Carp/Heavy.pm
-lib/Class/Accessor.pm
-lib/Class/Method/Modifiers.pm
-lib/Class/Struct.pm
-lib/Compress/Raw/Bzip2.pm
-lib/Compress/Raw/Zlib.pm
-lib/Config.pm
-lib/Config_git.pl
-lib/Config_heavy.pl
-lib/Crypt/CBC.pm
-lib/Cwd.pm
-lib/Data/Dumper.pm
-lib/Data/OptList.pm
-lib/Devel/GlobalDestruction.pm
-lib/Digest.pm
-lib/Digest/MD5.pm
-lib/Digest/SHA.pm
-lib/Digest/base.pm
-lib/DynaLoader.pm
-lib/Encode.pm
-lib/Encode/Alias.pm
-lib/Encode/Byte.pm
-lib/Encode/Config.pm
-lib/Encode/Encoding.pm
-lib/Encode/Locale.pm
-lib/Encode/MIME/Name.pm
-lib/Errno.pm
-lib/Exporter.pm
-lib/Exporter/Heavy.pm
-lib/Fcntl.pm
-lib/File/Basename.pm
-lib/File/Glob.pm
-lib/File/GlobMapper.pm
-lib/File/Listing.pm
-lib/File/Spec.pm
-lib/File/Spec/Unix.pm
-lib/File/Spec/Win32.pm
-lib/File/stat.pm
-lib/FileHandle.pm
-lib/FindBin.pm
-lib/Getopt/Long.pm
-lib/HTML/Entities.pm
-lib/HTML/HeadParser.pm
-lib/HTML/Parser.pm
-lib/HTTP/Config.pm
-lib/HTTP/Cookies.pm
-lib/HTTP/Cookies/Netscape.pm
-lib/HTTP/Date.pm
-lib/HTTP/Headers.pm
-lib/HTTP/Headers/Util.pm
-lib/HTTP/Message.pm
-lib/HTTP/Negotiate.pm
-lib/HTTP/Request.pm
-lib/HTTP/Request/Common.pm
-lib/HTTP/Response.pm
-lib/HTTP/Status.pm
-lib/IO.pm
-lib/IO/Compress/Adapter/Bzip2.pm
-lib/IO/Compress/Adapter/Deflate.pm
-lib/IO/Compress/Base.pm
-lib/IO/Compress/Base/Common.pm
-lib/IO/Compress/Bzip2.pm
-lib/IO/Compress/Deflate.pm
-lib/IO/Compress/Gzip.pm
-lib/IO/Compress/Gzip/Constants.pm
-lib/IO/Compress/RawDeflate.pm
-lib/IO/Compress/Zlib/Constants.pm
-lib/IO/Compress/Zlib/Extra.pm
-lib/IO/Dir.pm
-lib/IO/File.pm
-lib/IO/HTML.pm
-lib/IO/Handle.pm
-lib/IO/Pipe.pm
-lib/IO/Seekable.pm
-lib/IO/Select.pm
-lib/IO/Socket.pm
-lib/IO/Socket/INET.pm
-lib/IO/Socket/INET6.pm
-lib/IO/Socket/IP.pm
-lib/IO/Socket/SSL.pm
-lib/IO/Socket/SSL/PublicSuffix.pm
-lib/IO/Socket/UNIX.pm
-lib/IO/Uncompress/Adapter/Bunzip2.pm
-lib/IO/Uncompress/Adapter/Inflate.pm
-lib/IO/Uncompress/Base.pm
-lib/IO/Uncompress/Bunzip2.pm
-lib/IO/Uncompress/Gunzip.pm
-lib/IO/Uncompress/Inflate.pm
-lib/IO/Uncompress/RawInflate.pm
-lib/LWP.pm
-lib/LWP/Authen/Basic.pm
-lib/LWP/Authen/Digest.pm
-lib/LWP/Authen/Ntlm.pm
-lib/LWP/ConnCache.pm
-lib/LWP/MediaTypes.pm
-lib/LWP/MemberMixin.pm
-lib/LWP/Protocol.pm
-lib/LWP/Protocol/cpan.pm
-lib/LWP/Protocol/data.pm
-lib/LWP/Protocol/file.pm
-lib/LWP/Protocol/ftp.pm
-lib/LWP/Protocol/gopher.pm
-lib/LWP/Protocol/http.pm
-lib/LWP/Protocol/https.pm
-lib/LWP/Protocol/loopback.pm
-lib/LWP/Protocol/mailto.pm
-lib/LWP/Protocol/nntp.pm
-lib/LWP/Protocol/nogo.pm
-lib/LWP/UserAgent.pm
-lib/LWP/media.types
-lib/List/Util.pm
-lib/MIME/Base64.pm
-lib/MIME/QuotedPrint.pm
-lib/Math/BigFloat.pm
-lib/Math/BigFloat/Trace.pm
-lib/Math/BigInt.pm
-lib/Math/BigInt/Calc.pm
-lib/Math/BigInt/CalcEmu.pm
-lib/Math/BigInt/FastCalc.pm
-lib/Math/BigInt/Lib.pm
-lib/Math/BigInt/Trace.pm
-lib/Math/Complex.pm
-lib/Math/Trig.pm
-lib/Method/Generate/Accessor.pm
-lib/Method/Generate/BuildAll.pm
-lib/Method/Generate/Constructor.pm
-lib/Method/Generate/DemolishAll.pm
-lib/Module/Runtime.pm
-lib/Moo.pm
-lib/Moo/HandleMoose.pm
-lib/Moo/HandleMoose/FakeMetaClass.pm
-lib/Moo/HandleMoose/_TypeMap.pm
-lib/Moo/Object.pm
-lib/Moo/Role.pm
-lib/Moo/_Utils.pm
-lib/Moo/_mro.pm
-lib/Moo/_strictures.pm
-lib/Moo/sification.pm
-lib/Mozilla/CA.pm
-lib/Mozilla/CA/cacert.pem
-lib/Net/Cmd.pm
-lib/Net/Config.pm
-lib/Net/Domain.pm
-lib/Net/FTP.pm
-lib/Net/FTP/A.pm
-lib/Net/FTP/E.pm
-lib/Net/FTP/I.pm
-lib/Net/FTP/L.pm
-lib/Net/FTP/dataconn.pm
-lib/Net/HTTP.pm
-lib/Net/HTTP/Methods.pm
-lib/Net/HTTPS.pm
-lib/Net/NNTP.pm
-lib/Net/Netrc.pm
-lib/Net/SSLeay.pm
-lib/POSIX.pm
-lib/Params/Util.pm
-lib/Pod/Escapes.pm
-lib/Pod/Simple.pm
-lib/Pod/Simple/BlackBox.pm
-lib/Pod/Simple/LinkSection.pm
-lib/Pod/Simple/TiedOutFH.pm
-lib/Pod/Simple/Transcode.pm
-lib/Pod/Simple/TranscodeDumb.pm
-lib/Pod/Simple/TranscodeSmart.pm
-lib/Pod/Text.pm
-lib/Pod/Usage.pm
-lib/Role/Tiny.pm
-lib/Scalar/Util.pm
-lib/SelectSaver.pm
-lib/Slic3r.pm
-lib/Slic3r/Config.pm
-lib/Slic3r/ExPolygon.pm
-lib/Slic3r/ExtrusionLoop.pm
-lib/Slic3r/ExtrusionPath.pm
-lib/Slic3r/Flow.pm
-lib/Slic3r/GCode/ArcFitting.pm
-lib/Slic3r/GCode/MotionPlanner.pm
-lib/Slic3r/GCode/PressureRegulator.pm
-lib/Slic3r/GCode/Reader.pm
-lib/Slic3r/GCode/VibrationLimit.pm
-lib/Slic3r/GUI.pm
-lib/Slic3r/GUI/2DBed.pm
-lib/Slic3r/GUI/3DScene.pm
-lib/Slic3r/GUI/AboutDialog.pm
-lib/Slic3r/GUI/BedShapeDialog.pm
-lib/Slic3r/GUI/BonjourBrowser.pm
-lib/Slic3r/GUI/ColorScheme.pm
-lib/Slic3r/GUI/ConfigWizard.pm
-lib/Slic3r/GUI/Controller.pm
-lib/Slic3r/GUI/Controller/ManualControlDialog.pm
-lib/Slic3r/GUI/Controller/PrinterPanel.pm
-lib/Slic3r/GUI/MainFrame.pm
-lib/Slic3r/GUI/Notifier.pm
-lib/Slic3r/GUI/OptionsGroup.pm
-lib/Slic3r/GUI/OptionsGroup/Field.pm
-lib/Slic3r/GUI/Plater.pm
-lib/Slic3r/GUI/Plater/2D.pm
-lib/Slic3r/GUI/Plater/2DToolpaths.pm
-lib/Slic3r/GUI/Plater/3D.pm
-lib/Slic3r/GUI/Plater/3DPreview.pm
-lib/Slic3r/GUI/Plater/LambdaObjectDialog.pm
-lib/Slic3r/GUI/Plater/ObjectCutDialog.pm
-lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm
-lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm
-lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm
-lib/Slic3r/GUI/Plater/SplineControl.pm
-lib/Slic3r/GUI/Preferences.pm
-lib/Slic3r/GUI/Preset.pm
-lib/Slic3r/GUI/PresetEditor.pm
-lib/Slic3r/GUI/PresetEditorDialog.pm
-lib/Slic3r/GUI/ProgressStatusBar.pm
-lib/Slic3r/GUI/Projector.pm
-lib/Slic3r/GUI/ReloadDialog.pm
-lib/Slic3r/GUI/SLAPrintOptions.pm
-lib/Slic3r/Geometry.pm
-lib/Slic3r/Geometry/Clipper.pm
-lib/Slic3r/Layer.pm
-lib/Slic3r/Line.pm
-lib/Slic3r/Model.pm
-lib/Slic3r/Point.pm
-lib/Slic3r/Polygon.pm
-lib/Slic3r/Polyline.pm
-lib/Slic3r/Print.pm
-lib/Slic3r/Print/GCode.pm
-lib/Slic3r/Print/Object.pm
-lib/Slic3r/Print/Simple.pm
-lib/Slic3r/Print/State.pm
-lib/Slic3r/Print/SupportMaterial.pm
-lib/Slic3r/SVG.pm
-lib/Slic3r/Surface.pm
-lib/Slic3r/Test.pm
-lib/Slic3r/Test/SectionCut.pm
-lib/Socket.pm
-lib/Socket6.pm
-lib/Storable.pm
-lib/Sub/Defer.pm
-lib/Sub/Exporter.pm
-lib/Sub/Exporter/Progressive.pm
-lib/Sub/Install.pm
-lib/Sub/Quote.pm
-lib/Symbol.pm
-lib/Term/Cap.pm
-lib/Text/ParseWords.pm
-lib/Thread.pm
-lib/Thread/Queue.pm
-lib/Thread/Semaphore.pm
-lib/Tie/Handle.pm
-lib/Tie/Hash.pm
-lib/Tie/StdHandle.pm
-lib/Time/HiRes.pm
-lib/Time/Local.pm
-lib/Try/Tiny.pm
-lib/URI.pm
-lib/URI/Escape.pm
-lib/URI/Heuristic.pm
-lib/URI/IRI.pm
-lib/URI/QueryParam.pm
-lib/URI/Split.pm
-lib/URI/URL.pm
-lib/URI/WithBase.pm
-lib/URI/_foreign.pm
-lib/URI/_generic.pm
-lib/URI/_idna.pm
-lib/URI/_ldap.pm
-lib/URI/_login.pm
-lib/URI/_punycode.pm
-lib/URI/_query.pm
-lib/URI/_segment.pm
-lib/URI/_server.pm
-lib/URI/_userpass.pm
-lib/URI/data.pm
-lib/URI/file.pm
-lib/URI/file/Base.pm
-lib/URI/file/FAT.pm
-lib/URI/file/Mac.pm
-lib/URI/file/OS2.pm
-lib/URI/file/QNX.pm
-lib/URI/file/Unix.pm
-lib/URI/file/Win32.pm
-lib/URI/ftp.pm
-lib/URI/gopher.pm
-lib/URI/http.pm
-lib/URI/https.pm
-lib/URI/ldap.pm
-lib/URI/ldapi.pm
-lib/URI/ldaps.pm
-lib/URI/mailto.pm
-lib/URI/mms.pm
-lib/URI/news.pm
-lib/URI/nntp.pm
-lib/URI/pop.pm
-lib/URI/rlogin.pm
-lib/URI/rsync.pm
-lib/URI/rtsp.pm
-lib/URI/rtspu.pm
-lib/URI/sftp.pm
-lib/URI/sip.pm
-lib/URI/sips.pm
-lib/URI/snews.pm
-lib/URI/ssh.pm
-lib/URI/telnet.pm
-lib/URI/tn3270.pm
-lib/Unicode/Normalize.pm
-lib/Win32.pm
-lib/Win32/API.pm
-lib/Win32/API/Struct.pm
-lib/Win32/API/Type.pm
-lib/Win32/Console.pm
-lib/Win32/TieRegistry.pm
-lib/Win32/WinError.pm
-lib/Win32API/File.pm
-lib/Win32API/File/cFile.pc
-lib/Win32API/Registry.pm
-lib/Win32API/Registry/cRegistry.pc
-lib/XSLoader.pm
-lib/attributes.pm
-lib/auto/B/B.xs.dll
-lib/auto/Compress/Raw/Bzip2/Bzip2.xs.dll
-lib/auto/Compress/Raw/Zlib/Zlib.xs.dll
-lib/auto/Cwd/Cwd.xs.dll
-lib/auto/Data/Dumper/Dumper.xs.dll
-lib/auto/Digest/MD5/MD5.xs.dll
-lib/auto/Digest/SHA/SHA.xs.dll
-lib/auto/Encode/Byte/Byte.xs.dll
-lib/auto/Encode/Encode.xs.dll
-lib/auto/Fcntl/Fcntl.xs.dll
-lib/auto/File/Glob/Glob.xs.dll
-lib/auto/HTML/Parser/Parser.xs.dll
-lib/auto/IO/IO.xs.dll
-lib/auto/List/Util/Util.xs.dll
-lib/auto/MIME/Base64/Base64.xs.dll
-lib/auto/Math/BigInt/FastCalc/FastCalc.xs.dll
-lib/auto/Net/SSLeay/SSLeay.xs.dll
-lib/auto/Net/SSLeay/autosplit.ix
-lib/auto/Net/SSLeay/debug_read.al
-lib/auto/Net/SSLeay/do_https.al
-lib/auto/Net/SSLeay/do_https2.al
-lib/auto/Net/SSLeay/do_https3.al
-lib/auto/Net/SSLeay/do_https4.al
-lib/auto/Net/SSLeay/do_httpx2.al
-lib/auto/Net/SSLeay/do_httpx3.al
-lib/auto/Net/SSLeay/do_httpx4.al
-lib/auto/Net/SSLeay/dump_peer_certificate.al
-lib/auto/Net/SSLeay/get_http.al
-lib/auto/Net/SSLeay/get_http3.al
-lib/auto/Net/SSLeay/get_http4.al
-lib/auto/Net/SSLeay/get_https.al
-lib/auto/Net/SSLeay/get_https3.al
-lib/auto/Net/SSLeay/get_https4.al
-lib/auto/Net/SSLeay/get_httpx.al
-lib/auto/Net/SSLeay/get_httpx3.al
-lib/auto/Net/SSLeay/get_httpx4.al
-lib/auto/Net/SSLeay/head_http.al
-lib/auto/Net/SSLeay/head_http3.al
-lib/auto/Net/SSLeay/head_http4.al
-lib/auto/Net/SSLeay/head_https.al
-lib/auto/Net/SSLeay/head_https3.al
-lib/auto/Net/SSLeay/head_https4.al
-lib/auto/Net/SSLeay/head_httpx.al
-lib/auto/Net/SSLeay/head_httpx3.al
-lib/auto/Net/SSLeay/head_httpx4.al
-lib/auto/Net/SSLeay/http_cat.al
-lib/auto/Net/SSLeay/https_cat.al
-lib/auto/Net/SSLeay/httpx_cat.al
-lib/auto/Net/SSLeay/initialize.al
-lib/auto/Net/SSLeay/make_form.al
-lib/auto/Net/SSLeay/make_headers.al
-lib/auto/Net/SSLeay/new_x_ctx.al
-lib/auto/Net/SSLeay/open_proxy_tcp_connection.al
-lib/auto/Net/SSLeay/open_tcp_connection.al
-lib/auto/Net/SSLeay/post_http.al
-lib/auto/Net/SSLeay/post_http3.al
-lib/auto/Net/SSLeay/post_http4.al
-lib/auto/Net/SSLeay/post_https.al
-lib/auto/Net/SSLeay/post_https3.al
-lib/auto/Net/SSLeay/post_https4.al
-lib/auto/Net/SSLeay/post_httpx.al
-lib/auto/Net/SSLeay/post_httpx3.al
-lib/auto/Net/SSLeay/post_httpx4.al
-lib/auto/Net/SSLeay/put_http.al
-lib/auto/Net/SSLeay/put_http3.al
-lib/auto/Net/SSLeay/put_http4.al
-lib/auto/Net/SSLeay/put_https.al
-lib/auto/Net/SSLeay/put_https3.al
-lib/auto/Net/SSLeay/put_https4.al
-lib/auto/Net/SSLeay/put_httpx.al
-lib/auto/Net/SSLeay/put_httpx3.al
-lib/auto/Net/SSLeay/put_httpx4.al
-lib/auto/Net/SSLeay/randomize.al
-lib/auto/Net/SSLeay/set_cert_and_key.al
-lib/auto/Net/SSLeay/set_proxy.al
-lib/auto/Net/SSLeay/set_server_cert_and_key.al
-lib/auto/Net/SSLeay/ssl_read_CRLF.al
-lib/auto/Net/SSLeay/ssl_read_all.al
-lib/auto/Net/SSLeay/ssl_read_until.al
-lib/auto/Net/SSLeay/ssl_write_CRLF.al
-lib/auto/Net/SSLeay/ssl_write_all.al
-lib/auto/Net/SSLeay/sslcat.al
-lib/auto/Net/SSLeay/tcp_read_CRLF.al
-lib/auto/Net/SSLeay/tcp_read_all.al
-lib/auto/Net/SSLeay/tcp_read_until.al
-lib/auto/Net/SSLeay/tcp_write_CRLF.al
-lib/auto/Net/SSLeay/tcp_write_all.al
-lib/auto/Net/SSLeay/tcpcat.al
-lib/auto/Net/SSLeay/tcpxcat.al
-lib/auto/Net/SSLeay/want_X509_lookup.al
-lib/auto/Net/SSLeay/want_nothing.al
-lib/auto/Net/SSLeay/want_read.al
-lib/auto/Net/SSLeay/want_write.al
-lib/auto/POSIX/POSIX.xs.dll
-lib/auto/Params/Util/Util.xs.dll
-lib/auto/Socket/Socket.xs.dll
-lib/auto/Socket6/Socket6.xs.dll
-lib/auto/Storable/Storable.xs.dll
-lib/auto/Time/HiRes/HiRes.xs.dll
-lib/auto/Unicode/Normalize/Normalize.xs.dll
-lib/auto/Win32/API/API.xs.dll
-lib/auto/Win32/Console/Console.xs.dll
-lib/auto/Win32/Win32.xs.dll
-lib/auto/Win32/WinError/WinError.xs.dll
-lib/auto/Win32API/File/File.xs.dll
-lib/auto/Win32API/Registry/Registry.xs.dll
-lib/auto/attributes/attributes.xs.dll
-lib/auto/mro/mro.xs.dll
-lib/auto/re/re.xs.dll
-lib/auto/threads/shared/shared.xs.dll
-lib/auto/threads/threads.xs.dll
-lib/base.pm
-lib/bytes.pm
-lib/bytes_heavy.pl
-lib/constant.pm
-lib/feature.pm
-lib/integer.pm
-lib/lib.pm
-lib/local/lib.pm
-lib/locale.pm
-lib/mro.pm
-lib/overload.pm
-lib/overload/numbers.pm
-lib/overloading.pm
-lib/parent.pm
-lib/re.pm
-lib/strict.pm
-lib/threads.pm
-lib/threads/shared.pm
-lib/unicore/Blocks.txt
-lib/unicore/CombiningClass.pl
-lib/unicore/Decomposition.pl
-lib/unicore/Heavy.pl
-lib/unicore/Name.pl
-lib/unicore/Name.pm
-lib/unicore/NamedSequences.txt
-lib/unicore/SpecialCasing.txt
-lib/unicore/To/Age.pl
-lib/unicore/To/Bc.pl
-lib/unicore/To/Bmg.pl
-lib/unicore/To/Bpb.pl
-lib/unicore/To/Bpt.pl
-lib/unicore/To/Cf.pl
-lib/unicore/To/Digit.pl
-lib/unicore/To/Ea.pl
-lib/unicore/To/Fold.pl
-lib/unicore/To/GCB.pl
-lib/unicore/To/Gc.pl
-lib/unicore/To/Hst.pl
-lib/unicore/To/InPC.pl
-lib/unicore/To/InSC.pl
-lib/unicore/To/Isc.pl
-lib/unicore/To/Jg.pl
-lib/unicore/To/Jt.pl
-lib/unicore/To/Lb.pl
-lib/unicore/To/Lc.pl
-lib/unicore/To/Lower.pl
-lib/unicore/To/NFCQC.pl
-lib/unicore/To/NFDQC.pl
-lib/unicore/To/NFKCCF.pl
-lib/unicore/To/NFKCQC.pl
-lib/unicore/To/NFKDQC.pl
-lib/unicore/To/Na1.pl
-lib/unicore/To/NameAlia.pl
-lib/unicore/To/Nt.pl
-lib/unicore/To/Nv.pl
-lib/unicore/To/PerlDeci.pl
-lib/unicore/To/SB.pl
-lib/unicore/To/Sc.pl
-lib/unicore/To/Scx.pl
-lib/unicore/To/Tc.pl
-lib/unicore/To/Title.pl
-lib/unicore/To/Uc.pl
-lib/unicore/To/Upper.pl
-lib/unicore/To/WB.pl
-lib/unicore/To/_PerlLB.pl
-lib/unicore/To/_PerlWB.pl
-lib/unicore/UCD.pl
-lib/unicore/lib/Age/NA.pl
-lib/unicore/lib/Age/V11.pl
-lib/unicore/lib/Age/V20.pl
-lib/unicore/lib/Age/V30.pl
-lib/unicore/lib/Age/V31.pl
-lib/unicore/lib/Age/V32.pl
-lib/unicore/lib/Age/V40.pl
-lib/unicore/lib/Age/V41.pl
-lib/unicore/lib/Age/V50.pl
-lib/unicore/lib/Age/V51.pl
-lib/unicore/lib/Age/V52.pl
-lib/unicore/lib/Age/V60.pl
-lib/unicore/lib/Age/V61.pl
-lib/unicore/lib/Age/V70.pl
-lib/unicore/lib/Age/V80.pl
-lib/unicore/lib/Alpha/Y.pl
-lib/unicore/lib/Bc/AL.pl
-lib/unicore/lib/Bc/AN.pl
-lib/unicore/lib/Bc/B.pl
-lib/unicore/lib/Bc/BN.pl
-lib/unicore/lib/Bc/CS.pl
-lib/unicore/lib/Bc/EN.pl
-lib/unicore/lib/Bc/ES.pl
-lib/unicore/lib/Bc/ET.pl
-lib/unicore/lib/Bc/L.pl
-lib/unicore/lib/Bc/NSM.pl
-lib/unicore/lib/Bc/ON.pl
-lib/unicore/lib/Bc/R.pl
-lib/unicore/lib/Bc/WS.pl
-lib/unicore/lib/BidiC/Y.pl
-lib/unicore/lib/BidiM/Y.pl
-lib/unicore/lib/Blk/NB.pl
-lib/unicore/lib/Bpt/C.pl
-lib/unicore/lib/Bpt/N.pl
-lib/unicore/lib/Bpt/O.pl
-lib/unicore/lib/CE/Y.pl
-lib/unicore/lib/CI/Y.pl
-lib/unicore/lib/CWCF/Y.pl
-lib/unicore/lib/CWCM/Y.pl
-lib/unicore/lib/CWKCF/Y.pl
-lib/unicore/lib/CWL/Y.pl
-lib/unicore/lib/CWT/Y.pl
-lib/unicore/lib/CWU/Y.pl
-lib/unicore/lib/Cased/Y.pl
-lib/unicore/lib/Ccc/A.pl
-lib/unicore/lib/Ccc/AR.pl
-lib/unicore/lib/Ccc/ATAR.pl
-lib/unicore/lib/Ccc/B.pl
-lib/unicore/lib/Ccc/BR.pl
-lib/unicore/lib/Ccc/DB.pl
-lib/unicore/lib/Ccc/NK.pl
-lib/unicore/lib/Ccc/NR.pl
-lib/unicore/lib/Ccc/OV.pl
-lib/unicore/lib/Ccc/VR.pl
-lib/unicore/lib/CompEx/Y.pl
-lib/unicore/lib/DI/Y.pl
-lib/unicore/lib/Dash/Y.pl
-lib/unicore/lib/Dep/Y.pl
-lib/unicore/lib/Dia/Y.pl
-lib/unicore/lib/Dt/Com.pl
-lib/unicore/lib/Dt/Enc.pl
-lib/unicore/lib/Dt/Fin.pl
-lib/unicore/lib/Dt/Font.pl
-lib/unicore/lib/Dt/Init.pl
-lib/unicore/lib/Dt/Iso.pl
-lib/unicore/lib/Dt/Med.pl
-lib/unicore/lib/Dt/Nar.pl
-lib/unicore/lib/Dt/Nb.pl
-lib/unicore/lib/Dt/NonCanon.pl
-lib/unicore/lib/Dt/Sqr.pl
-lib/unicore/lib/Dt/Sub.pl
-lib/unicore/lib/Dt/Sup.pl
-lib/unicore/lib/Dt/Vert.pl
-lib/unicore/lib/Ea/A.pl
-lib/unicore/lib/Ea/H.pl
-lib/unicore/lib/Ea/N.pl
-lib/unicore/lib/Ea/Na.pl
-lib/unicore/lib/Ea/W.pl
-lib/unicore/lib/Ext/Y.pl
-lib/unicore/lib/GCB/CN.pl
-lib/unicore/lib/GCB/EX.pl
-lib/unicore/lib/GCB/LV.pl
-lib/unicore/lib/GCB/LVT.pl
-lib/unicore/lib/GCB/SM.pl
-lib/unicore/lib/GCB/XX.pl
-lib/unicore/lib/Gc/C.pl
-lib/unicore/lib/Gc/Cf.pl
-lib/unicore/lib/Gc/Cn.pl
-lib/unicore/lib/Gc/L.pl
-lib/unicore/lib/Gc/LC.pl
-lib/unicore/lib/Gc/Ll.pl
-lib/unicore/lib/Gc/Lm.pl
-lib/unicore/lib/Gc/Lo.pl
-lib/unicore/lib/Gc/Lu.pl
-lib/unicore/lib/Gc/M.pl
-lib/unicore/lib/Gc/Mc.pl
-lib/unicore/lib/Gc/Me.pl
-lib/unicore/lib/Gc/Mn.pl
-lib/unicore/lib/Gc/N.pl
-lib/unicore/lib/Gc/Nd.pl
-lib/unicore/lib/Gc/Nl.pl
-lib/unicore/lib/Gc/No.pl
-lib/unicore/lib/Gc/P.pl
-lib/unicore/lib/Gc/Pd.pl
-lib/unicore/lib/Gc/Pe.pl
-lib/unicore/lib/Gc/Pf.pl
-lib/unicore/lib/Gc/Pi.pl
-lib/unicore/lib/Gc/Po.pl
-lib/unicore/lib/Gc/Ps.pl
-lib/unicore/lib/Gc/S.pl
-lib/unicore/lib/Gc/Sc.pl
-lib/unicore/lib/Gc/Sk.pl
-lib/unicore/lib/Gc/Sm.pl
-lib/unicore/lib/Gc/So.pl
-lib/unicore/lib/Gc/Z.pl
-lib/unicore/lib/Gc/Zs.pl
-lib/unicore/lib/GrBase/Y.pl
-lib/unicore/lib/Hex/Y.pl
-lib/unicore/lib/Hst/NA.pl
-lib/unicore/lib/Hyphen/T.pl
-lib/unicore/lib/IDC/Y.pl
-lib/unicore/lib/IDS/Y.pl
-lib/unicore/lib/Ideo/Y.pl
-lib/unicore/lib/In/2_0.pl
-lib/unicore/lib/In/2_1.pl
-lib/unicore/lib/In/3_0.pl
-lib/unicore/lib/In/3_1.pl
-lib/unicore/lib/In/3_2.pl
-lib/unicore/lib/In/4_0.pl
-lib/unicore/lib/In/4_1.pl
-lib/unicore/lib/In/5_0.pl
-lib/unicore/lib/In/5_1.pl
-lib/unicore/lib/In/5_2.pl
-lib/unicore/lib/In/6_0.pl
-lib/unicore/lib/In/6_1.pl
-lib/unicore/lib/In/6_2.pl
-lib/unicore/lib/In/6_3.pl
-lib/unicore/lib/In/7_0.pl
-lib/unicore/lib/In/8_0.pl
-lib/unicore/lib/InPC/Bottom.pl
-lib/unicore/lib/InPC/Left.pl
-lib/unicore/lib/InPC/LeftAndR.pl
-lib/unicore/lib/InPC/NA.pl
-lib/unicore/lib/InPC/Overstru.pl
-lib/unicore/lib/InPC/Right.pl
-lib/unicore/lib/InPC/Top.pl
-lib/unicore/lib/InPC/TopAndBo.pl
-lib/unicore/lib/InPC/TopAndL2.pl
-lib/unicore/lib/InPC/TopAndLe.pl
-lib/unicore/lib/InPC/TopAndRi.pl
-lib/unicore/lib/InPC/VisualOr.pl
-lib/unicore/lib/InSC/Avagraha.pl
-lib/unicore/lib/InSC/Bindu.pl
-lib/unicore/lib/InSC/Cantilla.pl
-lib/unicore/lib/InSC/Consona2.pl
-lib/unicore/lib/InSC/Consona3.pl
-lib/unicore/lib/InSC/Consona4.pl
-lib/unicore/lib/InSC/Consona5.pl
-lib/unicore/lib/InSC/Consona6.pl
-lib/unicore/lib/InSC/Consonan.pl
-lib/unicore/lib/InSC/Invisibl.pl
-lib/unicore/lib/InSC/Nukta.pl
-lib/unicore/lib/InSC/Number.pl
-lib/unicore/lib/InSC/Other.pl
-lib/unicore/lib/InSC/PureKill.pl
-lib/unicore/lib/InSC/Syllable.pl
-lib/unicore/lib/InSC/ToneMark.pl
-lib/unicore/lib/InSC/Virama.pl
-lib/unicore/lib/InSC/Visarga.pl
-lib/unicore/lib/InSC/Vowel.pl
-lib/unicore/lib/InSC/VowelDep.pl
-lib/unicore/lib/InSC/VowelInd.pl
-lib/unicore/lib/Jg/Ain.pl
-lib/unicore/lib/Jg/Alef.pl
-lib/unicore/lib/Jg/Beh.pl
-lib/unicore/lib/Jg/Dal.pl
-lib/unicore/lib/Jg/FarsiYeh.pl
-lib/unicore/lib/Jg/Feh.pl
-lib/unicore/lib/Jg/Gaf.pl
-lib/unicore/lib/Jg/Hah.pl
-lib/unicore/lib/Jg/Kaf.pl
-lib/unicore/lib/Jg/Lam.pl
-lib/unicore/lib/Jg/NoJoinin.pl
-lib/unicore/lib/Jg/Qaf.pl
-lib/unicore/lib/Jg/Reh.pl
-lib/unicore/lib/Jg/Sad.pl
-lib/unicore/lib/Jg/Seen.pl
-lib/unicore/lib/Jg/Waw.pl
-lib/unicore/lib/Jg/Yeh.pl
-lib/unicore/lib/Jt/C.pl
-lib/unicore/lib/Jt/D.pl
-lib/unicore/lib/Jt/R.pl
-lib/unicore/lib/Jt/T.pl
-lib/unicore/lib/Jt/U.pl
-lib/unicore/lib/Lb/AI.pl
-lib/unicore/lib/Lb/AL.pl
-lib/unicore/lib/Lb/BA.pl
-lib/unicore/lib/Lb/BB.pl
-lib/unicore/lib/Lb/CJ.pl
-lib/unicore/lib/Lb/CL.pl
-lib/unicore/lib/Lb/CM.pl
-lib/unicore/lib/Lb/EX.pl
-lib/unicore/lib/Lb/GL.pl
-lib/unicore/lib/Lb/ID.pl
-lib/unicore/lib/Lb/IN.pl
-lib/unicore/lib/Lb/IS.pl
-lib/unicore/lib/Lb/NS.pl
-lib/unicore/lib/Lb/OP.pl
-lib/unicore/lib/Lb/PO.pl
-lib/unicore/lib/Lb/PR.pl
-lib/unicore/lib/Lb/QU.pl
-lib/unicore/lib/Lb/SA.pl
-lib/unicore/lib/Lb/XX.pl
-lib/unicore/lib/Lower/Y.pl
-lib/unicore/lib/Math/Y.pl
-lib/unicore/lib/NFCQC/M.pl
-lib/unicore/lib/NFCQC/Y.pl
-lib/unicore/lib/NFDQC/N.pl
-lib/unicore/lib/NFDQC/Y.pl
-lib/unicore/lib/NFKCQC/N.pl
-lib/unicore/lib/NFKCQC/Y.pl
-lib/unicore/lib/NFKDQC/N.pl
-lib/unicore/lib/NFKDQC/Y.pl
-lib/unicore/lib/Nt/Di.pl
-lib/unicore/lib/Nt/None.pl
-lib/unicore/lib/Nt/Nu.pl
-lib/unicore/lib/Nv/0.pl
-lib/unicore/lib/Nv/1.pl
-lib/unicore/lib/Nv/10.pl
-lib/unicore/lib/Nv/100.pl
-lib/unicore/lib/Nv/1000.pl
-lib/unicore/lib/Nv/10000.pl
-lib/unicore/lib/Nv/11.pl
-lib/unicore/lib/Nv/12.pl
-lib/unicore/lib/Nv/13.pl
-lib/unicore/lib/Nv/14.pl
-lib/unicore/lib/Nv/15.pl
-lib/unicore/lib/Nv/16.pl
-lib/unicore/lib/Nv/17.pl
-lib/unicore/lib/Nv/18.pl
-lib/unicore/lib/Nv/19.pl
-lib/unicore/lib/Nv/1_2.pl
-lib/unicore/lib/Nv/1_3.pl
-lib/unicore/lib/Nv/1_4.pl
-lib/unicore/lib/Nv/1_8.pl
-lib/unicore/lib/Nv/2.pl
-lib/unicore/lib/Nv/20.pl
-lib/unicore/lib/Nv/200.pl
-lib/unicore/lib/Nv/2_3.pl
-lib/unicore/lib/Nv/3.pl
-lib/unicore/lib/Nv/30.pl
-lib/unicore/lib/Nv/300.pl
-lib/unicore/lib/Nv/3_4.pl
-lib/unicore/lib/Nv/4.pl
-lib/unicore/lib/Nv/40.pl
-lib/unicore/lib/Nv/400.pl
-lib/unicore/lib/Nv/5.pl
-lib/unicore/lib/Nv/50.pl
-lib/unicore/lib/Nv/500.pl
-lib/unicore/lib/Nv/5000.pl
-lib/unicore/lib/Nv/50000.pl
-lib/unicore/lib/Nv/6.pl
-lib/unicore/lib/Nv/60.pl
-lib/unicore/lib/Nv/600.pl
-lib/unicore/lib/Nv/7.pl
-lib/unicore/lib/Nv/70.pl
-lib/unicore/lib/Nv/700.pl
-lib/unicore/lib/Nv/8.pl
-lib/unicore/lib/Nv/80.pl
-lib/unicore/lib/Nv/800.pl
-lib/unicore/lib/Nv/9.pl
-lib/unicore/lib/Nv/90.pl
-lib/unicore/lib/Nv/900.pl
-lib/unicore/lib/PatSyn/Y.pl
-lib/unicore/lib/Perl/Alnum.pl
-lib/unicore/lib/Perl/Assigned.pl
-lib/unicore/lib/Perl/Blank.pl
-lib/unicore/lib/Perl/Graph.pl
-lib/unicore/lib/Perl/PerlWord.pl
-lib/unicore/lib/Perl/PosixPun.pl
-lib/unicore/lib/Perl/Print.pl
-lib/unicore/lib/Perl/SpacePer.pl
-lib/unicore/lib/Perl/Title.pl
-lib/unicore/lib/Perl/Word.pl
-lib/unicore/lib/Perl/XPosixPu.pl
-lib/unicore/lib/Perl/_PerlAny.pl
-lib/unicore/lib/Perl/_PerlCh2.pl
-lib/unicore/lib/Perl/_PerlCha.pl
-lib/unicore/lib/Perl/_PerlFol.pl
-lib/unicore/lib/Perl/_PerlIDC.pl
-lib/unicore/lib/Perl/_PerlIDS.pl
-lib/unicore/lib/Perl/_PerlNch.pl
-lib/unicore/lib/Perl/_PerlPat.pl
-lib/unicore/lib/Perl/_PerlPr2.pl
-lib/unicore/lib/Perl/_PerlPro.pl
-lib/unicore/lib/Perl/_PerlQuo.pl
-lib/unicore/lib/QMark/Y.pl
-lib/unicore/lib/SB/AT.pl
-lib/unicore/lib/SB/CL.pl
-lib/unicore/lib/SB/EX.pl
-lib/unicore/lib/SB/FO.pl
-lib/unicore/lib/SB/LE.pl
-lib/unicore/lib/SB/LO.pl
-lib/unicore/lib/SB/NU.pl
-lib/unicore/lib/SB/SC.pl
-lib/unicore/lib/SB/ST.pl
-lib/unicore/lib/SB/Sp.pl
-lib/unicore/lib/SB/UP.pl
-lib/unicore/lib/SB/XX.pl
-lib/unicore/lib/SD/Y.pl
-lib/unicore/lib/STerm/Y.pl
-lib/unicore/lib/Sc/Arab.pl
-lib/unicore/lib/Sc/Armn.pl
-lib/unicore/lib/Sc/Beng.pl
-lib/unicore/lib/Sc/Cham.pl
-lib/unicore/lib/Sc/Cprt.pl
-lib/unicore/lib/Sc/Cyrl.pl
-lib/unicore/lib/Sc/Deva.pl
-lib/unicore/lib/Sc/Dupl.pl
-lib/unicore/lib/Sc/Ethi.pl
-lib/unicore/lib/Sc/Geor.pl
-lib/unicore/lib/Sc/Gran.pl
-lib/unicore/lib/Sc/Grek.pl
-lib/unicore/lib/Sc/Gujr.pl
-lib/unicore/lib/Sc/Guru.pl
-lib/unicore/lib/Sc/Han.pl
-lib/unicore/lib/Sc/Hang.pl
-lib/unicore/lib/Sc/Hebr.pl
-lib/unicore/lib/Sc/Hira.pl
-lib/unicore/lib/Sc/Hmng.pl
-lib/unicore/lib/Sc/Kana.pl
-lib/unicore/lib/Sc/Khar.pl
-lib/unicore/lib/Sc/Khmr.pl
-lib/unicore/lib/Sc/Knda.pl
-lib/unicore/lib/Sc/Lana.pl
-lib/unicore/lib/Sc/Lao.pl
-lib/unicore/lib/Sc/Latn.pl
-lib/unicore/lib/Sc/Limb.pl
-lib/unicore/lib/Sc/Linb.pl
-lib/unicore/lib/Sc/Mlym.pl
-lib/unicore/lib/Sc/Mong.pl
-lib/unicore/lib/Sc/Mult.pl
-lib/unicore/lib/Sc/Orya.pl
-lib/unicore/lib/Sc/Sinh.pl
-lib/unicore/lib/Sc/Talu.pl
-lib/unicore/lib/Sc/Taml.pl
-lib/unicore/lib/Sc/Telu.pl
-lib/unicore/lib/Sc/Tibt.pl
-lib/unicore/lib/Sc/Xsux.pl
-lib/unicore/lib/Sc/Zinh.pl
-lib/unicore/lib/Sc/Zyyy.pl
-lib/unicore/lib/Sc/Zzzz.pl
-lib/unicore/lib/Scx/Arab.pl
-lib/unicore/lib/Scx/Armn.pl
-lib/unicore/lib/Scx/Beng.pl
-lib/unicore/lib/Scx/Bopo.pl
-lib/unicore/lib/Scx/Cakm.pl
-lib/unicore/lib/Scx/Copt.pl
-lib/unicore/lib/Scx/Cprt.pl
-lib/unicore/lib/Scx/Cyrl.pl
-lib/unicore/lib/Scx/Deva.pl
-lib/unicore/lib/Scx/Dupl.pl
-lib/unicore/lib/Scx/Geor.pl
-lib/unicore/lib/Scx/Glag.pl
-lib/unicore/lib/Scx/Gran.pl
-lib/unicore/lib/Scx/Grek.pl
-lib/unicore/lib/Scx/Gujr.pl
-lib/unicore/lib/Scx/Guru.pl
-lib/unicore/lib/Scx/Han.pl
-lib/unicore/lib/Scx/Hang.pl
-lib/unicore/lib/Scx/Hira.pl
-lib/unicore/lib/Scx/Kana.pl
-lib/unicore/lib/Scx/Knda.pl
-lib/unicore/lib/Scx/Latn.pl
-lib/unicore/lib/Scx/Limb.pl
-lib/unicore/lib/Scx/Linb.pl
-lib/unicore/lib/Scx/Mlym.pl
-lib/unicore/lib/Scx/Mong.pl
-lib/unicore/lib/Scx/Mult.pl
-lib/unicore/lib/Scx/Mymr.pl
-lib/unicore/lib/Scx/Orya.pl
-lib/unicore/lib/Scx/Phlp.pl
-lib/unicore/lib/Scx/Shrd.pl
-lib/unicore/lib/Scx/Sind.pl
-lib/unicore/lib/Scx/Sinh.pl
-lib/unicore/lib/Scx/Syrc.pl
-lib/unicore/lib/Scx/Tagb.pl
-lib/unicore/lib/Scx/Takr.pl
-lib/unicore/lib/Scx/Taml.pl
-lib/unicore/lib/Scx/Telu.pl
-lib/unicore/lib/Scx/Thaa.pl
-lib/unicore/lib/Scx/Tirh.pl
-lib/unicore/lib/Scx/Yi.pl
-lib/unicore/lib/Scx/Zinh.pl
-lib/unicore/lib/Scx/Zyyy.pl
-lib/unicore/lib/Term/Y.pl
-lib/unicore/lib/UIdeo/Y.pl
-lib/unicore/lib/Upper/Y.pl
-lib/unicore/lib/WB/EX.pl
-lib/unicore/lib/WB/FO.pl
-lib/unicore/lib/WB/HL.pl
-lib/unicore/lib/WB/KA.pl
-lib/unicore/lib/WB/LE.pl
-lib/unicore/lib/WB/MB.pl
-lib/unicore/lib/WB/ML.pl
-lib/unicore/lib/WB/MN.pl
-lib/unicore/lib/WB/NU.pl
-lib/unicore/lib/WB/XX.pl
-lib/unicore/lib/XIDC/Y.pl
-lib/unicore/lib/XIDS/Y.pl
-lib/unicore/version
-lib/utf8.pm
-lib/utf8_heavy.pl
-lib/vars.pm
-lib/warnings.pm
-lib/warnings/register.pm
-libgcc_s_seh-1.dll
-libglut-0__.dll
-libstdc++-6.dll
-libwinpthread-1.dll
-local-lib/bin/cpanm
-local-lib/bin/cpanm.bat
-local-lib/bin/enc2xs
-local-lib/bin/enc2xs.bat
-local-lib/bin/encguess
-local-lib/bin/encguess.bat
-local-lib/bin/instmodsh
-local-lib/bin/instmodsh.bat
-local-lib/bin/lwp-download
-local-lib/bin/lwp-download.bat
-local-lib/bin/lwp-dump
-local-lib/bin/lwp-dump.bat
-local-lib/bin/lwp-mirror
-local-lib/bin/lwp-mirror.bat
-local-lib/bin/lwp-request
-local-lib/bin/lwp-request.bat
-local-lib/bin/piconv
-local-lib/bin/piconv.bat
-local-lib/bin/prove
-local-lib/bin/prove.bat
-local-lib/bin/scandeps.bat
-local-lib/bin/scandeps.pl
-local-lib/bin/use-devel-checklib
-local-lib/bin/use-devel-checklib.bat
-local-lib/bin/wxperl_overload
-local-lib/bin/wxperl_overload.bat
-local-lib/bin/xspp
-local-lib/bin/xspp.bat
-local-lib/bin/xsubpp
-local-lib/bin/xsubpp.bat
-local-lib/lib/perl5/App/Prove.pm
-local-lib/lib/perl5/App/Prove/State.pm
-local-lib/lib/perl5/App/Prove/State/Result.pm
-local-lib/lib/perl5/App/Prove/State/Result/Test.pm
-local-lib/lib/perl5/App/cpanminus.pm
-local-lib/lib/perl5/App/cpanminus/fatscript.pm
-local-lib/lib/perl5/Crypt/CBC.pm
-local-lib/lib/perl5/Devel/CheckLib.pm
-local-lib/lib/perl5/Digest/HMAC.pm
-local-lib/lib/perl5/Digest/HMAC_MD5.pm
-local-lib/lib/perl5/Digest/HMAC_SHA1.pm
-local-lib/lib/perl5/ExtUtils/Command.pm
-local-lib/lib/perl5/ExtUtils/Command/MM.pm
-local-lib/lib/perl5/ExtUtils/CppGuess.pm
-local-lib/lib/perl5/ExtUtils/Install.pm
-local-lib/lib/perl5/ExtUtils/Installed.pm
-local-lib/lib/perl5/ExtUtils/Liblist.pm
-local-lib/lib/perl5/ExtUtils/Liblist/Kid.pm
-local-lib/lib/perl5/ExtUtils/MM.pm
-local-lib/lib/perl5/ExtUtils/MM_AIX.pm
-local-lib/lib/perl5/ExtUtils/MM_Any.pm
-local-lib/lib/perl5/ExtUtils/MM_BeOS.pm
-local-lib/lib/perl5/ExtUtils/MM_Cygwin.pm
-local-lib/lib/perl5/ExtUtils/MM_DOS.pm
-local-lib/lib/perl5/ExtUtils/MM_Darwin.pm
-local-lib/lib/perl5/ExtUtils/MM_MacOS.pm
-local-lib/lib/perl5/ExtUtils/MM_NW5.pm
-local-lib/lib/perl5/ExtUtils/MM_OS2.pm
-local-lib/lib/perl5/ExtUtils/MM_QNX.pm
-local-lib/lib/perl5/ExtUtils/MM_UWIN.pm
-local-lib/lib/perl5/ExtUtils/MM_Unix.pm
-local-lib/lib/perl5/ExtUtils/MM_VMS.pm
-local-lib/lib/perl5/ExtUtils/MM_VOS.pm
-local-lib/lib/perl5/ExtUtils/MM_Win32.pm
-local-lib/lib/perl5/ExtUtils/MM_Win95.pm
-local-lib/lib/perl5/ExtUtils/MY.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker/Config.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker/FAQ.pod
-local-lib/lib/perl5/ExtUtils/MakeMaker/Locale.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker/Tutorial.pod
-local-lib/lib/perl5/ExtUtils/MakeMaker/version.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker/version/regex.pm
-local-lib/lib/perl5/ExtUtils/MakeMaker/version/vpp.pm
-local-lib/lib/perl5/ExtUtils/Mkbootstrap.pm
-local-lib/lib/perl5/ExtUtils/Mksymlists.pm
-local-lib/lib/perl5/ExtUtils/Packlist.pm
-local-lib/lib/perl5/ExtUtils/ParseXS.pm
-local-lib/lib/perl5/ExtUtils/ParseXS.pod
-local-lib/lib/perl5/ExtUtils/ParseXS/Constants.pm
-local-lib/lib/perl5/ExtUtils/ParseXS/CountLines.pm
-local-lib/lib/perl5/ExtUtils/ParseXS/Eval.pm
-local-lib/lib/perl5/ExtUtils/ParseXS/Utilities.pm
-local-lib/lib/perl5/ExtUtils/Typemap/Basic.pm
-local-lib/lib/perl5/ExtUtils/Typemap/Default.pm
-local-lib/lib/perl5/ExtUtils/Typemap/ObjectMap.pm
-local-lib/lib/perl5/ExtUtils/Typemap/STL.pm
-local-lib/lib/perl5/ExtUtils/Typemap/STL/String.pm
-local-lib/lib/perl5/ExtUtils/Typemap/STL/Vector.pm
-local-lib/lib/perl5/ExtUtils/Typemaps.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/Basic.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/Cmd.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/Default.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/InputMap.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/ObjectMap.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/OutputMap.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/STL.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/STL/List.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/STL/String.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/STL/Vector.pm
-local-lib/lib/perl5/ExtUtils/Typemaps/Type.pm
-local-lib/lib/perl5/ExtUtils/XSpp.pm
-local-lib/lib/perl5/ExtUtils/XSpp.pod
-local-lib/lib/perl5/ExtUtils/XSpp/Cmd.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Driver.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/code.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/object.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/perlcode.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/simple.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/stdmessage.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Exception/unknown.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Grammar.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Lexer.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Access.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Argument.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Class.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Comment.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Constructor.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Destructor.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Enum.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/EnumValue.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/File.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Function.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Member.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Method.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Module.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Package.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/PercAny.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Preprocessor.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Raw.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Node/Type.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Parser.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Plugin.pod
-local-lib/lib/perl5/ExtUtils/XSpp/Plugin/feature/default_xs_typemap.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Typemap.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Typemap/parsed.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Typemap/reference.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Typemap/simple.pm
-local-lib/lib/perl5/ExtUtils/XSpp/Typemap/wrapper.pm
-local-lib/lib/perl5/ExtUtils/testlib.pm
-local-lib/lib/perl5/ExtUtils/xsubpp
-local-lib/lib/perl5/Getopt/ArgvFile.pm
-local-lib/lib/perl5/Getopt/Long.pm
-local-lib/lib/perl5/Growl/GNTP.pm
-local-lib/lib/perl5/IO/AtomicFile.pm
-local-lib/lib/perl5/IO/CaptureOutput.pm
-local-lib/lib/perl5/IO/InnerFile.pm
-local-lib/lib/perl5/IO/Lines.pm
-local-lib/lib/perl5/IO/Scalar.pm
-local-lib/lib/perl5/IO/ScalarArray.pm
-local-lib/lib/perl5/IO/Stringy.pm
-local-lib/lib/perl5/IO/Wrap.pm
-local-lib/lib/perl5/IO/WrapTie.pm
-local-lib/lib/perl5/LWP.pm
-local-lib/lib/perl5/LWP/Authen/Basic.pm
-local-lib/lib/perl5/LWP/Authen/Digest.pm
-local-lib/lib/perl5/LWP/Authen/Ntlm.pm
-local-lib/lib/perl5/LWP/ConnCache.pm
-local-lib/lib/perl5/LWP/Debug.pm
-local-lib/lib/perl5/LWP/Debug/TraceHTTP.pm
-local-lib/lib/perl5/LWP/DebugFile.pm
-local-lib/lib/perl5/LWP/MemberMixin.pm
-local-lib/lib/perl5/LWP/Protocol.pm
-local-lib/lib/perl5/LWP/Protocol/cpan.pm
-local-lib/lib/perl5/LWP/Protocol/data.pm
-local-lib/lib/perl5/LWP/Protocol/file.pm
-local-lib/lib/perl5/LWP/Protocol/ftp.pm
-local-lib/lib/perl5/LWP/Protocol/gopher.pm
-local-lib/lib/perl5/LWP/Protocol/http.pm
-local-lib/lib/perl5/LWP/Protocol/loopback.pm
-local-lib/lib/perl5/LWP/Protocol/mailto.pm
-local-lib/lib/perl5/LWP/Protocol/nntp.pm
-local-lib/lib/perl5/LWP/Protocol/nogo.pm
-local-lib/lib/perl5/LWP/RobotUA.pm
-local-lib/lib/perl5/LWP/Simple.pm
-local-lib/lib/perl5/LWP/UserAgent.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/App-cpanminus-1.7043/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/App-cpanminus-1.7043/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/App-cpanminus-1.7044/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/App-cpanminus-1.7044/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Crypt-CBC-2.33/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Crypt-CBC-2.33/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Data-UUID-1.221/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Data-UUID-1.221/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.09/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.09/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.10/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.10/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Devel-CheckLib-1.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Digest-HMAC-1.03/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Digest-HMAC-1.03/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Encode-2.89/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Encode-2.89/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Encode-2.98/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Encode-2.98/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-CppGuess-0.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-CppGuess-0.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-CppGuess-0.12/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-CppGuess-0.12/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-MakeMaker-7.34/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-MakeMaker-7.34/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-ParseXS-3.30/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-ParseXS-3.30/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-ParseXS-3.35/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-ParseXS-3.35/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-Typemaps-Default-1.05/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-Typemaps-Default-1.05/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-XSpp-0.18/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/ExtUtils-XSpp-0.18/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Getopt-ArgvFile-1.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Getopt-ArgvFile-1.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Getopt-Long-2.50/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Getopt-Long-2.50/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Growl-GNTP-0.21/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Growl-GNTP-0.21/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/IO-CaptureOutput-1.1104/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/IO-CaptureOutput-1.1104/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/IO-stringy-2.111/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/IO-stringy-2.111/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Mock-Config-0.03/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Mock-Config-0.03/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Module-Build-WithXSpp-0.14/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Module-Build-WithXSpp-0.14/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Module-ScanDeps-1.23/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Module-ScanDeps-1.23/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Moo-2.003002/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Moo-2.003002/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Moo-2.003004/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Moo-2.003004/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Net-Bonjour-0.96/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Net-Bonjour-0.96/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Net-DNS-1.09/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Net-DNS-1.09/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PAR-1.014/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PAR-1.014/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PAR-Dist-0.49/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PAR-Dist-0.49/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Parse-Binary-0.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Parse-Binary-0.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PathTools-3.74/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/PathTools-3.74/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Scalar-List-Utils-1.50/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Scalar-List-Utils-1.50/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Differences-0.64/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Differences-0.64/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Harness-3.39/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Harness-3.39/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Harness-3.42/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Harness-3.42/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302078/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302078/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302083/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302083/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302085/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302085/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302136/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Test-Simple-1.302136/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Time-HiRes-1.9742/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Time-HiRes-1.9742/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Time-HiRes-1.9758/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Time-HiRes-1.9758/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Win32-IPHelper-0.08/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Win32-IPHelper-0.08/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Wx-GLCanvas-0.09/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/Wx-GLCanvas-0.09/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-NamespaceSupport-1.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-NamespaceSupport-1.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-SAX-0.99/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-SAX-0.99/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-SAX-Base-1.08/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/XML-SAX-Base-1.08/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/enum-1.11/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/enum-1.11/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/libwww-perl-6.26/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/libwww-perl-6.26/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/threads-2.21/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/threads-2.21/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/threads-shared-1.58/MYMETA.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/.meta/threads-shared-1.58/install.json
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/Config/msw_3_1_0_uni_gcc_3_4.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/Utility.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aboutdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/accel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/access.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/activityindicator.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/addremovectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/affinematrix2d.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/affinematrix2dbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/afterstd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/android/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/android/config_android.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/android/setup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/anidecod.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/animate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/animdecod.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/any.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/anybutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/anystr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/app.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/appprogress.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/apptrait.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/archive.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/arrimpl.cpp
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/arrstr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/artprov.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/atomic.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/aui.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/auibar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/auibook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/barartmsw.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/dockart.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/floatpane.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/framemanager.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/tabart.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/tabartgtk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/tabartmsw.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/aui/tabmdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/bannerwindow.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/base64.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/beforestd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/bitmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/bmpbuttn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/bmpcbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/bookctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/brush.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/buffer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/build.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/busyinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/button.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/calctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/caret.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/chartype.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/checkbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/checkeddelete.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/checklst.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/choicdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/choice.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/choicebk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/clipbrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/clntdata.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/clrpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cmdargs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cmdline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cmdproc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cmndata.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/collheaderctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/collpane.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/colordlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/colourdata.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/combo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/combobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/commandlinkbutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/compiler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/compositewin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/confbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/config.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/containr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/control.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/convauto.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cpp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cppunit.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/crt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cshelp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ctrlsub.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/cursor.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/custombgwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dataobj.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/datectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dateevt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/datetime.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/datetimectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/datstrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcbuffer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcclient.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcgraph.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcmemory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcmirror.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcps.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcscreen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dcsvg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dde.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/debug.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/debugrpt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/defs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dialog.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dialup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dir.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dirctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dirdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/display.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/display_impl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dlimpexp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dlist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/docmdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/docview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dragimag.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dvrenderers.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dynarray.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dynlib.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/dynload.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/editlbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/effects.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/encconv.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/encinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/event.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/eventfilter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/evtloopsrc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/except.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fdrepdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/features.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ffile.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/file.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fileconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filedlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filefn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filehistory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filename.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filepicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/filesys.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/flags.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fmappriv.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/font.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontdata.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontenc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontenum.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fontutil.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/frame.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fs_arc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fs_filter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fs_inet.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fs_mem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fs_zip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/fswatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/gauge.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/gbsizer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/gdicmn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/gdiobj.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/aboutdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/accel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/activityindicator.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/animate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/bmpcbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/busyinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/buttonbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/calctrlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/caret.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/choicdgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/clrpickerg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/collheaderctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/collpaneg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/colrdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/combo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/ctrlsub.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/custombgwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/datectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dcpsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dirctrlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dirdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dragimgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dvrenderer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/dvrenderers.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/fdrepdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/filectrlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/filedlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/filepickerg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/fontdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/fontpickerg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/fswatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/grid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/gridctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/grideditors.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/gridsel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/headerctrlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/helpext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/hyperlink.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/icon.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/imaglist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/infobar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/laywin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/logg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/mask.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/mdig.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/msgdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/notebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/notifmsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/numdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/paletteg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/panelg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/printps.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/addremovectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/grid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/markuptext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/notifmsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/richtooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/textmeasure.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/private/widthcalc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/prntdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/progdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/propdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/richmsgdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/sashwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/scrolwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/spinctlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/splash.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/splitter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/srchctlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/statbmpg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/statline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/stattextg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/statusbr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/tabg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/textdlgg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/timectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/treectlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/generic/wizard.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/geometry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/gifdecod.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/glcanvas.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/graphics.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/grid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/hash.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/hashmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/hashset.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/headercol.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/headerctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/help.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/helpbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/helphtml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/helpwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/forcelnk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/helpctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/helpdata.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/helpdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/helpfrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/helpwnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmlcell.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmldefs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmlfilt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmlpars.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmlproc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmltag.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmlwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/htmprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/m_templ.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/styleparams.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/webkit.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/html/winpars.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/htmllbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/hyperlink.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/icon.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/iconbndl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/iconloc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/image.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imaggif.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagiff.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagjpeg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imaglist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagpcx.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagpng.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagpnm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagtga.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagtiff.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/imagxpm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/infobar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/init.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/intl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/iosfwrap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ioswrap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ipc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ipcbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/itemid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/joystick.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/kbdstate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/language.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/layout.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/laywin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/link.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/list.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/listbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/listbook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/listbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/listimpl.cpp
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/log.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/longlong.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/math.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/matrix.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mediactrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/memconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/memory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/memtext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/menu.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/menuitem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/convertible.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/if.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/implicitconversion.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/int2type.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/movable.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/pod.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/meta/removeref.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/metafile.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mimetype.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/minifram.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/modalhook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/module.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mousemanager.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mousestate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msgout.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msgqueue.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/mstream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/accel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/amd64.manifest
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/anybutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/app.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/appprogress.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/apptbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/apptrait.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/bitmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/blank.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/bmpbuttn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/bmpcbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/brush.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/bullseye.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/button.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/calctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/caret.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/cdrom.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/checkbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/checklst.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/child.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/choice.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/clipbrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/colordlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/colours.bmp
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/combo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/combobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/commandlinkbutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/computer.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/control.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/crashrpt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/cross.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/csquery.bmp
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ctrlsub.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/cursor.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/custombgwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/datectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/datetimectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dcclient.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dcmemory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dcprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dcscreen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dde.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/debughlp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dialog.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dib.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dirdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/dragimag.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/drive.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/enhmeta.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/evtloopconsole.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/fdrepdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/file1.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/filedlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/floppy.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/folder1.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/folder2.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/font.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/fontdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/frame.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/fswatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/gauge.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/gccpriv.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/gdiimage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/genrcdefs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/glcanvas.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/hand.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/headerctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/helpbest.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/helpchm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/helpwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/htmlhelp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/hyperlink.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ia64.manifest
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/icon.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/imaglist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/iniconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/init.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/joystick.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/libraries.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/listbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/magnif1.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/mdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/mdi.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/menu.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/menuitem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/metafile.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/mimetype.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/minifram.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/missing.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/msgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/msvcrt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/nonownedwnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/notebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/access.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/activex.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/automtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/dataform.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/dataobj.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/dataobj2.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/dropsrc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/droptgt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/oleutils.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/safearray.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ole/uuid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ownerdrawnbutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/ownerdrw.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/palette.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/panel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/pbrush.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/pen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/pencil.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/pntleft.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/pntright.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/popupwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/printdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/printwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/button.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/comptr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/datecontrols.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/dc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/event.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/fswatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/hiddenwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/keyboard.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/metrics.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/msgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/pipestream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/sockmsw.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/textmeasure.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/private/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/progdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/question.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/radiobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/radiobut.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/rcdefs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/regconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/registry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/removble.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/richmsgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/roller.cur
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/rt/private/notifmsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/rt/utils.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/scrolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/seh.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/setup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/setup_inc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/slider.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/sound.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/spinbutt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/spinctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/stackwalk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/statbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/statbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/statline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/stattext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/statusbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/std.ico
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/stdpaths.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/subwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/taskbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/taskbarbutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/textctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/textentry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/tglbtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/timectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/tls.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/toolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/tooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/toplevel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/treectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/uxtheme.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/uxthemep.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/webview_ie.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/webview_missing.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/webviewhistoryitem_ie.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/winundef.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wrapcctl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wrapcdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wrapgdip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wrapshl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wrapwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wx.manifest
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/msw/wx.rc
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/nativewin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/nonownedwnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/notebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/notifmsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/numdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/numformatter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/object.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/odcombo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/accel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/activityindicator.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/anybutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/app.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/appprogress.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/bitmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/bmpbuttn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/brush.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/button.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/carbon/private/overlay.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/carbon/private/print.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/carbon/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/checkbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/checklst.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/choice.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/clipbrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/private/date.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/private/markuptoattr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/private/overlay.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/private/textimpl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cocoa/stdpaths.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/colordlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/combobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/config_xcode.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/control.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/cfdataref.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/cfref.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/cfstring.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/hid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/joystick.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/mimetype.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/objcid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/private/datetimectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/private/strconv_cf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/core/private/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/cursor.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dataform.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dataobj.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dataobj2.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/datectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/datetimectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dcclient.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dcmemory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dcprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dcscreen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dialog.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dirdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dvrenderer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/dvrenderers.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/evtloopsrc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/filedlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/font.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/fontdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/frame.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/fswatcher_fsevents.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/gauge.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/glcanvas.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/icon.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/imaglist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/iphone/chkconf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/iphone/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/iphone/private/textimpl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/joystick.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/listbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/mdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/menu.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/menuitem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/metafile.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/mimetype.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/minifram.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/msgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/nonownedwnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/notebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/palette.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/pen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/popupwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/printdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/printmac.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/private/addremovectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/private/print.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/private/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/radiobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/radiobut.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/scrolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/setup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/slider.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/sound.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/spinbutt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/srchctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/statbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/statbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/statline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/stattext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/statusbr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/taskbarosx.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/textctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/textentry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/tglbtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/timectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/toolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/tooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/toplevel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/uma.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/webview_webkit.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/webviewhistoryitem_webkit.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/osx/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/overlay.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ownerdrw.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/palette.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/panel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/paper.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/pen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist/bookctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist/splitter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist/toplevel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist/treebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/persist/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/pickerbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/platform.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/platinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/popupwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/position.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/power.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/preferences.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/print.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/printdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/addremovectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/eventloopsourcesmanager.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fdiodispatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fdioeventloopsourcehandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fdiohandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fdiomanager.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fileback.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/filename.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/flagscheck.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fontmgr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/fswatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/graphics.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/launchbrowser.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/markupparser.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/markupparserattr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/notifmsg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/overlay.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/pipestream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/preferences.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/richtooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/sckaddr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/selectdispatcher.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/socket.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/streamtempinput.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/textmeasure.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/threadinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/private/wxprintf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/prntbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/process.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/progdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/advprops.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/editors.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/manager.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/property.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/propgrid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/propgriddefs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/propgridiface.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/propgridpagestate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/propgrid/props.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/protocol/file.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/protocol/ftp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/protocol/http.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/protocol/log.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/protocol/protocol.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ptr_scpd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ptr_shrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/accel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/anybutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/app.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/bitmap.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/bmpbuttn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/brush.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/button.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/calctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/checkbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/checklst.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/choice.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/clipbrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/clrpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/colordlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/colour.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/combobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/control.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/ctrlsub.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/cursor.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dataform.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dataobj.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dataobj2.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dataview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dcclient.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dcmemory.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dcprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dcscreen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/defs.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dialog.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dirdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dnd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dvrenderer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/dvrenderers.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/evtloop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/filedlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/font.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/fontdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/frame.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/gauge.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/glcanvas.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/listbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/listctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/mdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/menu.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/menuitem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/minifram.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/msgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/notebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/palette.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/pen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/popupwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/printdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/printqt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/private/converter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/private/pointer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/private/utils.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/private/winevent.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/radiobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/radiobut.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/scrolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/slider.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/spinbutt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/spinctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/statbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/statbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/statline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/stattext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/statusbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/taskbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/textctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/textentry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/tglbtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/toolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/tooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/toplevel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/treectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/qt/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/quantize.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/radiobox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/radiobut.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/range.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/rawbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/rearrangectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/recguard.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/regex.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/region.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/renderer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/art.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/art_internal.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/bar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/buttonbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/control.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/gallery.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/page.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/panel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ribbon/toolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richmsgdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/bitmaps/image_placeholder24x24.xpm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextbackgroundpage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextborderspage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextbuffer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextbulletspage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextdialogpage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextfontpage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextformatdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtexthtml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextimagedlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextindentspage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextliststylepage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextmarginspage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextprint.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextsizepage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextstyledlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextstylepage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextstyles.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextsymboldlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtexttabspage.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextuicustomization.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtext/richtextxml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/richtooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/rtti.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sashwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sckaddr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sckipc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sckstrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/scopedarray.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/scopedptr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/scopeguard.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/scrolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/scrolwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/selstore.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/settings.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/setup_inc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/setup_redirect.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sharedptr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/simplebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sizer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/slider.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/snglinst.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/socket.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sound.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/spinbutt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/spinctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/splash.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/splitter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/srchctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sstream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stack.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stackwalk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/statbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/statbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/statline.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stattext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/statusbr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stc/private.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stc/stc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stdpaths.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stdstream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stockitem.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stopwatch.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/strconv.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/string.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stringimpl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/stringops.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/strvararg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/sysopt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/systhemectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tarstrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/taskbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/taskbarbutton.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tbarbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/testing.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textbuf.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textcompleter.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textentry.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textfile.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/textwrapper.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tglbtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/thread.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/thrimpl.cpp
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/time.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/timectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/timer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tipdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tipwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tls.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tokenzr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/toolbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/toolbook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tooltip.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/toplevel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/tracker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/translation.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/treebase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/treebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/treectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/treelist.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/txtstrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/typeinfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/types.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/uiaction.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/unichar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/uri.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/url.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/ustring.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/utils.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/valgen.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/validate.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/valnum.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/valtext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/variant.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/variantbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/vector.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/version.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/versioninfo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/vidmode.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/vlbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/vms_x_fix.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/volume.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/vscroll.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/weakref.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/webview.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/webviewarchivehandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/webviewfshandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wfstream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/window.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/windowid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/windowptr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/withimages.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wizard.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wrapsizer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wupdlock.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wx.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxchar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxcrt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxcrtbase.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxcrtvararg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxhtml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/wxprec.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xlocale.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xml/xml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xpmdecod.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xpmhand.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_activityindicator.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_all.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_animatctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_auinotbk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_auitoolb.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_bannerwindow.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_bmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_bmpbt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_bmpcbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_bttn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_cald.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_chckb.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_chckl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_choic.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_choicbk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_clrpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_cmdlinkbn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_collpane.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_combo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_comboctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_datectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_dirpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_dlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_editlbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_filectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_filepicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_fontpicker.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_frame.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_gauge.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_gdctl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_grid.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_html.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_htmllbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_hyperlink.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_listb.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_listbk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_listc.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_mdi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_menu.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_notbk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_odcombo.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_panel.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_propdlg.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_radbt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_radbx.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_ribbon.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_richtext.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_scrol.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_scwin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_simplebook.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_sizer.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_slidr.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_spin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_split.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_srchctrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_statbar.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_stbmp.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_stbox.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_stlin.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_sttxt.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_text.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_tglbtn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_timectrl.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_toolb.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_toolbk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_tree.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_treebk.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_unkwn.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xh_wizrd.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xmlres.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xrc/xmlreshandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xti.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xti2.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtictor.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtihandler.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtiprop.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtistrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtitypes.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/xtixml.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/zipstrm.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/include/wx/zstream.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/build.cfg
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libgcc_s_seh-1.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libstdc++-6.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxbase31u.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxbase31u_net.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxbase31u_xml.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxexpat.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxjpeg.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_adv.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_aui.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_core.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_gl.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_html.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_media.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_propgrid.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_ribbon.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_richtext.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_stc.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_webview.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxmsw31u_xrc.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxpng.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxregexu.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxtiff.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/libwxzlib.a
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wx/setup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxbase310u_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxbase310u_net_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxbase310u_xml_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_adv_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_aui_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_core_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_gl_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_html_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_media_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_propgrid_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_ribbon_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_richtext_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_stc_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_webview_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Alien/wxWidgets/msw_3_1_0_uni_gcc_3_4/lib/wxmsw310u_xrc_gcc_custom.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Cwd.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Data/UUID.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Alias.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Byte.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/CJKConstants.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/CN.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/CN/HZ.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Changes.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Config.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/ConfigLocal_PM.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/EBCDIC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Encoder.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Encoding.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/GSM0338.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Guess.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/JP.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/JP/H2Z.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/JP/JIS7.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/KR.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/KR/2022_KR.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/MIME/Header.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/MIME/Header/ISO_2022_JP.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/MIME/Name.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Makefile_PL.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/PerlIO.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/README.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Supported.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Symbol.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/TW.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Unicode.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/Unicode/UTF7.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/_PM.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/_T.e2x
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Encode/encode.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/AmigaOS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Cygwin.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Epoc.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Functions.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Mac.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/OS2.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Unix.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/VMS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/File/Spec/Win32.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/List/Util.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/List/Util/XS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/OpenGL.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/OpenGL.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/OpenGL/Array.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/OpenGL/Config.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/OpenGL/Tessellation.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Scalar/Util.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Slic3r/XS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Sub/Util.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Time/HiRes.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/AUI.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Api.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/App.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/ArtProvider.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Calendar.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DND.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DataView.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DateTime.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DemoModules/wxGLCanvas.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DocView.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/DropSource.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Event.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/FS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/GLCanvas.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Grid.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Help.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Html.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/IPC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Loader.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Locale.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/MDI.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Media.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Menu.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Mini.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/NewClass.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Overload/Driver.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Overload/Handle.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Perl/Carp.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Perl/SplashFast.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Perl/TextValidator.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/PerlTest.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Print.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/PropertyGrid.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/RadioBox.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Ribbon.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/RichText.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/STC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Socket.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Thread.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Timer.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/WebView.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/Wx_Exp.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/XRC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/XSP/Enum.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/XSP/Event.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/XSP/Overload.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/XSP/Virtual.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Any_OS.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Any_wx_config.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Core.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Hacks.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/MacOSX_GCC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Win32.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Win32_MSVC.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/MakeMaker/Win32_MinGW.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/Opt.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/Options.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/build/Utils.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/chkconfig.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/compat.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/constants.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/e_cback.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/event.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/helpers.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/overload.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/setup.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/streams.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/v_cback.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/v_cback_def.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/cpp/wxapi.h
-local-lib/lib/perl5/MSWin32-x64-multi-thread/Wx/typemap
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Alien/wxWidgets/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/App/cpanminus/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Crypt/CBC/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Cwd/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Cwd/Cwd.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Data/UUID/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Data/UUID/UUID.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Devel/CheckLib/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Digest/HMAC/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/Byte/Byte.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/CN/CN.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/EBCDIC/EBCDIC.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/Encode.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/Encode.xs.dll.AAA
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/JP/JP.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/KR/KR.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/Symbol/Symbol.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/TW/TW.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Encode/Unicode/Unicode.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/ExtUtils/CppGuess/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/ExtUtils/MakeMaker/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/ExtUtils/ParseXS/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/ExtUtils/Typemaps/Default/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/ExtUtils/XSpp/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Getopt/ArgvFile/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Getopt/Long/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Growl/GNTP/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/IO/CaptureOutput/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/IO/Stringy/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/List/Util/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/List/Util/Util.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Mock/Config/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Module/Build/WithXSpp/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Module/ScanDeps/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Moo/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Net/Bonjour/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Net/DNS/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/OpenGL/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/OpenGL/OpenGL.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/OpenGL/autosplit.ix
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/OpenGL/freeglut.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/PAR/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/PAR/Dist/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Parse/Binary/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Slic3r/XS/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Slic3r/XS/XS.bs
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Slic3r/XS/XS.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Test/Differences/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Test/Harness/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Test/Simple/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Time/HiRes/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Time/HiRes/HiRes.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Win32/IPHelper/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/AUI/AUI.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Calendar/Calendar.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/DND/DND.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/DataView/DataView.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/DateTime/DateTime.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/DocView/DocView.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/FS/FS.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/GLCanvas/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/GLCanvas/GLCanvas.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Grid/Grid.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Help/Help.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Html/Html.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/IPC/IPC.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/MDI/MDI.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Media/Media.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/PerlTest/PerlTest.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Print/Print.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/PropertyGrid/PropertyGrid.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Ribbon/Ribbon.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/RichText/RichText.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/STC/STC.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Socket/Socket.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/WebView/WebView.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/Wx.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/Wx/XRC/XRC.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/XML/NamespaceSupport/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/XML/SAX/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/XML/SAX/Base/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/enum/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/libwww/perl/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/threads/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/threads/shared/.packlist
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/threads/shared/shared.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/auto/threads/threads.xs.dll
-local-lib/lib/perl5/MSWin32-x64-multi-thread/encoding.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/perllocal.pod
-local-lib/lib/perl5/MSWin32-x64-multi-thread/threads.pm
-local-lib/lib/perl5/MSWin32-x64-multi-thread/threads/shared.pm
-local-lib/lib/perl5/Method/Generate/Accessor.pm
-local-lib/lib/perl5/Method/Generate/BuildAll.pm
-local-lib/lib/perl5/Method/Generate/Constructor.pm
-local-lib/lib/perl5/Method/Generate/DemolishAll.pm
-local-lib/lib/perl5/Mock/Config.pm
-local-lib/lib/perl5/Module/Build/WithXSpp.pm
-local-lib/lib/perl5/Module/ScanDeps.pm
-local-lib/lib/perl5/Module/ScanDeps/Cache.pm
-local-lib/lib/perl5/Moo.pm
-local-lib/lib/perl5/Moo/HandleMoose.pm
-local-lib/lib/perl5/Moo/HandleMoose/FakeMetaClass.pm
-local-lib/lib/perl5/Moo/HandleMoose/_TypeMap.pm
-local-lib/lib/perl5/Moo/Object.pm
-local-lib/lib/perl5/Moo/Role.pm
-local-lib/lib/perl5/Moo/_Utils.pm
-local-lib/lib/perl5/Moo/_mro.pm
-local-lib/lib/perl5/Moo/_strictures.pm
-local-lib/lib/perl5/Moo/sification.pm
-local-lib/lib/perl5/Net/Bonjour.pm
-local-lib/lib/perl5/Net/Bonjour/Entry.pm
-local-lib/lib/perl5/Net/DNS.pm
-local-lib/lib/perl5/Net/DNS/Domain.pm
-local-lib/lib/perl5/Net/DNS/DomainName.pm
-local-lib/lib/perl5/Net/DNS/FAQ.pod
-local-lib/lib/perl5/Net/DNS/Header.pm
-local-lib/lib/perl5/Net/DNS/Mailbox.pm
-local-lib/lib/perl5/Net/DNS/Nameserver.pm
-local-lib/lib/perl5/Net/DNS/Packet.pm
-local-lib/lib/perl5/Net/DNS/Parameters.pm
-local-lib/lib/perl5/Net/DNS/Question.pm
-local-lib/lib/perl5/Net/DNS/RR.pm
-local-lib/lib/perl5/Net/DNS/RR/A.pm
-local-lib/lib/perl5/Net/DNS/RR/AAAA.pm
-local-lib/lib/perl5/Net/DNS/RR/AFSDB.pm
-local-lib/lib/perl5/Net/DNS/RR/APL.pm
-local-lib/lib/perl5/Net/DNS/RR/CAA.pm
-local-lib/lib/perl5/Net/DNS/RR/CDNSKEY.pm
-local-lib/lib/perl5/Net/DNS/RR/CDS.pm
-local-lib/lib/perl5/Net/DNS/RR/CERT.pm
-local-lib/lib/perl5/Net/DNS/RR/CNAME.pm
-local-lib/lib/perl5/Net/DNS/RR/CSYNC.pm
-local-lib/lib/perl5/Net/DNS/RR/DHCID.pm
-local-lib/lib/perl5/Net/DNS/RR/DLV.pm
-local-lib/lib/perl5/Net/DNS/RR/DNAME.pm
-local-lib/lib/perl5/Net/DNS/RR/DNSKEY.pm
-local-lib/lib/perl5/Net/DNS/RR/DS.pm
-local-lib/lib/perl5/Net/DNS/RR/EUI48.pm
-local-lib/lib/perl5/Net/DNS/RR/EUI64.pm
-local-lib/lib/perl5/Net/DNS/RR/GPOS.pm
-local-lib/lib/perl5/Net/DNS/RR/HINFO.pm
-local-lib/lib/perl5/Net/DNS/RR/HIP.pm
-local-lib/lib/perl5/Net/DNS/RR/IPSECKEY.pm
-local-lib/lib/perl5/Net/DNS/RR/ISDN.pm
-local-lib/lib/perl5/Net/DNS/RR/KEY.pm
-local-lib/lib/perl5/Net/DNS/RR/KX.pm
-local-lib/lib/perl5/Net/DNS/RR/L32.pm
-local-lib/lib/perl5/Net/DNS/RR/L64.pm
-local-lib/lib/perl5/Net/DNS/RR/LOC.pm
-local-lib/lib/perl5/Net/DNS/RR/LP.pm
-local-lib/lib/perl5/Net/DNS/RR/MB.pm
-local-lib/lib/perl5/Net/DNS/RR/MG.pm
-local-lib/lib/perl5/Net/DNS/RR/MINFO.pm
-local-lib/lib/perl5/Net/DNS/RR/MR.pm
-local-lib/lib/perl5/Net/DNS/RR/MX.pm
-local-lib/lib/perl5/Net/DNS/RR/NAPTR.pm
-local-lib/lib/perl5/Net/DNS/RR/NID.pm
-local-lib/lib/perl5/Net/DNS/RR/NS.pm
-local-lib/lib/perl5/Net/DNS/RR/NSEC.pm
-local-lib/lib/perl5/Net/DNS/RR/NSEC3.pm
-local-lib/lib/perl5/Net/DNS/RR/NSEC3PARAM.pm
-local-lib/lib/perl5/Net/DNS/RR/NULL.pm
-local-lib/lib/perl5/Net/DNS/RR/OPENPGPKEY.pm
-local-lib/lib/perl5/Net/DNS/RR/OPT.pm
-local-lib/lib/perl5/Net/DNS/RR/PTR.pm
-local-lib/lib/perl5/Net/DNS/RR/PX.pm
-local-lib/lib/perl5/Net/DNS/RR/RP.pm
-local-lib/lib/perl5/Net/DNS/RR/RRSIG.pm
-local-lib/lib/perl5/Net/DNS/RR/RT.pm
-local-lib/lib/perl5/Net/DNS/RR/SIG.pm
-local-lib/lib/perl5/Net/DNS/RR/SMIMEA.pm
-local-lib/lib/perl5/Net/DNS/RR/SOA.pm
-local-lib/lib/perl5/Net/DNS/RR/SPF.pm
-local-lib/lib/perl5/Net/DNS/RR/SRV.pm
-local-lib/lib/perl5/Net/DNS/RR/SSHFP.pm
-local-lib/lib/perl5/Net/DNS/RR/TKEY.pm
-local-lib/lib/perl5/Net/DNS/RR/TLSA.pm
-local-lib/lib/perl5/Net/DNS/RR/TSIG.pm
-local-lib/lib/perl5/Net/DNS/RR/TXT.pm
-local-lib/lib/perl5/Net/DNS/RR/URI.pm
-local-lib/lib/perl5/Net/DNS/RR/X25.pm
-local-lib/lib/perl5/Net/DNS/Resolver.pm
-local-lib/lib/perl5/Net/DNS/Resolver/Base.pm
-local-lib/lib/perl5/Net/DNS/Resolver/MSWin32.pm
-local-lib/lib/perl5/Net/DNS/Resolver/Recurse.pm
-local-lib/lib/perl5/Net/DNS/Resolver/UNIX.pm
-local-lib/lib/perl5/Net/DNS/Resolver/android.pm
-local-lib/lib/perl5/Net/DNS/Resolver/cygwin.pm
-local-lib/lib/perl5/Net/DNS/Resolver/os2.pm
-local-lib/lib/perl5/Net/DNS/Text.pm
-local-lib/lib/perl5/Net/DNS/Update.pm
-local-lib/lib/perl5/Net/DNS/ZoneFile.pm
-local-lib/lib/perl5/Net/Rendezvous.pm
-local-lib/lib/perl5/Net/Rendezvous/Entry.pm
-local-lib/lib/perl5/PAR.pm
-local-lib/lib/perl5/PAR/Dist.pm
-local-lib/lib/perl5/PAR/Environment.pod
-local-lib/lib/perl5/PAR/FAQ.pod
-local-lib/lib/perl5/PAR/Heavy.pm
-local-lib/lib/perl5/PAR/SetupProgname.pm
-local-lib/lib/perl5/PAR/SetupTemp.pm
-local-lib/lib/perl5/PAR/Tutorial.pod
-local-lib/lib/perl5/Parse/Binary.pm
-local-lib/lib/perl5/Parse/Binary/FixedFormat.pm
-local-lib/lib/perl5/Parse/Binary/FixedFormat/Variants.pm
-local-lib/lib/perl5/TAP/Base.pm
-local-lib/lib/perl5/TAP/Formatter/Base.pm
-local-lib/lib/perl5/TAP/Formatter/Color.pm
-local-lib/lib/perl5/TAP/Formatter/Console.pm
-local-lib/lib/perl5/TAP/Formatter/Console/ParallelSession.pm
-local-lib/lib/perl5/TAP/Formatter/Console/Session.pm
-local-lib/lib/perl5/TAP/Formatter/File.pm
-local-lib/lib/perl5/TAP/Formatter/File/Session.pm
-local-lib/lib/perl5/TAP/Formatter/Session.pm
-local-lib/lib/perl5/TAP/Harness.pm
-local-lib/lib/perl5/TAP/Harness/Beyond.pod
-local-lib/lib/perl5/TAP/Harness/Env.pm
-local-lib/lib/perl5/TAP/Object.pm
-local-lib/lib/perl5/TAP/Parser.pm
-local-lib/lib/perl5/TAP/Parser/Aggregator.pm
-local-lib/lib/perl5/TAP/Parser/Grammar.pm
-local-lib/lib/perl5/TAP/Parser/Iterator.pm
-local-lib/lib/perl5/TAP/Parser/Iterator/Array.pm
-local-lib/lib/perl5/TAP/Parser/Iterator/Process.pm
-local-lib/lib/perl5/TAP/Parser/Iterator/Stream.pm
-local-lib/lib/perl5/TAP/Parser/IteratorFactory.pm
-local-lib/lib/perl5/TAP/Parser/Multiplexer.pm
-local-lib/lib/perl5/TAP/Parser/Result.pm
-local-lib/lib/perl5/TAP/Parser/Result/Bailout.pm
-local-lib/lib/perl5/TAP/Parser/Result/Comment.pm
-local-lib/lib/perl5/TAP/Parser/Result/Plan.pm
-local-lib/lib/perl5/TAP/Parser/Result/Pragma.pm
-local-lib/lib/perl5/TAP/Parser/Result/Test.pm
-local-lib/lib/perl5/TAP/Parser/Result/Unknown.pm
-local-lib/lib/perl5/TAP/Parser/Result/Version.pm
-local-lib/lib/perl5/TAP/Parser/Result/YAML.pm
-local-lib/lib/perl5/TAP/Parser/ResultFactory.pm
-local-lib/lib/perl5/TAP/Parser/Scheduler.pm
-local-lib/lib/perl5/TAP/Parser/Scheduler/Job.pm
-local-lib/lib/perl5/TAP/Parser/Scheduler/Spinner.pm
-local-lib/lib/perl5/TAP/Parser/Source.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler/Executable.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler/File.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler/Handle.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler/Perl.pm
-local-lib/lib/perl5/TAP/Parser/SourceHandler/RawTAP.pm
-local-lib/lib/perl5/TAP/Parser/YAMLish/Reader.pm
-local-lib/lib/perl5/TAP/Parser/YAMLish/Writer.pm
-local-lib/lib/perl5/Test/Builder.pm
-local-lib/lib/perl5/Test/Builder/Formatter.pm
-local-lib/lib/perl5/Test/Builder/IO/Scalar.pm
-local-lib/lib/perl5/Test/Builder/Module.pm
-local-lib/lib/perl5/Test/Builder/Tester.pm
-local-lib/lib/perl5/Test/Builder/Tester/Color.pm
-local-lib/lib/perl5/Test/Builder/TodoDiag.pm
-local-lib/lib/perl5/Test/Differences.pm
-local-lib/lib/perl5/Test/HACKING.pod
-local-lib/lib/perl5/Test/Harness.pm
-local-lib/lib/perl5/Test/More.pm
-local-lib/lib/perl5/Test/Simple.pm
-local-lib/lib/perl5/Test/Tester.pm
-local-lib/lib/perl5/Test/Tester/Capture.pm
-local-lib/lib/perl5/Test/Tester/CaptureRunner.pm
-local-lib/lib/perl5/Test/Tester/Delegate.pm
-local-lib/lib/perl5/Test/Tutorial.pod
-local-lib/lib/perl5/Test/use/ok.pm
-local-lib/lib/perl5/Test2.pm
-local-lib/lib/perl5/Test2/API.pm
-local-lib/lib/perl5/Test2/API/Breakage.pm
-local-lib/lib/perl5/Test2/API/Context.pm
-local-lib/lib/perl5/Test2/API/Instance.pm
-local-lib/lib/perl5/Test2/API/Stack.pm
-local-lib/lib/perl5/Test2/Event.pm
-local-lib/lib/perl5/Test2/Event/Bail.pm
-local-lib/lib/perl5/Test2/Event/Diag.pm
-local-lib/lib/perl5/Test2/Event/Encoding.pm
-local-lib/lib/perl5/Test2/Event/Exception.pm
-local-lib/lib/perl5/Test2/Event/Fail.pm
-local-lib/lib/perl5/Test2/Event/Generic.pm
-local-lib/lib/perl5/Test2/Event/Info.pm
-local-lib/lib/perl5/Test2/Event/Note.pm
-local-lib/lib/perl5/Test2/Event/Ok.pm
-local-lib/lib/perl5/Test2/Event/Pass.pm
-local-lib/lib/perl5/Test2/Event/Plan.pm
-local-lib/lib/perl5/Test2/Event/Skip.pm
-local-lib/lib/perl5/Test2/Event/Subtest.pm
-local-lib/lib/perl5/Test2/Event/TAP/Version.pm
-local-lib/lib/perl5/Test2/Event/V2.pm
-local-lib/lib/perl5/Test2/Event/Waiting.pm
-local-lib/lib/perl5/Test2/EventFacet.pm
-local-lib/lib/perl5/Test2/EventFacet/About.pm
-local-lib/lib/perl5/Test2/EventFacet/Amnesty.pm
-local-lib/lib/perl5/Test2/EventFacet/Assert.pm
-local-lib/lib/perl5/Test2/EventFacet/Control.pm
-local-lib/lib/perl5/Test2/EventFacet/Error.pm
-local-lib/lib/perl5/Test2/EventFacet/Hub.pm
-local-lib/lib/perl5/Test2/EventFacet/Info.pm
-local-lib/lib/perl5/Test2/EventFacet/Meta.pm
-local-lib/lib/perl5/Test2/EventFacet/Parent.pm
-local-lib/lib/perl5/Test2/EventFacet/Plan.pm
-local-lib/lib/perl5/Test2/EventFacet/Render.pm
-local-lib/lib/perl5/Test2/EventFacet/Trace.pm
-local-lib/lib/perl5/Test2/Formatter.pm
-local-lib/lib/perl5/Test2/Formatter/TAP.pm
-local-lib/lib/perl5/Test2/Hub.pm
-local-lib/lib/perl5/Test2/Hub/Interceptor.pm
-local-lib/lib/perl5/Test2/Hub/Interceptor/Terminator.pm
-local-lib/lib/perl5/Test2/Hub/Subtest.pm
-local-lib/lib/perl5/Test2/IPC.pm
-local-lib/lib/perl5/Test2/IPC/Driver.pm
-local-lib/lib/perl5/Test2/IPC/Driver/Files.pm
-local-lib/lib/perl5/Test2/Tools/Tiny.pm
-local-lib/lib/perl5/Test2/Transition.pod
-local-lib/lib/perl5/Test2/Util.pm
-local-lib/lib/perl5/Test2/Util/ExternalMeta.pm
-local-lib/lib/perl5/Test2/Util/Facets2Legacy.pm
-local-lib/lib/perl5/Test2/Util/HashBase.pm
-local-lib/lib/perl5/Test2/Util/Trace.pm
-local-lib/lib/perl5/Win32/IPHelper.pm
-local-lib/lib/perl5/XML/NamespaceSupport.pm
-local-lib/lib/perl5/XML/SAX.pm
-local-lib/lib/perl5/XML/SAX/Base.pm
-local-lib/lib/perl5/XML/SAX/BuildSAXBase.pl
-local-lib/lib/perl5/XML/SAX/DocumentLocator.pm
-local-lib/lib/perl5/XML/SAX/Exception.pm
-local-lib/lib/perl5/XML/SAX/Intro.pod
-local-lib/lib/perl5/XML/SAX/ParserDetails.ini
-local-lib/lib/perl5/XML/SAX/ParserFactory.pm
-local-lib/lib/perl5/XML/SAX/PurePerl.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/DTDDecls.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/DebugHandler.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/DocType.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/EncodingDetect.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Exception.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/NoUnicodeExt.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Productions.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader/NoUnicodeExt.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader/Stream.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader/String.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader/URI.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/Reader/UnicodeExt.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/UnicodeExt.pm
-local-lib/lib/perl5/XML/SAX/PurePerl/XMLDecl.pm
-local-lib/lib/perl5/enum.pm
-local-lib/lib/perl5/libwww/lwpcook.pod
-local-lib/lib/perl5/libwww/lwptut.pod
-local-lib/lib/perl5/newgetopt.pl
-local-lib/lib/perl5/ok.pm
-local-lib/lib/perl5/oo.pm
-perl524.dll
-pthreadGC2-w64.dll
-script/main.pl
-script/slic3r.pl
-slic3r.pl
-var/Slic3r.icns
-var/Slic3r.ico
-var/Slic3r.png
-var/Slic3r_128px.png
-var/Slic3r_192px.png
-var/Slic3r_192px_transparent.png
-var/add.png
-var/application_view_tile.png
-var/arrow_down.png
-var/arrow_in.png
-var/arrow_left.png
-var/arrow_out.png
-var/arrow_redo.png
-var/arrow_refresh.png
-var/arrow_right.png
-var/arrow_rotate_anticlockwise.png
-var/arrow_rotate_clockwise.png
-var/arrow_undo.png
-var/arrow_up.png
-var/box.png
-var/brick.png
-var/brick_add.png
-var/brick_delete.png
-var/brick_go.png
-var/bricks.png
-var/building.png
-var/bullet_black.png
-var/bullet_blue.png
-var/bullet_green.png
-var/bullet_red.png
-var/bullet_white.png
-var/cog.png
-var/cog_go.png
-var/control_pause.png
-var/control_pause_blue.png
-var/control_play.png
-var/control_play_blue.png
-var/control_stop.png
-var/control_stop_blue.png
-var/cross.png
-var/delete.png
-var/disk.png
-var/error.png
-var/film.png
-var/funnel.png
-var/gcode.icns
-var/gcode.ico
-var/hourglass.png
-var/house.png
-var/infill.png
-var/joystick.png
-var/layers.png
-var/lorry_add.png
-var/lorry_go.png
-var/lorry_import.png
-var/map_add.png
-var/note.png
-var/package.png
-var/package_green.png
-var/page_white_go.png
-var/plugin.png
-var/plugin_add.png
-var/plugin_go.png
-var/printer_empty.png
-var/script.png
-var/shape_flip_horizontal.png
-var/shape_handles.png
-var/shape_ungroup.png
-var/slt.ico
-var/spool.png
-var/stl.icns
-var/tag_blue.png
-var/textfield.png
-var/tick.png
-var/time.png
-var/variable_layer_height.png
-var/wand.png
-var/wrench.png
-var/zoom.png
-var/zoom_in.png
-var/zoom_out.png
- #
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/META.yml b/software/Slic3r-1.3.0.64bit/META.yml
deleted file mode 100644
index 423a4691..00000000
--- a/software/Slic3r-1.3.0.64bit/META.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-build_requires: {}
-conflicts: {}
-dist_name: C:\projects\slic3r\package\win\..\..\slic3r.par
-distribution_type: par
-dynamic_config: 0
-generated_by: 'PAR::Packer version 1.043'
-license: unknown
-par:
- clean: 0
- signature: ''
- verbatim: 0
- version: 1.014
diff --git a/software/Slic3r-1.3.0.64bit/Slic3r-console.exe b/software/Slic3r-1.3.0.64bit/Slic3r-console.exe
deleted file mode 100644
index 156c1a42..00000000
--- a/software/Slic3r-1.3.0.64bit/Slic3r-console.exe
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:faa62d6e82d632c317a2eaf3bf48769d0e7659670b694eb996cd69b24e308230
-size 415349
diff --git a/software/Slic3r-1.3.0.64bit/Slic3r-debug-console.exe b/software/Slic3r-1.3.0.64bit/Slic3r-debug-console.exe
deleted file mode 100644
index d8378ea1..00000000
--- a/software/Slic3r-1.3.0.64bit/Slic3r-debug-console.exe
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:61a827194c9a63f7daae4f872f5fc0af027f31d9341fab2ce2b05df97036b3aa
-size 415861
diff --git a/software/Slic3r-1.3.0.64bit/Slic3r.exe b/software/Slic3r-1.3.0.64bit/Slic3r.exe
deleted file mode 100644
index ae779f49..00000000
--- a/software/Slic3r-1.3.0.64bit/Slic3r.exe
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:96860ac6b6ac8d3961a69ff0d80017dcd26b49f7b687ee8aadd20623b0582b79
-size 415861
diff --git a/software/Slic3r-1.3.0.64bit/config.ini b/software/Slic3r-1.3.0.64bit/config.ini
deleted file mode 100644
index 3173e717..00000000
--- a/software/Slic3r-1.3.0.64bit/config.ini
+++ /dev/null
@@ -1,167 +0,0 @@
-# generated by Slic3r 1.3.0 on
-adaptive_slicing = 0
-adaptive_slicing_quality = 75%
-avoid_crossing_perimeters = 0
-bed_shape = 0x0,200x0,200x200,0x200
-bed_temperature = 100
-before_layer_gcode =
-between_objects_gcode =
-bottom_infill_pattern = rectilinear
-bottom_solid_layers = 3
-bridge_acceleration = 0
-bridge_fan_speed = 100
-bridge_flow_ratio = 1
-bridge_speed = 60
-brim_connections_width = 0
-brim_width = 0
-compatible_printers =
-complete_objects = 0
-cooling = 1
-default_acceleration = 0
-disable_fan_first_layers = 3
-dont_support_bridges = 1
-duplicate_distance = 6
-end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
-end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n
-external_perimeter_extrusion_width = 0
-external_perimeter_speed = 50%
-external_perimeters_first = 0
-extra_perimeters = 1
-extruder_clearance_height = 20
-extruder_clearance_radius = 20
-extruder_offset = 0x0
-extrusion_axis = E
-extrusion_multiplier = 1
-extrusion_width = 0
-fan_always_on = 0
-fan_below_layer_time = 60
-filament_colour = #FFFFFF
-filament_cost = 0
-filament_density = 0
-filament_diameter = 3
-filament_max_volumetric_speed = 0
-filament_notes = ""
-filament_settings_id =
-fill_angle = 45
-fill_density = 20%
-fill_gaps = 1
-fill_pattern = stars
-first_layer_acceleration = 0
-first_layer_bed_temperature = 105
-first_layer_extrusion_width = 200%
-first_layer_height = 4
-first_layer_speed = 30
-first_layer_temperature = 205
-gap_fill_speed = 20
-gcode_arcs = 0
-gcode_comments = 0
-gcode_flavor = reprap
-has_heatbed = 1
-host_type = octoprint
-infill_acceleration = 0
-infill_every_layers = 1
-infill_extruder = 1
-infill_extrusion_width = 0
-infill_first = 0
-infill_only_where_needed = 0
-infill_overlap = 55%
-infill_speed = 80
-interface_shells = 0
-interior_brim_width = 0
-layer_gcode =
-layer_height = 3.9
-match_horizontal_surfaces = 0
-max_fan_speed = 100
-max_layer_height = 0.3
-max_print_speed = 80
-max_volumetric_speed = 0
-min_fan_speed = 35
-min_layer_height = 0.15
-min_print_speed = 10
-min_skirt_length = 0
-notes =
-nozzle_diameter = 5
-octoprint_apikey =
-only_retract_when_crossing_perimeters = 1
-ooze_prevention = 0
-output_filename_format = [input_filename_base].gcode
-overhangs = 1
-perimeter_acceleration = 0
-perimeter_extruder = 1
-perimeter_extrusion_width = 0
-perimeter_speed = 60
-perimeters = 3
-post_process =
-pressure_advance = 0
-print_host =
-print_settings_id =
-printer_notes =
-printer_settings_id =
-raft_layers = 0
-regions_overlap = 0
-resolution = 0
-retract_before_travel = 2
-retract_layer_change = 0
-retract_length = 2
-retract_length_toolchange = 10
-retract_lift = 0
-retract_lift_above = 0
-retract_lift_below = 0
-retract_restart_extra = 0
-retract_restart_extra_toolchange = 0
-retract_speed = 40
-seam_position = aligned
-sequential_print_priority = 0
-serial_port =
-serial_speed = 250000
-shortcuts = support_material
-skirt_distance = 6
-skirt_height = 1
-skirts = 1
-slowdown_below_layer_time = 5
-small_perimeter_speed = 15
-solid_infill_below_area = 70
-solid_infill_every_layers = 0
-solid_infill_extruder = 1
-solid_infill_extrusion_width = 0
-solid_infill_speed = 20
-spiral_vase = 0
-standby_temperature_delta = -5
-start_filament_gcode = "; Filament gcode\n"
-start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n
-support_material = 0
-support_material_angle = 0
-support_material_buildplate_only = 0
-support_material_contact_distance = 0.2
-support_material_enforce_layers = 0
-support_material_extruder = 1
-support_material_extrusion_width = 0
-support_material_interface_extruder = 1
-support_material_interface_extrusion_width = 0
-support_material_interface_layers = 3
-support_material_interface_spacing = 0
-support_material_interface_speed = 100%
-support_material_max_layers = 0
-support_material_pattern = pillars
-support_material_spacing = 2.5
-support_material_speed = 60
-support_material_threshold = 60%
-temperature = 200
-thin_walls = 1
-threads = 16
-toolchange_gcode =
-top_infill_extrusion_width = 0
-top_infill_pattern = rectilinear
-top_solid_infill_speed = 15
-top_solid_layers = 3
-travel_speed = 130
-use_firmware_retraction = 0
-use_relative_e_distances = 0
-use_set_and_wait_bed = 0
-use_set_and_wait_extruder = 0
-use_volumetric_e = 0
-vibration_limit = 0
-wipe = 0
-xy_size_compensation = 0
-z_offset = 0
-z_steps_per_mm = 0
diff --git a/software/Slic3r-1.3.0.64bit/freeglut.dll b/software/Slic3r-1.3.0.64bit/freeglut.dll
deleted file mode 100644
index bd65133f..00000000
Binary files a/software/Slic3r-1.3.0.64bit/freeglut.dll and /dev/null differ
diff --git a/software/Slic3r-1.3.0.64bit/help.txt b/software/Slic3r-1.3.0.64bit/help.txt
deleted file mode 100644
index ab1bbd96..00000000
--- a/software/Slic3r-1.3.0.64bit/help.txt
+++ /dev/null
@@ -1,307 +0,0 @@
-Slic3r 1.3.0 is a STL-to-GCODE translator for RepRap 3D printers
-written by Alessandro Ranellucci - http://slic3r.org/
-
-Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ...
-
- --help Output this usage screen and exit
- --version Output the version of Slic3r and exit
- --save Save configuration to the specified file
- --load Load configuration from the specified file. It can be used
- more than once to load options from multiple files.
- --datadir Load and store settings at the given directory.
- This is useful for maintaining different profiles or including
- configurations from a network storage.
- -o, --output File to output gcode to (by default, the file will be saved
- into the same directory as the input file using the
- --output-filename-format to generate the filename.) If a
- directory is specified for this option, the output will
- be saved under that directory, and the filename will be
- generated by --output-filename-format.
-
- Non-slicing actions (no G-code will be generated):
- --repair Repair given STL files and save them as _fixed.obj
- --cut Cut given input files at given Z (relative) and export
- them as _upper.stl and _lower.stl
- --split Split the shells contained in given STL file into several STL files
- --info Output information about the supplied file(s) and exit
-
- -j, --threads Number of threads to use
-
- GUI options:
- --gui Forces the GUI launch instead of command line slicing (if you
- supply a model file, it will be loaded into the plater)
- --no-gui Forces the command line slicing instead of gui.
- This takes precedence over --gui if both are present.
- --autosave Automatically export current configuration to the specified file
-
- Output options:
- --output-filename-format
- Output file name format; all config options enclosed in brackets
- will be replaced by their values, as well as [input_filename_base]
- and [input_filename] (default: [input_filename_base].gcode)
- --post-process Generated G-code will be processed with the supplied script;
- call this more than once to process through multiple scripts.
- --export-svg Export a SVG file containing slices instead of G-code.
- -m, --merge If multiple files are supplied, they will be composed into a single
- print rather than processed individually.
-
- Printer options:
- --nozzle-diameter Diameter of nozzle in mm (default: 0.5)
- --print-center Coordinates in mm of the point to center the print around
- (default: 100,100)
- --z-offset Additional height in mm to add to vertical coordinates
- (+/-, default: 0)
- --z-steps-per-mm Number of full steps per mm of the Z axis. Experimental feature for
- preventing rounding issues.
- --gcode-flavor The type of G-code to generate (reprap/teacup/repetier/makerware/sailfish/mach3/machinekit/smoothie/no-extrusion,
- default: reprap)
- --use-relative-e-distances Enable this to get relative E values (default: no)
- --use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no)
- --use-volumetric-e Express E in cubic millimeters and prepend M200 (default: no)
- --gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported
- by all firmwares)
- --gcode-comments Make G-code verbose by adding comments (default: no)
- --vibration-limit Limit the frequency of moves on X and Y axes (Hz, set zero to disable;
- default: 0)
- --pressure-advance Adjust pressure using the experimental advance algorithm (K constant,
- set zero to disable; default: 0)
-
- Filament options:
- --filament-diameter Diameter in mm of your raw filament (default: 3)
- --extrusion-multiplier
- Change this to alter the amount of plastic extruded. There should be
- very little need to change this value, which is only useful to
- compensate for filament packing (default: 1)
- --temperature Extrusion temperature in degree Celsius, set 0 to disable (default: 200)
- --first-layer-temperature Extrusion temperature for the first layer, in degree Celsius,
- set 0 to disable (default: same as --temperature)
- --bed-temperature Heated bed temperature in degree Celsius, set 0 to disable (default: 0)
- --first-layer-bed-temperature Heated bed temperature for the first layer, in degree Celsius,
- set 0 to disable (default: same as --bed-temperature)
-
- Speed options:
- --travel-speed Speed of non-print moves in mm/s (default: 130)
- --perimeter-speed Speed of print moves for perimeters in mm/s (default: 60)
- --small-perimeter-speed
- Speed of print moves for small perimeters in mm/s or % over perimeter speed
- (default: 15)
- --external-perimeter-speed
- Speed of print moves for the external perimeter in mm/s or % over perimeter speed
- (default: 50%)
- --infill-speed Speed of print moves in mm/s (default: 80)
- --solid-infill-speed Speed of print moves for solid surfaces in mm/s or % over infill speed
- (default: 20)
- --top-solid-infill-speed Speed of print moves for top surfaces in mm/s or % over solid infill speed
- (default: 15)
- --support-material-speed
- Speed of support material print moves in mm/s (default: 60)
- --support-material-interface-speed
- Speed of support material interface print moves in mm/s or % over support material
- speed (default: 100%)
- --bridge-speed Speed of bridge print moves in mm/s (default: 60)
- --gap-fill-speed Speed of gap fill print moves in mm/s (default: 20)
- --first-layer-speed Speed of print moves for bottom layer, expressed either as an absolute
- value or as a percentage over normal speeds (default: 30)
-
- Acceleration options:
- --perimeter-acceleration
- Overrides firmware's default acceleration for perimeters. (mm/s^2, set zero
- to disable; default: 0)
- --infill-acceleration
- Overrides firmware's default acceleration for infill. (mm/s^2, set zero
- to disable; default: 0)
- --bridge-acceleration
- Overrides firmware's default acceleration for bridges. (mm/s^2, set zero
- to disable; default: 0)
- --first-layer-acceleration
- Overrides firmware's default acceleration for first layer. (mm/s^2, set zero
- to disable; default: 0)
- --default-acceleration
- Acceleration will be reset to this value after the specific settings above
- have been applied. (mm/s^2, set zero to disable; default: 0)
-
- Accuracy options:
- --layer-height Layer height in mm (default: 0.3)
- --first-layer-height Layer height for first layer (mm or %, default: 0.35)
- --infill-every-layers
- Infill every N layers (default: 1)
- --solid-infill-every-layers
- Force a solid layer every N layers (default: 0)
-
- Print options:
- --perimeters Number of perimeters/horizontal skins (range: 0+, default: 3)
- --top-solid-layers Number of solid layers to do for top surfaces (range: 0+, default: 3)
- --bottom-solid-layers Number of solid layers to do for bottom surfaces (range: 0+, default: 3)
- --solid-layers Shortcut for setting the two options above at once
- --fill-density Infill density (range: 0%-100%, default: 20%)
- --fill-angle Infill angle in degrees (range: 0-90, default: 45)
- --fill-pattern Pattern to use to fill non-solid layers (default: stars)
- --fill-gaps Fill gaps with single passes (default: yes)
- --external-infill-pattern Pattern to use to fill solid layers.
- (Shortcut for --top-infill-pattern and --bottom-infill-pattern)
- --top-infill-pattern Pattern to use to fill top solid layers (default: rectilinear)
- --bottom-infill-pattern Pattern to use to fill bottom solid layers (default: rectilinear)
- --start-gcode Load initial G-code from the supplied file. This will overwrite
- the default command (home all axes [G28]).
- --end-gcode Load final G-code from the supplied file. This will overwrite
- the default commands (turn off temperature [M104 S0],
- home X axis [G28 X], disable motors [M84]).
- --before-layer-gcode Load before-layer-change G-code from the supplied file (default: nothing).
- --layer-gcode Load layer-change G-code from the supplied file (default: nothing).
- --toolchange-gcode Load tool-change G-code from the supplied file (default: nothing).
- --seam-position Position of loop starting points (random/nearest/aligned, default: aligned).
- --external-perimeters-first Reverse perimeter order. (default: no)
- --spiral-vase Experimental option to raise Z gradually when printing single-walled vases
- (default: no)
- --only-retract-when-crossing-perimeters
- Disable retraction when travelling between infill paths inside the same island.
- (default: no)
- --solid-infill-below-area
- Force solid infill when a region has a smaller area than this threshold
- (mm^2, default: 70)
- --infill-only-where-needed
- Only infill under ceilings (default: no)
- --infill-first Make infill before perimeters (default: no)
-
- Quality options (slower slicing):
- --extra-perimeters Add more perimeters when needed (default: yes)
- --avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no)
- --thin-walls Detect single-width walls (default: yes)
- --detect-bridging-perimeters Detect bridging perimeters and apply bridge flow, speed and fan
- (default: yes)
-
- Support material options:
- --support-material Generate support material for overhangs
- --support-material-threshold
- Overhang threshold angle (range: 0-90, set 0 for automatic detection,
- default: 60%)
- --support-material-pattern
- Pattern to use for support material (default: pillars)
- --support-material-spacing
- Spacing between pattern lines (mm, default: 2.5)
- --support-material-angle
- Support material angle in degrees (range: 0-90, default: 0)
- --support-material-contact-distance
- Vertical distance between object and support material (0+, default: 0.2)
- --support-material-interface-layers
- Number of perpendicular layers between support material and object (0+, default: 3)
- --support-material-interface-spacing
- Spacing between interface pattern lines (mm, set 0 to get a solid layer, default: 0)
- --raft-layers Number of layers to raise the printed objects by (range: 0+, default: 0)
- --support-material-enforce-layers
- Enforce support material on the specified number of layers from bottom,
- regardless of --support-material and threshold (0+, default: 0)
- --support-material-buildplate-only
- Only create support if it lies on a build plate. Don't create support on a print. (default: no)
- --dont-support-bridges
- Experimental option for preventing support material from being generated under bridged areas (default: yes)
-
- Retraction options:
- --retract-length Length of retraction in mm when pausing extrusion (default: 2)
- --retract-speed Speed for retraction in mm/s (default: 40)
- --retract-restart-extra
- Additional amount of filament in mm to push after
- compensating retraction (default: 0)
- --retract-before-travel
- Only retract before travel moves of this length in mm (default: 2)
- --retract-lift Lift Z by the given distance in mm when retracting (default: 0)
- --retract-lift-above Only lift Z when above the specified height (default: 0)
- --retract-lift-below Only lift Z when below the specified height (default: 0)
- --retract-layer-change
- Enforce a retraction before each Z move (default: no)
- --wipe Wipe the nozzle while doing a retraction (default: no)
-
- Retraction options for multi-extruder setups:
- --retract-length-toolchange
- Length of retraction in mm when disabling tool (default: 10)
- --retract-restart-extra-toolchange
- Additional amount of filament in mm to push after
- switching tool (default: 0)
-
- Cooling options:
- --cooling Enable fan and cooling control
- --min-fan-speed Minimum fan speed (default: 35%)
- --max-fan-speed Maximum fan speed (default: 100%)
- --bridge-fan-speed Fan speed to use when bridging (default: 100%)
- --fan-below-layer-time Enable fan if layer print time is below this approximate number
- of seconds (default: 60)
- --slowdown-below-layer-time Slow down if layer print time is below this approximate number
- of seconds (default: 5)
- --min-print-speed Minimum print speed (mm/s, default: 10)
- --disable-fan-first-layers Disable fan for the first N layers (default: 3)
- --fan-always-on Keep fan always on at min fan speed, even for layers that don't need
- cooling
-
- Skirt options:
- --skirts Number of skirts to draw (0+, default: 1)
- --skirt-distance Distance in mm between innermost skirt and object
- (default: 6)
- --skirt-height Height of skirts to draw (expressed in layers, 0+, default: 1)
- --min-skirt-length Generate no less than the number of loops required to consume this length
- of filament on the first layer, for each extruder (mm, 0+, default: 0)
- --brim-width Width of the brim that will get added to each object to help adhesion
- (mm, default: 0)
- --interior-brim-width Width of the brim that will get printed inside object holes to help adhesion
- (mm, default: 0)
-
- Transform options:
- --scale Factor for scaling input object (default: 1)
- --rotate Rotation angle in degrees (0-360, default: 0)
- --duplicate Number of items with auto-arrange (1+, default: 1)
- --duplicate-grid Number of items with grid arrangement (default: 1,1)
- --duplicate-distance Distance in mm between copies (default: 6)
- --dont-arrange Don't arrange the objects on the build plate. The model coordinates
- define the absolute positions on the build plate.
- The option --print-center will be ignored.
- --xy-size-compensation
- Grow/shrink objects by the configured absolute distance (mm, default: 0)
-
- Sequential printing options:
- --complete-objects When printing multiple objects and/or copies, complete each one before
- starting the next one; watch out for extruder collisions (default: no)
- --extruder-clearance-radius Radius in mm above which extruder won't collide with anything
- (default: 20)
- --extruder-clearance-height Maximum vertical extruder depth; i.e. vertical distance from
- extruder tip and carriage bottom (default: 20)
-
- Miscellaneous options:
- --notes Notes to be added as comments to the output file
- --resolution Minimum detail resolution (mm, set zero for full resolution, default: 0)
-
- Flow options (advanced):
- --extrusion-width Set extrusion width manually; it accepts either an absolute value in mm
- (like 0.65) or a percentage over layer height (like 200%)
- --first-layer-extrusion-width
- Set a different extrusion width for first layer
- --perimeter-extrusion-width
- Set a different extrusion width for perimeters
- --external-perimeter-extrusion-width
- Set a different extrusion width for external perimeters
- --infill-extrusion-width
- Set a different extrusion width for infill
- --solid-infill-extrusion-width
- Set a different extrusion width for solid infill
- --top-infill-extrusion-width
- Set a different extrusion width for top infill
- --support-material-extrusion-width
- Set a different extrusion width for support material
- --infill-overlap Overlap between infill and perimeters (default: 55%)
- --bridge-flow-ratio Multiplier for extrusion when bridging (> 0, default: 1)
-
- Multiple extruder options:
- --extruder-offset Offset of each extruder, if firmware doesn't handle the displacement
- (can be specified multiple times, default: 0x0)
- --perimeter-extruder
- Extruder to use for perimeters and brim (1+, default: 1)
- --infill-extruder Extruder to use for infill (1+, default: 1)
- --solid-infill-extruder Extruder to use for solid infill (1+, default: 1)
- --support-material-extruder
- Extruder to use for support material, raft and skirt (1+, default: 1)
- --support-material-interface-extruder
- Extruder to use for support material interface (1+, default: 1)
- --ooze-prevention Drop temperature and park extruders outside a full skirt for automatic wiping
- (default: no)
- --standby-temperature-delta
- Temperature difference to be applied when an extruder is not active and
- --ooze-prevention is enabled (default: -5)
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/AutoLoader.pm b/software/Slic3r-1.3.0.64bit/lib/AutoLoader.pm
deleted file mode 100644
index 6ba3d05e..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/AutoLoader.pm
+++ /dev/null
@@ -1,208 +0,0 @@
-#line 1 "AutoLoader.pm"
-package AutoLoader;
-
-use strict;
-use 5.006_001;
-
-our($VERSION, $AUTOLOAD);
-
-my $is_dosish;
-my $is_epoc;
-my $is_vms;
-my $is_macos;
-
-BEGIN {
- $is_dosish = $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
- $is_epoc = $^O eq 'epoc';
- $is_vms = $^O eq 'VMS';
- $is_macos = $^O eq 'MacOS';
- $VERSION = '5.74';
-}
-
-AUTOLOAD {
- my $sub = $AUTOLOAD;
- autoload_sub($sub);
- goto &$sub;
-}
-
-sub autoload_sub {
- my $sub = shift;
-
- my $filename = AutoLoader::find_filename( $sub );
-
- my $save = $@;
- local $!; # Do not munge the value.
- eval { local $SIG{__DIE__}; require $filename };
- if ($@) {
- if (substr($sub,-9) eq '::DESTROY') {
- no strict 'refs';
- *$sub = sub {};
- $@ = undef;
- } elsif ($@ =~ /^Can't locate/) {
- # The load might just have failed because the filename was too
- # long for some old SVR3 systems which treat long names as errors.
- # If we can successfully truncate a long name then it's worth a go.
- # There is a slight risk that we could pick up the wrong file here
- # but autosplit should have warned about that when splitting.
- if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
- eval { local $SIG{__DIE__}; require $filename };
- }
- }
- if ($@){
- $@ =~ s/ at .*\n//;
- my $error = $@;
- require Carp;
- Carp::croak($error);
- }
- }
- $@ = $save;
-
- return 1;
-}
-
-sub find_filename {
- my $sub = shift;
- my $filename;
- # Braces used to preserve $1 et al.
- {
- # Try to find the autoloaded file from the package-qualified
- # name of the sub. e.g., if the sub needed is
- # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
- # something like '/usr/lib/perl5/Getopt/Long.pm', and the
- # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
- #
- # However, if @INC is a relative path, this might not work. If,
- # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
- # 'lib/Getopt/Long.pm', and we want to require
- # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
- # In this case, we simple prepend the 'auto/' and let the
- # C take care of the searching for us.
-
- my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
- $pkg =~ s#::#/#g;
- if (defined($filename = $INC{"$pkg.pm"})) {
- if ($is_macos) {
- $pkg =~ tr#/#:#;
- $filename = undef
- unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
- } else {
- $filename = undef
- unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
- }
-
- # if the file exists, then make sure that it is a
- # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
- # or './lib/auto/foo/bar.al'. This avoids C searching
- # (and failing) to find the 'lib/auto/foo/bar.al' because it
- # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
-
- if (defined $filename and -r $filename) {
- unless ($filename =~ m|^/|s) {
- if ($is_dosish) {
- unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
- if ($^O ne 'NetWare') {
- $filename = "./$filename";
- } else {
- $filename = "$filename";
- }
- }
- }
- elsif ($is_epoc) {
- unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
- $filename = "./$filename";
- }
- }
- elsif ($is_vms) {
- # XXX todo by VMSmiths
- $filename = "./$filename";
- }
- elsif (!$is_macos) {
- $filename = "./$filename";
- }
- }
- }
- else {
- $filename = undef;
- }
- }
- unless (defined $filename) {
- # let C do the searching
- $filename = "auto/$sub.al";
- $filename =~ s#::#/#g;
- }
- }
- return $filename;
-}
-
-sub import {
- my $pkg = shift;
- my $callpkg = caller;
-
- #
- # Export symbols, but not by accident of inheritance.
- #
-
- if ($pkg eq 'AutoLoader') {
- if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) {
- no strict 'refs';
- *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD;
- }
- }
-
- #
- # Try to find the autosplit index file. Eg., if the call package
- # is POSIX, then $INC{POSIX.pm} is something like
- # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
- # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
- #
- # However, if @INC is a relative path, this might not work. If,
- # for example, @INC = ('lib'), then
- # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
- # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
- #
-
- (my $calldir = $callpkg) =~ s#::#/#g;
- my $path = $INC{$calldir . '.pm'};
- if (defined($path)) {
- # Try absolute path name, but only eval it if the
- # transformation from module path to autosplit.ix path
- # succeeded!
- my $replaced_okay;
- if ($is_macos) {
- (my $malldir = $calldir) =~ tr#/#:#;
- $replaced_okay = ($path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s);
- } else {
- $replaced_okay = ($path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#);
- }
-
- eval { require $path; } if $replaced_okay;
- # If that failed, try relative path with normal @INC searching.
- if (!$replaced_okay or $@) {
- $path ="auto/$calldir/autosplit.ix";
- eval { require $path; };
- }
- if ($@) {
- my $error = $@;
- require Carp;
- Carp::carp($error);
- }
- }
-}
-
-sub unimport {
- my $callpkg = caller;
-
- no strict 'refs';
-
- for my $exported (qw( AUTOLOAD )) {
- my $symname = $callpkg . '::' . $exported;
- undef *{ $symname } if \&{ $symname } == \&{ $exported };
- *{ $symname } = \&{ $symname };
- }
-}
-
-1;
-
-__END__
-
-#line 454
diff --git a/software/Slic3r-1.3.0.64bit/lib/B.pm b/software/Slic3r-1.3.0.64bit/lib/B.pm
deleted file mode 100644
index 9dd9d9f1..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/B.pm
+++ /dev/null
@@ -1,282 +0,0 @@
-#line 1 "B.pm"
-# B.pm
-#
-# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B;
-use strict;
-
-require Exporter;
-@B::ISA = qw(Exporter);
-
-# walkoptree_slow comes from B.pm (you are there),
-# walkoptree comes from B.xs
-
-BEGIN {
- $B::VERSION = '1.62';
- @B::EXPORT_OK = ();
-
- # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
- # Want our constants loaded before the compiler meets OPf_KIDS below, as
- # the combination of having the constant stay a Proxy Constant Subroutine
- # and its value being inlined saves a little over .5K
-
- require XSLoader;
- XSLoader::load();
-}
-
-push @B::EXPORT_OK, (qw(minus_c ppname save_BEGINs
- class peekop cast_I32 cstring cchar hash threadsv_names
- main_root main_start main_cv svref_2object opnumber
- sub_generation amagic_generation perlstring
- walkoptree_slow walkoptree walkoptree_exec walksymtable
- parents comppadlist sv_undef compile_stats timing_info
- begin_av init_av check_av end_av regex_padav dowarn
- defstash curstash warnhook diehook inc_gv @optype
- @specialsv_name unitcheck_av safename));
-
-@B::SV::ISA = 'B::OBJECT';
-@B::NULL::ISA = 'B::SV';
-@B::PV::ISA = 'B::SV';
-@B::IV::ISA = 'B::SV';
-@B::NV::ISA = 'B::SV';
-# RV is eliminated with 5.11.0, but effectively is a specialisation of IV now.
-@B::RV::ISA = $] >= 5.011 ? 'B::IV' : 'B::SV';
-@B::PVIV::ISA = qw(B::PV B::IV);
-@B::PVNV::ISA = qw(B::PVIV B::NV);
-@B::PVMG::ISA = 'B::PVNV';
-@B::REGEXP::ISA = 'B::PVMG' if $] >= 5.011;
-@B::INVLIST::ISA = 'B::PV' if $] >= 5.019;
-@B::PVLV::ISA = 'B::GV';
-@B::BM::ISA = 'B::GV';
-@B::AV::ISA = 'B::PVMG';
-@B::GV::ISA = 'B::PVMG';
-@B::HV::ISA = 'B::PVMG';
-@B::CV::ISA = 'B::PVMG';
-@B::IO::ISA = 'B::PVMG';
-@B::FM::ISA = 'B::CV';
-
-@B::OP::ISA = 'B::OBJECT';
-@B::UNOP::ISA = 'B::OP';
-@B::UNOP_AUX::ISA = 'B::UNOP';
-@B::BINOP::ISA = 'B::UNOP';
-@B::LOGOP::ISA = 'B::UNOP';
-@B::LISTOP::ISA = 'B::BINOP';
-@B::SVOP::ISA = 'B::OP';
-@B::PADOP::ISA = 'B::OP';
-@B::PVOP::ISA = 'B::OP';
-@B::LOOP::ISA = 'B::LISTOP';
-@B::PMOP::ISA = 'B::LISTOP';
-@B::COP::ISA = 'B::OP';
-@B::METHOP::ISA = 'B::OP';
-
-@B::SPECIAL::ISA = 'B::OBJECT';
-
-@B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP
- METHOP UNOP_AUX);
-# bytecode.pl contained the following comment:
-# Nullsv *must* come first in the following so that the condition
-# ($$sv == 0) can continue to be used to test (sv == Nullsv).
-@B::specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no
- (SV*)pWARN_ALL (SV*)pWARN_NONE (SV*)pWARN_STD);
-
-{
- # Stop "-w" from complaining about the lack of a real B::OBJECT class
- package B::OBJECT;
-}
-
-sub B::GV::SAFENAME {
- safename(shift()->NAME);
-}
-
-sub safename {
- my $name = shift;
-
- # The regex below corresponds to the isCONTROLVAR macro
- # from toke.c
-
- $name =~ s/^\c?/^?/
- or $name =~ s/^([\cA-\cZ\c\\c[\c]\c_\c^])/
- "^" . chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e;
-
- # When we say unicode_to_native we really mean ascii_to_native,
- # which matters iff this is a non-ASCII platform (EBCDIC). '\c?' would
- # not have to be special cased, except for non-ASCII.
-
- return $name;
-}
-
-sub B::IV::int_value {
- my ($self) = @_;
- return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
-}
-
-sub B::NULL::as_string() {""}
-*B::IV::as_string = \*B::IV::int_value;
-*B::PV::as_string = \*B::PV::PV;
-
-# The input typemap checking makes no distinction between different SV types,
-# so the XS body will generate the same C code, despite the different XS
-# "types". So there is no change in behaviour from doing "newXS" like this,
-# compared with the old approach of having a (near) duplicate XS body.
-# We should fix the typemap checking.
-*B::IV::RV = \*B::PV::RV if $] > 5.012;
-
-my $debug;
-my $op_count = 0;
-my @parents = ();
-
-sub debug {
- my ($class, $value) = @_;
- $debug = $value;
- walkoptree_debug($value);
-}
-
-sub class {
- my $obj = shift;
- my $name = ref $obj;
- $name =~ s/^.*:://;
- return $name;
-}
-
-sub parents { \@parents }
-
-# For debugging
-sub peekop {
- my $op = shift;
- return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
-}
-
-sub walkoptree_slow {
- my($op, $method, $level) = @_;
- $op_count++; # just for statistics
- $level ||= 0;
- warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
- $op->$method($level) if $op->can($method);
- if ($$op && ($op->flags & OPf_KIDS)) {
- my $kid;
- unshift(@parents, $op);
- for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
- walkoptree_slow($kid, $method, $level + 1);
- }
- shift @parents;
- }
- if (class($op) eq 'PMOP'
- && ref($op->pmreplroot)
- && ${$op->pmreplroot}
- && $op->pmreplroot->isa( 'B::OP' ))
- {
- unshift(@parents, $op);
- walkoptree_slow($op->pmreplroot, $method, $level + 1);
- shift @parents;
- }
-}
-
-sub compile_stats {
- return "Total number of OPs processed: $op_count\n";
-}
-
-sub timing_info {
- my ($sec, $min, $hr) = localtime;
- my ($user, $sys) = times;
- sprintf("%02d:%02d:%02d user=$user sys=$sys",
- $hr, $min, $sec, $user, $sys);
-}
-
-my %symtable;
-
-sub clearsym {
- %symtable = ();
-}
-
-sub savesym {
- my ($obj, $value) = @_;
-# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
- $symtable{sprintf("sym_%x", $$obj)} = $value;
-}
-
-sub objsym {
- my $obj = shift;
- return $symtable{sprintf("sym_%x", $$obj)};
-}
-
-sub walkoptree_exec {
- my ($op, $method, $level) = @_;
- $level ||= 0;
- my ($sym, $ppname);
- my $prefix = " " x $level;
- for (; $$op; $op = $op->next) {
- $sym = objsym($op);
- if (defined($sym)) {
- print $prefix, "goto $sym\n";
- return;
- }
- savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
- $op->$method($level);
- $ppname = $op->name;
- if ($ppname =~
- /^(d?or(assign)?|and(assign)?|mapwhile|grepwhile|entertry|range|cond_expr)$/)
- {
- print $prefix, uc($1), " => {\n";
- walkoptree_exec($op->other, $method, $level + 1);
- print $prefix, "}\n";
- } elsif ($ppname eq "match" || $ppname eq "subst") {
- my $pmreplstart = $op->pmreplstart;
- if ($$pmreplstart) {
- print $prefix, "PMREPLSTART => {\n";
- walkoptree_exec($pmreplstart, $method, $level + 1);
- print $prefix, "}\n";
- }
- } elsif ($ppname eq "substcont") {
- print $prefix, "SUBSTCONT => {\n";
- walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
- print $prefix, "}\n";
- $op = $op->other;
- } elsif ($ppname eq "enterloop") {
- print $prefix, "REDO => {\n";
- walkoptree_exec($op->redoop, $method, $level + 1);
- print $prefix, "}\n", $prefix, "NEXT => {\n";
- walkoptree_exec($op->nextop, $method, $level + 1);
- print $prefix, "}\n", $prefix, "LAST => {\n";
- walkoptree_exec($op->lastop, $method, $level + 1);
- print $prefix, "}\n";
- } elsif ($ppname eq "subst") {
- my $replstart = $op->pmreplstart;
- if ($$replstart) {
- print $prefix, "SUBST => {\n";
- walkoptree_exec($replstart, $method, $level + 1);
- print $prefix, "}\n";
- }
- }
- }
-}
-
-sub walksymtable {
- my ($symref, $method, $recurse, $prefix) = @_;
- my $sym;
- my $ref;
- my $fullname;
- no strict 'refs';
- $prefix = '' unless defined $prefix;
- foreach my $sym ( sort keys %$symref ) {
- $ref= $symref->{$sym};
- $fullname = "*main::".$prefix.$sym;
- if ($sym =~ /::$/) {
- $sym = $prefix . $sym;
- if (svref_2object(\*$sym)->NAME ne "main::" && $sym ne "::" && &$recurse($sym)) {
- walksymtable(\%$fullname, $method, $recurse, $sym);
- }
- } else {
- svref_2object(\*$fullname)->$method();
- }
- }
-}
-
-1;
-
-__END__
-
-#line 1419
diff --git a/software/Slic3r-1.3.0.64bit/lib/B/Deparse.pm b/software/Slic3r-1.3.0.64bit/lib/B/Deparse.pm
deleted file mode 100644
index b1ebd47a..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/B/Deparse.pm
+++ /dev/null
@@ -1,5779 +0,0 @@
-#line 1 "B/Deparse.pm"
-# B::Deparse.pm
-# Copyright (c) 1998-2000, 2002, 2003, 2004, 2005, 2006 Stephen McCamant.
-# All rights reserved.
-# This module is free software; you can redistribute and/or modify
-# it under the same terms as Perl itself.
-
-# This is based on the module of the same name by Malcolm Beattie,
-# but essentially none of his code remains.
-
-package B::Deparse;
-use Carp;
-use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
- OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST
- OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD OPf_PARENS
- OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE
- OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY
- OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER OPpREPEAT_DOLIST
- OPpSORT_REVERSE OPpMULTIDEREF_EXISTS OPpMULTIDEREF_DELETE
- SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG
- SVs_PADTMP SVpad_TYPED
- CVf_METHOD CVf_LVALUE
- PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE
- PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED PMf_EXTENDED_MORE
- PADNAMEt_OUTER
- MDEREF_reload
- MDEREF_AV_pop_rv2av_aelem
- MDEREF_AV_gvsv_vivify_rv2av_aelem
- MDEREF_AV_padsv_vivify_rv2av_aelem
- MDEREF_AV_vivify_rv2av_aelem
- MDEREF_AV_padav_aelem
- MDEREF_AV_gvav_aelem
- MDEREF_HV_pop_rv2hv_helem
- MDEREF_HV_gvsv_vivify_rv2hv_helem
- MDEREF_HV_padsv_vivify_rv2hv_helem
- MDEREF_HV_vivify_rv2hv_helem
- MDEREF_HV_padhv_helem
- MDEREF_HV_gvhv_helem
- MDEREF_ACTION_MASK
- MDEREF_INDEX_none
- MDEREF_INDEX_const
- MDEREF_INDEX_padsv
- MDEREF_INDEX_gvsv
- MDEREF_INDEX_MASK
- MDEREF_FLAG_last
- MDEREF_MASK
- MDEREF_SHIFT
- );
-
-$VERSION = '1.37';
-use strict;
-use vars qw/$AUTOLOAD/;
-use warnings ();
-require feature;
-
-BEGIN {
- # List version-specific constants here.
- # Easiest way to keep this code portable between version looks to
- # be to fake up a dummy constant that will never actually be true.
- foreach (qw(OPpSORT_INPLACE OPpSORT_DESCEND OPpITER_REVERSED OPpCONST_NOVER
- OPpPAD_STATE PMf_SKIPWHITE RXf_SKIPWHITE
- PMf_CHARSET PMf_KEEPCOPY PMf_NOCAPTURE CVf_ANONCONST
- CVf_LOCKED OPpREVERSE_INPLACE OPpSUBSTR_REPL_FIRST
- PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES
- OPpLVREF_TYPE OPpLVREF_SV OPpLVREF_AV OPpLVREF_HV
- OPpLVREF_CV OPpLVREF_ELEM SVpad_STATE)) {
- eval { B->import($_) };
- no strict 'refs';
- *{$_} = sub () {0} unless *{$_}{CODE};
- }
-}
-
-# Changes between 0.50 and 0.51:
-# - fixed nulled leave with live enter in sort { }
-# - fixed reference constants (\"str")
-# - handle empty programs gracefully
-# - handle infinite loops (for (;;) {}, while (1) {})
-# - differentiate between 'for my $x ...' and 'my $x; for $x ...'
-# - various minor cleanups
-# - moved globals into an object
-# - added '-u', like B::C
-# - package declarations using cop_stash
-# - subs, formats and code sorted by cop_seq
-# Changes between 0.51 and 0.52:
-# - added pp_threadsv (special variables under USE_5005THREADS)
-# - added documentation
-# Changes between 0.52 and 0.53:
-# - many changes adding precedence contexts and associativity
-# - added '-p' and '-s' output style options
-# - various other minor fixes
-# Changes between 0.53 and 0.54:
-# - added support for new 'for (1..100)' optimization,
-# thanks to Gisle Aas
-# Changes between 0.54 and 0.55:
-# - added support for new qr// construct
-# - added support for new pp_regcreset OP
-# Changes between 0.55 and 0.56:
-# - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t
-# - fixed $# on non-lexicals broken in last big rewrite
-# - added temporary fix for change in opcode of OP_STRINGIFY
-# - fixed problem in 0.54's for() patch in 'for (@ary)'
-# - fixed precedence in conditional of ?:
-# - tweaked list paren elimination in 'my($x) = @_'
-# - made continue-block detection trickier wrt. null ops
-# - fixed various prototype problems in pp_entersub
-# - added support for sub prototypes that never get GVs
-# - added unquoting for special filehandle first arg in truncate
-# - print doubled rv2gv (a bug) as '*{*GV}' instead of illegal '**GV'
-# - added semicolons at the ends of blocks
-# - added -l '#line' declaration option -- fixes cmd/subval.t 27,28
-# Changes between 0.56 and 0.561:
-# - fixed multiply-declared my var in pp_truncate (thanks to Sarathy)
-# - used new B.pm symbolic constants (done by Nick Ing-Simmons)
-# Changes between 0.561 and 0.57:
-# - stylistic changes to symbolic constant stuff
-# - handled scope in s///e replacement code
-# - added unquote option for expanding "" into concats, etc.
-# - split method and proto parts of pp_entersub into separate functions
-# - various minor cleanups
-# Changes after 0.57:
-# - added parens in \&foo (patch by Albert Dvornik)
-# Changes between 0.57 and 0.58:
-# - fixed '0' statements that weren't being printed
-# - added methods for use from other programs
-# (based on patches from James Duncan and Hugo van der Sanden)
-# - added -si and -sT to control indenting (also based on a patch from Hugo)
-# - added -sv to print something else instead of '???'
-# - preliminary version of utf8 tr/// handling
-# Changes after 0.58:
-# - uses of $op->ppaddr changed to new $op->name (done by Sarathy)
-# - added support for Hugo's new OP_SETSTATE (like nextstate)
-# Changes between 0.58 and 0.59
-# - added support for Chip's OP_METHOD_NAMED
-# - added support for Ilya's OPpTARGET_MY optimization
-# - elided arrows before '()' subscripts when possible
-# Changes between 0.59 and 0.60
-# - support for method attributes was added
-# - some warnings fixed
-# - separate recognition of constant subs
-# - rewrote continue block handling, now recognizing for loops
-# - added more control of expanding control structures
-# Changes between 0.60 and 0.61 (mostly by Robin Houston)
-# - many bug-fixes
-# - support for pragmas and 'use'
-# - support for the little-used $[ variable
-# - support for __DATA__ sections
-# - UTF8 support
-# - BEGIN, CHECK, INIT and END blocks
-# - scoping of subroutine declarations fixed
-# - compile-time output from the input program can be suppressed, so that the
-# output is just the deparsed code. (a change to O.pm in fact)
-# - our() declarations
-# - *all* the known bugs are now listed in the BUGS section
-# - comprehensive test mechanism (TEST -deparse)
-# Changes between 0.62 and 0.63 (mostly by Rafael Garcia-Suarez)
-# - bug-fixes
-# - new switch -P
-# - support for command-line switches (-l, -0, etc.)
-# Changes between 0.63 and 0.64
-# - support for //, CHECK blocks, and assertions
-# - improved handling of foreach loops and lexicals
-# - option to use Data::Dumper for constants
-# - more bug fixes
-# - discovered lots more bugs not yet fixed
-#
-# ...
-#
-# Changes between 0.72 and 0.73
-# - support new switch constructs
-
-# Todo:
-# (See also BUGS section at the end of this file)
-#
-# - finish tr/// changes
-# - add option for even more parens (generalize \&foo change)
-# - left/right context
-# - copy comments (look at real text with $^P?)
-# - avoid semis in one-statement blocks
-# - associativity of &&=, ||=, ?:
-# - ',' => '=>' (auto-unquote?)
-# - break long lines ("\r" as discretionary break?)
-# - configurable syntax highlighting: ANSI color, HTML, TeX, etc.
-# - more style options: brace style, hex vs. octal, quotes, ...
-# - print big ints as hex/octal instead of decimal (heuristic?)
-# - handle 'my $x if 0'?
-# - version using op_next instead of op_first/sibling?
-# - avoid string copies (pass arrays, one big join?)
-# - here-docs?
-
-# Current test.deparse failures
-# comp/hints 6 - location of BEGIN blocks wrt. block openings
-# run/switchI 1 - missing -I switches entirely
-# perl -Ifoo -e 'print @INC'
-# op/caller 2 - warning mask propagates backwards before warnings::register
-# 'use warnings; BEGIN {${^WARNING_BITS} eq "U"x12;} use warnings::register'
-# op/getpid 2 - can't assign to shared my() declaration (threads only)
-# 'my $x : shared = 5'
-# op/override 7 - parens on overridden require change v-string interpretation
-# 'BEGIN{*CORE::GLOBAL::require=sub {}} require v5.6'
-# c.f. 'BEGIN { *f = sub {0} }; f 2'
-# op/pat 774 - losing Unicode-ness of Latin1-only strings
-# 'use charnames ":short"; $x="\N{latin:a with acute}"'
-# op/recurse 12 - missing parens on recursive call makes it look like method
-# 'sub f { f($x) }'
-# op/subst 90 - inconsistent handling of utf8 under "use utf8"
-# op/taint 29 - "use re 'taint'" deparsed in the wrong place wrt. block open
-# op/tiehandle compile - "use strict" deparsed in the wrong place
-# uni/tr_ several
-# ext/B/t/xref 11 - line numbers when we add newlines to one-line subs
-# ext/Data/Dumper/t/dumper compile
-# ext/DB_file/several
-# ext/Encode/several
-# ext/Ernno/Errno warnings
-# ext/IO/lib/IO/t/io_sel 23
-# ext/PerlIO/t/encoding compile
-# ext/POSIX/t/posix 6
-# ext/Socket/Socket 8
-# ext/Storable/t/croak compile
-# lib/Attribute/Handlers/t/multi compile
-# lib/bignum/ several
-# lib/charnames 35
-# lib/constant 32
-# lib/English 40
-# lib/ExtUtils/t/bytes 4
-# lib/File/DosGlob compile
-# lib/Filter/Simple/t/data 1
-# lib/Math/BigInt/t/constant 1
-# lib/Net/t/config Deparse-warning
-# lib/overload compile
-# lib/Switch/ several
-# lib/Symbol 4
-# lib/Test/Simple several
-# lib/Term/Complete
-# lib/Tie/File/t/29_downcopy 5
-# lib/vars 22
-
-# Object fields:
-#
-# in_coderef2text:
-# True when deparsing via $deparse->coderef2text; false when deparsing the
-# main program.
-#
-# avoid_local:
-# (local($a), local($b)) and local($a, $b) have the same internal
-# representation but the short form looks better. We notice we can
-# use a large-scale local when checking the list, but need to prevent
-# individual locals too. This hash holds the addresses of OPs that
-# have already had their local-ness accounted for. The same thing
-# is done with my().
-#
-# curcv:
-# CV for current sub (or main program) being deparsed
-#
-# curcvlex:
-# Cached hash of lexical variables for curcv: keys are
-# names prefixed with "m" or "o" (representing my/our), and
-# each value is an array with two elements indicating the cop_seq
-# of scopes in which a var of that name is valid and a third ele-
-# ment referencing the pad name.
-#
-# curcop:
-# COP for statement being deparsed
-#
-# curstash:
-# name of the current package for deparsed code
-#
-# subs_todo:
-# array of [cop_seq, CV, is_format?, name] for subs and formats we still
-# want to deparse. The fourth element is a pad name thingy for lexical
-# subs or a string for special blocks. For other subs, it is undef. For
-# lexical subs, CV may be undef, indicating a stub declaration.
-#
-# protos_todo:
-# as above, but [name, prototype] for subs that never got a GV
-#
-# subs_done, forms_done:
-# keys are addresses of GVs for subs and formats we've already
-# deparsed (or at least put into subs_todo)
-#
-# subs_declared
-# keys are names of subs for which we've printed declarations.
-# That means we can omit parentheses from the arguments. It also means we
-# need to put CORE:: on core functions of the same name.
-#
-# in_subst_repl
-# True when deparsing the replacement part of a substitution.
-#
-# in_refgen
-# True when deparsing the argument to \.
-#
-# parens: -p
-# linenums: -l
-# unquote: -q
-# cuddle: ' ' or '\n', depending on -sC
-# indent_size: -si
-# use_tabs: -sT
-# ex_const: -sv
-
-# A little explanation of how precedence contexts and associativity
-# work:
-#
-# deparse() calls each per-op subroutine with an argument $cx (short
-# for context, but not the same as the cx* in the perl core), which is
-# a number describing the op's parents in terms of precedence, whether
-# they're inside an expression or at statement level, etc. (see
-# chart below). When ops with children call deparse on them, they pass
-# along their precedence. Fractional values are used to implement
-# associativity ('($x + $y) + $z' => '$x + $y + $y') and related
-# parentheses hacks. The major disadvantage of this scheme is that
-# it doesn't know about right sides and left sides, so say if you
-# assign a listop to a variable, it can't tell it's allowed to leave
-# the parens off the listop.
-
-# Precedences:
-# 26 [TODO] inside interpolation context ("")
-# 25 left terms and list operators (leftward)
-# 24 left ->
-# 23 nonassoc ++ --
-# 22 right **
-# 21 right ! ~ \ and unary + and -
-# 20 left =~ !~
-# 19 left * / % x
-# 18 left + - .
-# 17 left << >>
-# 16 nonassoc named unary operators
-# 15 nonassoc < > <= >= lt gt le ge
-# 14 nonassoc == != <=> eq ne cmp
-# 13 left &
-# 12 left | ^
-# 11 left &&
-# 10 left ||
-# 9 nonassoc .. ...
-# 8 right ?:
-# 7 right = += -= *= etc.
-# 6 left , =>
-# 5 nonassoc list operators (rightward)
-# 4 right not
-# 3 left and
-# 2 left or xor
-# 1 statement modifiers
-# 0.5 statements, but still print scopes as do { ... }
-# 0 statement level
-# -1 format body
-
-# Nonprinting characters with special meaning:
-# \cS - steal parens (see maybe_parens_unop)
-# \n - newline and indent
-# \t - increase indent
-# \b - decrease indent ('outdent')
-# \f - flush left (no indent)
-# \cK - kill following semicolon, if any
-
-# Semicolon handling:
-# - Individual statements are not deparsed with trailing semicolons.
-# (If necessary, \cK is tacked on to the end.)
-# - Whatever code joins statements together or emits them (lineseq,
-# scopeop, deparse_root) is responsible for adding semicolons where
-# necessary.
-# - use statements are deparsed with trailing semicolons because they are
-# immediately concatenated with the following statement.
-# - indent() removes semicolons wherever it sees \cK.
-
-
-BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem
- nextstate dbstate rv2av rv2hv helem custom ]) {
- eval "sub OP_\U$_ () { " . opnumber($_) . "}"
-}}
-
-# _pessimise_walk(): recursively walk the optree of a sub,
-# possibly undoing optimisations along the way.
-
-sub _pessimise_walk {
- my ($self, $startop) = @_;
-
- return unless $$startop;
- my ($op, $prevop);
- for ($op = $startop; $$op; $prevop = $op, $op = $op->sibling) {
- my $ppname = $op->name;
-
- # pessimisations start here
-
- if ($ppname eq "padrange") {
- # remove PADRANGE:
- # the original optimisation either (1) changed this:
- # pushmark -> (various pad and list and null ops) -> the_rest
- # or (2), for the = @_ case, changed this:
- # pushmark -> gv[_] -> rv2av -> (pad stuff) -> the_rest
- # into this:
- # padrange ----------------------------------------> the_rest
- # so we just need to convert the padrange back into a
- # pushmark, and in case (1), set its op_next to op_sibling,
- # which is the head of the original chain of optimised-away
- # pad ops, or for (2), set it to sibling->first, which is
- # the original gv[_].
-
- $B::overlay->{$$op} = {
- type => OP_PUSHMARK,
- name => 'pushmark',
- private => ($op->private & OPpLVAL_INTRO),
- };
- }
-
- # pessimisations end here
-
- if (class($op) eq 'PMOP'
- && ref($op->pmreplroot)
- && ${$op->pmreplroot}
- && $op->pmreplroot->isa( 'B::OP' ))
- {
- $self-> _pessimise_walk($op->pmreplroot);
- }
-
- if ($op->flags & OPf_KIDS) {
- $self-> _pessimise_walk($op->first);
- }
-
- }
-}
-
-
-# _pessimise_walk_exe(): recursively walk the op_next chain of a sub,
-# possibly undoing optimisations along the way.
-
-sub _pessimise_walk_exe {
- my ($self, $startop, $visited) = @_;
-
- return unless $$startop;
- return if $visited->{$$startop};
- my ($op, $prevop);
- for ($op = $startop; $$op; $prevop = $op, $op = $op->next) {
- last if $visited->{$$op};
- $visited->{$$op} = 1;
- my $ppname = $op->name;
- if ($ppname =~
- /^((and|d?or)(assign)?|(map|grep)while|range|cond_expr|once)$/
- # entertry is also a logop, but its op_other invariably points
- # into the same chain as the main execution path, so we skip it
- ) {
- $self->_pessimise_walk_exe($op->other, $visited);
- }
- elsif ($ppname eq "subst") {
- $self->_pessimise_walk_exe($op->pmreplstart, $visited);
- }
- elsif ($ppname =~ /^(enter(loop|iter))$/) {
- # redoop and nextop will already be covered by the main block
- # of the loop
- $self->_pessimise_walk_exe($op->lastop, $visited);
- }
-
- # pessimisations start here
- }
-}
-
-# Go through an optree and "remove" some optimisations by using an
-# overlay to selectively modify or un-null some ops. Deparsing in the
-# absence of those optimisations is then easier.
-#
-# Note that older optimisations are not removed, as Deparse was already
-# written to recognise them before the pessimise/overlay system was added.
-
-sub pessimise {
- my ($self, $root, $start) = @_;
-
- # walk tree in root-to-branch order
- $self->_pessimise_walk($root);
-
- my %visited;
- # walk tree in execution order
- $self->_pessimise_walk_exe($start, \%visited);
-}
-
-
-sub null {
- my $op = shift;
- return class($op) eq "NULL";
-}
-
-sub todo {
- my $self = shift;
- my($cv, $is_form, $name) = @_;
- my $cvfile = $cv->FILE//'';
- return unless ($cvfile eq $0 || exists $self->{files}{$cvfile});
- my $seq;
- if ($cv->OUTSIDE_SEQ) {
- $seq = $cv->OUTSIDE_SEQ;
- } elsif (!null($cv->START) and is_state($cv->START)) {
- $seq = $cv->START->cop_seq;
- } else {
- $seq = 0;
- }
- push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form, $name];
-}
-
-sub next_todo {
- my $self = shift;
- my $ent = shift @{$self->{'subs_todo'}};
- my $cv = $ent->[1];
- if (ref $ent->[3]) { # lexical sub
- my @text;
-
- # At this point, we may not yet have deparsed the hints that allow
- # lexical subroutines to be recognized. So adjust the current
- # hints and deparse them.
- # When lex subs cease being experimental, we should be able to
- # remove this code.
- {
- local $^H = $self->{'hints'};
- local %^H = %{ $self->{'hinthash'} || {} };
- local ${^WARNING_BITS} = $self->{'warnings'};
- feature->import("lexical_subs");
- warnings->unimport("experimental::lexical_subs");
- # Here we depend on the fact that individual features
- # will always set the feature bundle to ‘custom’
- # (== $feature::hint_mask). If we had another specific bundle
- # enabled previously, normalise it.
- if (($self->{'hints'} & $feature::hint_mask)
- != $feature::hint_mask)
- {
- if ($self->{'hinthash'}) {
- delete $self->{'hinthash'}{$_}
- for grep /^feature_/, keys %{$self->{'hinthash'}};
- }
- else { $self->{'hinthash'} = {} }
- $self->{'hinthash'}
- = _features_from_bundle(@$self{'hints','hinthash'});
- }
- push @text, $self->declare_hinthash($self->{'hinthash'}, \%^H,
- $self->{indent_size}, $^H);
- push @text, $self->declare_warnings($self->{'warnings'},
- ${^WARNING_BITS})
- unless ($self->{'warnings'} // 'u')
- eq (${^WARNING_BITS } // 'u');
- $self->{'warnings'} = ${^WARNING_BITS};
- $self->{'hints'} = $^H;
- $self->{'hinthash'} = {%^H};
- }
-
- # Now emit the sub itself.
- my $padname = $ent->[3];
- my $flags = $padname->FLAGS;
- push @text,
- !$cv || $ent->[0] <= $padname->COP_SEQ_RANGE_LOW
- ? $self->keyword($flags & SVpad_OUR
- ? "our"
- : $flags & SVpad_STATE
- ? "state"
- : "my") . " "
- : "";
- # XXX We would do $self->keyword("sub"), but ‘my CORE::sub’
- # doesn’t work and ‘my sub’ ignores a &sub in scope. I.e.,
- # we have a core bug here.
- push @text, "sub " . substr $padname->PVX, 1;
- if ($cv) {
- # my sub foo { }
- push @text, " " . $self->deparse_sub($cv);
- $text[-1] =~ s/ ;$/;/;
- }
- else {
- # my sub foo;
- push @text, ";\n";
- }
- return join "", @text;
- }
- my $gv = $cv->GV;
- my $name = $ent->[3] // $self->gv_name($gv);
- if ($ent->[2]) {
- return $self->keyword("format") . " $name =\n"
- . $self->deparse_format($ent->[1]). "\n";
- } else {
- my $use_dec;
- if ($name eq "BEGIN") {
- $use_dec = $self->begin_is_use($cv);
- if (defined ($use_dec) and $self->{'expand'} < 5) {
- return () if 0 == length($use_dec);
- $use_dec =~ s/^(use|no)\b/$self->keyword($1)/e;
- }
- }
- my $l = '';
- if ($self->{'linenums'}) {
- my $line = $gv->LINE;
- my $file = $gv->FILE;
- $l = "\n\f#line $line \"$file\"\n";
- }
- my $p = '';
- my $stash;
- if (class($cv->STASH) ne "SPECIAL") {
- $stash = $cv->STASH->NAME;
- if ($stash ne $self->{'curstash'}) {
- $p = $self->keyword("package") . " $stash;\n";
- $name = "$self->{'curstash'}::$name" unless $name =~ /::/;
- $self->{'curstash'} = $stash;
- }
- }
- if ($use_dec) {
- return "$p$l$use_dec";
- }
- if ( $name !~ /::/ and $self->lex_in_scope("&$name")
- || $self->lex_in_scope("&$name", 1) )
- {
- $name = "$self->{'curstash'}::$name";
- } elsif (defined $stash) {
- $name =~ s/^\Q$stash\E::(?!\z|.*::)//;
- }
- my $ret = "${p}${l}" . $self->keyword("sub") . " $name "
- . $self->deparse_sub($cv);
- $self->{'subs_declared'}{$name} = 1;
- return $ret;
- }
-}
-
-# Return a "use" declaration for this BEGIN block, if appropriate
-sub begin_is_use {
- my ($self, $cv) = @_;
- my $root = $cv->ROOT;
- local @$self{qw'curcv curcvlex'} = ($cv);
- local $B::overlay = {};
- $self->pessimise($root, $cv->START);
-#require B::Debug;
-#B::walkoptree($cv->ROOT, "debug");
- my $lineseq = $root->first;
- return if $lineseq->name ne "lineseq";
-
- my $req_op = $lineseq->first->sibling;
- return if $req_op->name ne "require";
-
- my $module;
- if ($req_op->first->private & OPpCONST_BARE) {
- # Actually it should always be a bareword
- $module = $self->const_sv($req_op->first)->PV;
- $module =~ s[/][::]g;
- $module =~ s/.pm$//;
- }
- else {
- $module = $self->const($self->const_sv($req_op->first), 6);
- }
-
- my $version;
- my $version_op = $req_op->sibling;
- return if class($version_op) eq "NULL";
- if ($version_op->name eq "lineseq") {
- # We have a version parameter; skip nextstate & pushmark
- my $constop = $version_op->first->next->next;
-
- return unless $self->const_sv($constop)->PV eq $module;
- $constop = $constop->sibling;
- $version = $self->const_sv($constop);
- if (class($version) eq "IV") {
- $version = $version->int_value;
- } elsif (class($version) eq "NV") {
- $version = $version->NV;
- } elsif (class($version) ne "PVMG") {
- # Includes PVIV and PVNV
- $version = $version->PV;
- } else {
- # version specified as a v-string
- $version = 'v'.join '.', map ord, split //, $version->PV;
- }
- $constop = $constop->sibling;
- return if $constop->name ne "method_named";
- return if $self->meth_sv($constop)->PV ne "VERSION";
- }
-
- $lineseq = $version_op->sibling;
- return if $lineseq->name ne "lineseq";
- my $entersub = $lineseq->first->sibling;
- if ($entersub->name eq "stub") {
- return "use $module $version ();\n" if defined $version;
- return "use $module ();\n";
- }
- return if $entersub->name ne "entersub";
-
- # See if there are import arguments
- my $args = '';
-
- my $svop = $entersub->first->sibling; # Skip over pushmark
- return unless $self->const_sv($svop)->PV eq $module;
-
- # Pull out the arguments
- for ($svop=$svop->sibling; index($svop->name, "method_") != 0;
- $svop = $svop->sibling) {
- $args .= ", " if length($args);
- $args .= $self->deparse($svop, 6);
- }
-
- my $use = 'use';
- my $method_named = $svop;
- return if $method_named->name ne "method_named";
- my $method_name = $self->meth_sv($method_named)->PV;
-
- if ($method_name eq "unimport") {
- $use = 'no';
- }
-
- # Certain pragmas are dealt with using hint bits,
- # so we ignore them here
- if ($module eq 'strict' || $module eq 'integer'
- || $module eq 'bytes' || $module eq 'warnings'
- || $module eq 'feature') {
- return "";
- }
-
- if (defined $version && length $args) {
- return "$use $module $version ($args);\n";
- } elsif (defined $version) {
- return "$use $module $version;\n";
- } elsif (length $args) {
- return "$use $module ($args);\n";
- } else {
- return "$use $module;\n";
- }
-}
-
-sub stash_subs {
- my ($self, $pack, $seen) = @_;
- my (@ret, $stash);
- if (!defined $pack) {
- $pack = '';
- $stash = \%::;
- }
- else {
- $pack =~ s/(::)?$/::/;
- no strict 'refs';
- $stash = \%{"main::$pack"};
- }
- return
- if ($seen ||= {})->{
- $INC{"overload.pm"} ? overload::StrVal($stash) : $stash
- }++;
- my %stash = svref_2object($stash)->ARRAY;
- while (my ($key, $val) = each %stash) {
- my $flags = $val->FLAGS;
- if ($flags & SVf_ROK) {
- # A reference. Dump this if it is a reference to a CV. If it
- # is a constant acting as a proxy for a full subroutine, then
- # we may or may not have to dump it. If some form of perl-
- # space visible code must have created it, be it a use
- # statement, or some direct symbol-table manipulation code that
- # we will deparse, then we don’t want to dump it. If it is the
- # result of a declaration like sub f () { 42 } then we *do*
- # want to dump it. The only way to distinguish these seems
- # to be the SVs_PADTMP flag on the constant, which is admit-
- # tedly a hack.
- my $class = class(my $referent = $val->RV);
- if ($class eq "CV") {
- $self->todo($referent, 0);
- } elsif (
- $class !~ /^(AV|HV|CV|FM|IO|SPECIAL)\z/
- # A more robust way to write that would be this, but B does
- # not provide the SVt_ constants:
- # ($referent->FLAGS & B::SVTYPEMASK) < B::SVt_PVAV
- and $referent->FLAGS & SVs_PADTMP
- ) {
- push @{$self->{'protos_todo'}}, [$pack . $key, $val];
- }
- } elsif ($flags & (SVf_POK|SVf_IOK)) {
- # Just a prototype. As an ugly but fairly effective way
- # to find out if it belongs here is to see if the AUTOLOAD
- # (if any) for the stash was defined in one of our files.
- my $A = $stash{"AUTOLOAD"};
- if (defined ($A) && class($A) eq "GV" && defined($A->CV)
- && class($A->CV) eq "CV") {
- my $AF = $A->FILE;
- next unless $AF eq $0 || exists $self->{'files'}{$AF};
- }
- push @{$self->{'protos_todo'}},
- [$pack . $key, $flags & SVf_POK ? $val->PV: undef];
- } elsif (class($val) eq "GV") {
- if (class(my $cv = $val->CV) ne "SPECIAL") {
- next if $self->{'subs_done'}{$$val}++;
- next if $$val != ${$cv->GV}; # Ignore imposters
- $self->todo($cv, 0);
- }
- if (class(my $cv = $val->FORM) ne "SPECIAL") {
- next if $self->{'forms_done'}{$$val}++;
- next if $$val != ${$cv->GV}; # Ignore imposters
- $self->todo($cv, 1);
- }
- if (class($val->HV) ne "SPECIAL" && $key =~ /::$/) {
- $self->stash_subs($pack . $key, $seen);
- }
- }
- }
-}
-
-sub print_protos {
- my $self = shift;
- my $ar;
- my @ret;
- foreach $ar (@{$self->{'protos_todo'}}) {
- my $body = defined $ar->[1]
- ? ref $ar->[1]
- ? " () {\n " . $self->const($ar->[1]->RV,0) . ";\n}"
- : " (". $ar->[1] . ");"
- : ";";
- push @ret, "sub " . $ar->[0] . "$body\n";
- }
- delete $self->{'protos_todo'};
- return @ret;
-}
-
-sub style_opts {
- my $self = shift;
- my $opts = shift;
- my $opt;
- while (length($opt = substr($opts, 0, 1))) {
- if ($opt eq "C") {
- $self->{'cuddle'} = " ";
- $opts = substr($opts, 1);
- } elsif ($opt eq "i") {
- $opts =~ s/^i(\d+)//;
- $self->{'indent_size'} = $1;
- } elsif ($opt eq "T") {
- $self->{'use_tabs'} = 1;
- $opts = substr($opts, 1);
- } elsif ($opt eq "v") {
- $opts =~ s/^v([^.]*)(.|$)//;
- $self->{'ex_const'} = $1;
- }
- }
-}
-
-sub new {
- my $class = shift;
- my $self = bless {}, $class;
- $self->{'cuddle'} = "\n";
- $self->{'curcop'} = undef;
- $self->{'curstash'} = "main";
- $self->{'ex_const'} = "'???'";
- $self->{'expand'} = 0;
- $self->{'files'} = {};
- $self->{'indent_size'} = 4;
- $self->{'linenums'} = 0;
- $self->{'parens'} = 0;
- $self->{'subs_todo'} = [];
- $self->{'unquote'} = 0;
- $self->{'use_dumper'} = 0;
- $self->{'use_tabs'} = 0;
-
- $self->{'ambient_arybase'} = 0;
- $self->{'ambient_warnings'} = undef; # Assume no lexical warnings
- $self->{'ambient_hints'} = 0;
- $self->{'ambient_hinthash'} = undef;
- $self->init();
-
- while (my $arg = shift @_) {
- if ($arg eq "-d") {
- $self->{'use_dumper'} = 1;
- require Data::Dumper;
- } elsif ($arg =~ /^-f(.*)/) {
- $self->{'files'}{$1} = 1;
- } elsif ($arg eq "-l") {
- $self->{'linenums'} = 1;
- } elsif ($arg eq "-p") {
- $self->{'parens'} = 1;
- } elsif ($arg eq "-P") {
- $self->{'noproto'} = 1;
- } elsif ($arg eq "-q") {
- $self->{'unquote'} = 1;
- } elsif (substr($arg, 0, 2) eq "-s") {
- $self->style_opts(substr $arg, 2);
- } elsif ($arg =~ /^-x(\d)$/) {
- $self->{'expand'} = $1;
- }
- }
- return $self;
-}
-
-{
- # Mask out the bits that L uses
- my $WARN_MASK;
- BEGIN {
- $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
- }
- sub WARN_MASK () {
- return $WARN_MASK;
- }
-}
-
-# Initialise the contextual information, either from
-# defaults provided with the ambient_pragmas method,
-# or from perl's own defaults otherwise.
-sub init {
- my $self = shift;
-
- $self->{'arybase'} = $self->{'ambient_arybase'};
- $self->{'warnings'} = defined ($self->{'ambient_warnings'})
- ? $self->{'ambient_warnings'} & WARN_MASK
- : undef;
- $self->{'hints'} = $self->{'ambient_hints'};
- $self->{'hints'} &= 0xFF if $] < 5.009;
- $self->{'hinthash'} = $self->{'ambient_hinthash'};
-
- # also a convenient place to clear out subs_declared
- delete $self->{'subs_declared'};
-}
-
-sub compile {
- my(@args) = @_;
- return sub {
- my $self = B::Deparse->new(@args);
- # First deparse command-line args
- if (defined $^I) { # deparse -i
- print q(BEGIN { $^I = ).perlstring($^I).qq(; }\n);
- }
- if ($^W) { # deparse -w
- print qq(BEGIN { \$^W = $^W; }\n);
- }
- if ($/ ne "\n" or defined $O::savebackslash) { # deparse -l and -0
- my $fs = perlstring($/) || 'undef';
- my $bs = perlstring($O::savebackslash) || 'undef';
- print qq(BEGIN { \$/ = $fs; \$\\ = $bs; }\n);
- }
- my @BEGINs = B::begin_av->isa("B::AV") ? B::begin_av->ARRAY : ();
- my @UNITCHECKs = B::unitcheck_av->isa("B::AV")
- ? B::unitcheck_av->ARRAY
- : ();
- my @CHECKs = B::check_av->isa("B::AV") ? B::check_av->ARRAY : ();
- my @INITs = B::init_av->isa("B::AV") ? B::init_av->ARRAY : ();
- my @ENDs = B::end_av->isa("B::AV") ? B::end_av->ARRAY : ();
- my @names = qw(BEGIN UNITCHECK CHECK INIT END);
- my @blocks = \(@BEGINs, @UNITCHECKs, @CHECKs, @INITs, @ENDs);
- while (@names) {
- my ($name, $blocks) = (shift @names, shift @blocks);
- for my $block (@$blocks) {
- $self->todo($block, 0, $name);
- }
- }
- $self->stash_subs();
- local($SIG{"__DIE__"}) =
- sub {
- if ($self->{'curcop'}) {
- my $cop = $self->{'curcop'};
- my($line, $file) = ($cop->line, $cop->file);
- print STDERR "While deparsing $file near line $line,\n";
- }
- };
- $self->{'curcv'} = main_cv;
- $self->{'curcvlex'} = undef;
- print $self->print_protos;
- @{$self->{'subs_todo'}} =
- sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}};
- my $root = main_root;
- local $B::overlay = {};
- unless (null $root) {
- $self->pad_subs($self->{'curcv'});
- # Check for a stub-followed-by-ex-cop, resulting from a program
- # consisting solely of sub declarations. For backward-compati-
- # bility (and sane output) we don’t want to emit the stub.
- # leave
- # enter
- # stub
- # ex-nextstate (or ex-dbstate)
- my $kid;
- if ( $root->name eq 'leave'
- and ($kid = $root->first)->name eq 'enter'
- and !null($kid = $kid->sibling) and $kid->name eq 'stub'
- and !null($kid = $kid->sibling) and $kid->name eq 'null'
- and class($kid) eq 'COP' and null $kid->sibling )
- {
- # ignore
- } else {
- $self->pessimise($root, main_start);
- print $self->indent($self->deparse_root($root)), "\n";
- }
- }
- my @text;
- while (scalar(@{$self->{'subs_todo'}})) {
- push @text, $self->next_todo;
- }
- print $self->indent(join("", @text)), "\n" if @text;
-
- # Print __DATA__ section, if necessary
- no strict 'refs';
- my $laststash = defined $self->{'curcop'}
- ? $self->{'curcop'}->stash->NAME : $self->{'curstash'};
- if (defined *{$laststash."::DATA"}{IO}) {
- print $self->keyword("package") . " $laststash;\n"
- unless $laststash eq $self->{'curstash'};
- print $self->keyword("__DATA__") . "\n";
- print readline(*{$laststash."::DATA"});
- }
- }
-}
-
-sub coderef2text {
- my $self = shift;
- my $sub = shift;
- croak "Usage: ->coderef2text(CODEREF)" unless UNIVERSAL::isa($sub, "CODE");
-
- $self->init();
- local $self->{in_coderef2text} = 1;
- return $self->indent($self->deparse_sub(svref_2object($sub)));
-}
-
-my %strict_bits = do {
- local $^H;
- map +($_ => strict::bits($_)), qw/refs subs vars/
-};
-
-sub ambient_pragmas {
- my $self = shift;
- my ($arybase, $hint_bits, $warning_bits, $hinthash) = (0, 0);
-
- while (@_ > 1) {
- my $name = shift();
- my $val = shift();
-
- if ($name eq 'strict') {
- require strict;
-
- if ($val eq 'none') {
- $hint_bits &= $strict_bits{$_} for qw/refs subs vars/;
- next();
- }
-
- my @names;
- if ($val eq "all") {
- @names = qw/refs subs vars/;
- }
- elsif (ref $val) {
- @names = @$val;
- }
- else {
- @names = split' ', $val;
- }
- $hint_bits |= $strict_bits{$_} for @names;
- }
-
- elsif ($name eq '$[') {
- if (OPpCONST_ARYBASE) {
- $arybase = $val;
- } else {
- croak "\$[ can't be non-zero on this perl" unless $val == 0;
- }
- }
-
- elsif ($name eq 'integer'
- || $name eq 'bytes'
- || $name eq 'utf8') {
- require "$name.pm";
- if ($val) {
- $hint_bits |= ${$::{"${name}::"}{"hint_bits"}};
- }
- else {
- $hint_bits &= ~${$::{"${name}::"}{"hint_bits"}};
- }
- }
-
- elsif ($name eq 're') {
- require re;
- if ($val eq 'none') {
- $hint_bits &= ~re::bits(qw/taint eval/);
- next();
- }
-
- my @names;
- if ($val eq 'all') {
- @names = qw/taint eval/;
- }
- elsif (ref $val) {
- @names = @$val;
- }
- else {
- @names = split' ',$val;
- }
- $hint_bits |= re::bits(@names);
- }
-
- elsif ($name eq 'warnings') {
- if ($val eq 'none') {
- $warning_bits = $warnings::NONE;
- next();
- }
-
- my @names;
- if (ref $val) {
- @names = @$val;
- }
- else {
- @names = split/\s+/, $val;
- }
-
- $warning_bits = $warnings::NONE if !defined ($warning_bits);
- $warning_bits |= warnings::bits(@names);
- }
-
- elsif ($name eq 'warning_bits') {
- $warning_bits = $val;
- }
-
- elsif ($name eq 'hint_bits') {
- $hint_bits = $val;
- }
-
- elsif ($name eq '%^H') {
- $hinthash = $val;
- }
-
- else {
- croak "Unknown pragma type: $name";
- }
- }
- if (@_) {
- croak "The ambient_pragmas method expects an even number of args";
- }
-
- $self->{'ambient_arybase'} = $arybase;
- $self->{'ambient_warnings'} = $warning_bits;
- $self->{'ambient_hints'} = $hint_bits;
- $self->{'ambient_hinthash'} = $hinthash;
-}
-
-# This method is the inner loop, so try to keep it simple
-sub deparse {
- my $self = shift;
- my($op, $cx) = @_;
-
- Carp::confess("Null op in deparse") if !defined($op)
- || class($op) eq "NULL";
- my $meth = "pp_" . $op->name;
- return $self->$meth($op, $cx);
-}
-
-sub indent {
- my $self = shift;
- my $txt = shift;
- # \cK also swallows a preceding line break when followed by a
- # semicolon.
- $txt =~ s/\n\cK;//g;
- my @lines = split(/\n/, $txt);
- my $leader = "";
- my $level = 0;
- my $line;
- for $line (@lines) {
- my $cmd = substr($line, 0, 1);
- if ($cmd eq "\t" or $cmd eq "\b") {
- $level += ($cmd eq "\t" ? 1 : -1) * $self->{'indent_size'};
- if ($self->{'use_tabs'}) {
- $leader = "\t" x ($level / 8) . " " x ($level % 8);
- } else {
- $leader = " " x $level;
- }
- $line = substr($line, 1);
- }
- if (index($line, "\f") > 0) {
- $line =~ s/\f/\n/;
- }
- if (substr($line, 0, 1) eq "\f") {
- $line = substr($line, 1); # no indent
- } else {
- $line = $leader . $line;
- }
- $line =~ s/\cK;?//g;
- }
- return join("\n", @lines);
-}
-
-sub pad_subs {
- my ($self, $cv) = @_;
- my $padlist = $cv->PADLIST;
- my @names = $padlist->ARRAYelt(0)->ARRAY;
- my @values = $padlist->ARRAYelt(1)->ARRAY;
- my @todo;
- PADENTRY:
- for my $ix (0.. $#names) { for $_ ($names[$ix]) {
- next if class($_) eq "SPECIAL";
- my $name = $_->PVX;
- if (defined $name && $name =~ /^&./) {
- my $low = $_->COP_SEQ_RANGE_LOW;
- my $flags = $_->FLAGS;
- my $outer = $flags & PADNAMEt_OUTER;
- if ($flags & SVpad_OUR) {
- push @todo, [$low, undef, 0, $_]
- # [seq, no cv, not format, padname]
- unless $outer;
- next;
- }
- my $protocv = $flags & SVpad_STATE
- ? $values[$ix]
- : $_->PROTOCV;
- if (class ($protocv) ne 'CV') {
- my $flags = $flags;
- my $cv = $cv;
- my $name = $_;
- while ($flags & PADNAMEt_OUTER && class ($protocv) ne 'CV')
- {
- $cv = $cv->OUTSIDE;
- next PADENTRY if class($cv) eq 'SPECIAL'; # XXX freed?
- my $padlist = $cv->PADLIST;
- my $ix = $name->PARENT_PAD_INDEX;
- $name = $padlist->NAMES->ARRAYelt($ix);
- $flags = $name->FLAGS;
- $protocv = $flags & SVpad_STATE
- ? $padlist->ARRAYelt(1)->ARRAYelt($ix)
- : $name->PROTOCV;
- }
- }
- my $defined_in_this_sub = ${$protocv->OUTSIDE} == $$cv || do {
- my $other = $protocv->PADLIST;
- $$other && $other->outid == $padlist->id;
- };
- if ($flags & PADNAMEt_OUTER) {
- next unless $defined_in_this_sub;
- push @todo, [$protocv->OUTSIDE_SEQ, $protocv, 0, $_];
- next;
- }
- my $outseq = $protocv->OUTSIDE_SEQ;
- if ($outseq <= $low) {
- # defined before its name is visible, so it’s gotta be
- # declared and defined at once: my sub foo { ... }
- push @todo, [$low, $protocv, 0, $_];
- }
- else {
- # declared and defined separately: my sub f; sub f { ... }
- push @todo, [$low, undef, 0, $_];
- push @todo, [$outseq, $protocv, 0, $_]
- if $defined_in_this_sub;
- }
- }
- }}
- @{$self->{'subs_todo'}} =
- sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}, @todo
-}
-
-sub deparse_sub {
- my $self = shift;
- my $cv = shift;
- my $proto = "";
-Carp::confess("NULL in deparse_sub") if !defined($cv) || $cv->isa("B::NULL");
-Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
- local $self->{'curcop'} = $self->{'curcop'};
- if ($cv->FLAGS & SVf_POK) {
- $proto = "(". $cv->PV . ") ";
- }
- if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE|CVf_ANONCONST)) {
- $proto .= ": ";
- $proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE;
- $proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED;
- $proto .= "method " if $cv->CvFLAGS & CVf_METHOD;
- $proto .= "const " if $cv->CvFLAGS & CVf_ANONCONST;
- }
-
- local($self->{'curcv'}) = $cv;
- local($self->{'curcvlex'});
- local(@$self{qw'curstash warnings hints hinthash'})
- = @$self{qw'curstash warnings hints hinthash'};
- my $body;
- my $root = $cv->ROOT;
- local $B::overlay = {};
- if (not null $root) {
- $self->pad_subs($cv);
- $self->pessimise($root, $cv->START);
- my $lineseq = $root->first;
- if ($lineseq->name eq "lineseq") {
- my @ops;
- for(my$o=$lineseq->first; $$o; $o=$o->sibling) {
- push @ops, $o;
- }
- $body = $self->lineseq(undef, 0, @ops).";";
- my $scope_en = $self->find_scope_en($lineseq);
- if (defined $scope_en) {
- my $subs = join"", $self->seq_subs($scope_en);
- $body .= ";\n$subs" if length($subs);
- }
- }
- else {
- $body = $self->deparse($root->first, 0);
- }
- }
- else {
- my $sv = $cv->const_sv;
- if ($$sv) {
- # uh-oh. inlinable sub... format it differently
- return $proto . "{ " . $self->const($sv, 0) . " }\n";
- } else { # XSUB? (or just a declaration)
- return "$proto;\n";
- }
- }
- return $proto ."{\n\t$body\n\b}" ."\n";
-}
-
-sub deparse_format {
- my $self = shift;
- my $form = shift;
- my @text;
- local($self->{'curcv'}) = $form;
- local($self->{'curcvlex'});
- local($self->{'in_format'}) = 1;
- local(@$self{qw'curstash warnings hints hinthash'})
- = @$self{qw'curstash warnings hints hinthash'};
- my $op = $form->ROOT;
- local $B::overlay = {};
- $self->pessimise($op, $form->START);
- my $kid;
- return "\f." if $op->first->name eq 'stub'
- || $op->first->name eq 'nextstate';
- $op = $op->first->first; # skip leavewrite, lineseq
- while (not null $op) {
- $op = $op->sibling; # skip nextstate
- my @exprs;
- $kid = $op->first->sibling; # skip pushmark
- push @text, "\f".$self->const_sv($kid)->PV;
- $kid = $kid->sibling;
- for (; not null $kid; $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, -1);
- $exprs[-1] =~ s/;\z//;
- }
- push @text, "\f".join(", ", @exprs)."\n" if @exprs;
- $op = $op->sibling;
- }
- return join("", @text) . "\f.";
-}
-
-sub is_scope {
- my $op = shift;
- return $op->name eq "leave" || $op->name eq "scope"
- || $op->name eq "lineseq"
- || ($op->name eq "null" && class($op) eq "UNOP"
- && (is_scope($op->first) || $op->first->name eq "enter"));
-}
-
-sub is_state {
- my $name = $_[0]->name;
- return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate";
-}
-
-sub is_miniwhile { # check for one-line loop ('foo() while $y--')
- my $op = shift;
- return (!null($op) and null($op->sibling)
- and $op->name eq "null" and class($op) eq "UNOP"
- and (($op->first->name =~ /^(and|or)$/
- and $op->first->first->sibling->name eq "lineseq")
- or ($op->first->name eq "lineseq"
- and not null $op->first->first->sibling
- and $op->first->first->sibling->name eq "unstack")
- ));
-}
-
-# Check if the op and its sibling are the initialization and the rest of a
-# for (..;..;..) { ... } loop
-sub is_for_loop {
- my $op = shift;
- # This OP might be almost anything, though it won't be a
- # nextstate. (It's the initialization, so in the canonical case it
- # will be an sassign.) The sibling is (old style) a lineseq whose
- # first child is a nextstate and whose second is a leaveloop, or
- # (new style) an unstack whose sibling is a leaveloop.
- my $lseq = $op->sibling;
- return 0 unless !is_state($op) and !null($lseq);
- if ($lseq->name eq "lineseq") {
- if ($lseq->first && !null($lseq->first) && is_state($lseq->first)
- && (my $sib = $lseq->first->sibling)) {
- return (!null($sib) && $sib->name eq "leaveloop");
- }
- } elsif ($lseq->name eq "unstack" && ($lseq->flags & OPf_SPECIAL)) {
- my $sib = $lseq->sibling;
- return $sib && !null($sib) && $sib->name eq "leaveloop";
- }
- return 0;
-}
-
-sub is_scalar {
- my $op = shift;
- return ($op->name eq "rv2sv" or
- $op->name eq "padsv" or
- $op->name eq "gv" or # only in array/hash constructs
- $op->flags & OPf_KIDS && !null($op->first)
- && $op->first->name eq "gvsv");
-}
-
-sub maybe_parens {
- my $self = shift;
- my($text, $cx, $prec) = @_;
- if ($prec < $cx # unary ops nest just fine
- or $prec == $cx and $cx != 4 and $cx != 16 and $cx != 21
- or $self->{'parens'})
- {
- $text = "($text)";
- # In a unop, let parent reuse our parens; see maybe_parens_unop
- $text = "\cS" . $text if $cx == 16;
- return $text;
- } else {
- return $text;
- }
-}
-
-# same as above, but get around the 'if it looks like a function' rule
-sub maybe_parens_unop {
- my $self = shift;
- my($name, $kid, $cx) = @_;
- if ($cx > 16 or $self->{'parens'}) {
- $kid = $self->deparse($kid, 1);
- if ($name eq "umask" && $kid =~ /^\d+$/) {
- $kid = sprintf("%#o", $kid);
- }
- return $self->keyword($name) . "($kid)";
- } else {
- $kid = $self->deparse($kid, 16);
- if ($name eq "umask" && $kid =~ /^\d+$/) {
- $kid = sprintf("%#o", $kid);
- }
- $name = $self->keyword($name);
- if (substr($kid, 0, 1) eq "\cS") {
- # use kid's parens
- return $name . substr($kid, 1);
- } elsif (substr($kid, 0, 1) eq "(") {
- # avoid looks-like-a-function trap with extra parens
- # ('+' can lead to ambiguities)
- return "$name(" . $kid . ")";
- } else {
- return "$name $kid";
- }
- }
-}
-
-sub maybe_parens_func {
- my $self = shift;
- my($func, $text, $cx, $prec) = @_;
- if ($prec <= $cx or substr($text, 0, 1) eq "(" or $self->{'parens'}) {
- return "$func($text)";
- } else {
- return "$func $text";
- }
-}
-
-sub find_our_type {
- my ($self, $name) = @_;
- $self->populate_curcvlex() if !defined $self->{'curcvlex'};
- my $seq = $self->{'curcop'} ? $self->{'curcop'}->cop_seq : 0;
- for my $a (@{$self->{'curcvlex'}{"o$name"}}) {
- my ($st, undef, $padname) = @$a;
- if ($st >= $seq && $padname->FLAGS & SVpad_TYPED) {
- return $padname->SvSTASH->NAME;
- }
- }
- return '';
-}
-
-sub maybe_local {
- my $self = shift;
- my($op, $cx, $text) = @_;
- my $name = $op->name;
- my $our_intro = ($name =~ /^(?:(?:gv|rv2)[ash]v|split|refassign
- |lv(?:av)?ref)$/x)
- ? OPpOUR_INTRO
- : 0;
- my $lval_intro = $name eq 'split' ? 0 : OPpLVAL_INTRO;
- # The @a in \(@a) isn't in ref context, but only when the
- # parens are there.
- my $need_parens = $self->{'in_refgen'} && $name =~ /[ah]v\z/
- && ($op->flags & (OPf_PARENS|OPf_REF)) == OPf_PARENS;
- if ((my $priv = $op->private) & ($lval_intro|$our_intro)) {
- my @our_local;
- push @our_local, "local" if $priv & $lval_intro;
- push @our_local, "our" if $priv & $our_intro;
- my $our_local = join " ", map $self->keyword($_), @our_local;
- if( $our_local[-1] eq 'our' ) {
- if ( $text !~ /^\W(\w+::)*\w+\z/
- and !utf8::decode($text) || $text !~ /^\W(\w+::)*\w+\z/
- ) {
- die "Unexpected our($text)\n";
- }
- $text =~ s/(\w+::)+//;
-
- if (my $type = $self->find_our_type($text)) {
- $our_local .= ' ' . $type;
- }
- }
- return $need_parens ? "($text)" : $text
- if $self->{'avoid_local'}{$$op};
- if ($need_parens) {
- return "$our_local($text)";
- } elsif (want_scalar($op)) {
- return "$our_local $text";
- } else {
- return $self->maybe_parens_func("$our_local", $text, $cx, 16);
- }
- } else {
- return $need_parens ? "($text)" : $text;
- }
-}
-
-sub maybe_targmy {
- my $self = shift;
- my($op, $cx, $func, @args) = @_;
- if ($op->private & OPpTARGET_MY) {
- my $var = $self->padname($op->targ);
- my $val = $func->($self, $op, 7, @args);
- return $self->maybe_parens("$var = $val", $cx, 7);
- } else {
- return $func->($self, $op, $cx, @args);
- }
-}
-
-sub padname_sv {
- my $self = shift;
- my $targ = shift;
- return $self->{'curcv'}->PADLIST->ARRAYelt(0)->ARRAYelt($targ);
-}
-
-sub maybe_my {
- my $self = shift;
- my($op, $cx, $text, $padname, $forbid_parens) = @_;
- # The @a in \(@a) isn't in ref context, but only when the
- # parens are there.
- my $need_parens = !$forbid_parens && $self->{'in_refgen'}
- && $op->name =~ /[ah]v\z/
- && ($op->flags & (OPf_PARENS|OPf_REF)) == OPf_PARENS;
- # The @a in \my @a must not have parens.
- if (!$need_parens && $self->{'in_refgen'}) {
- $forbid_parens = 1;
- }
- if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
- # Check $padname->FLAGS for statehood, rather than $op->private,
- # because enteriter ops do not carry the flag.
- my $my =
- $self->keyword($padname->FLAGS & SVpad_STATE ? "state" : "my");
- if ($padname->FLAGS & SVpad_TYPED) {
- $my .= ' ' . $padname->SvSTASH->NAME;
- }
- if ($need_parens) {
- return "$my($text)";
- } elsif ($forbid_parens || want_scalar($op)) {
- return "$my $text";
- } else {
- return $self->maybe_parens_func($my, $text, $cx, 16);
- }
- } else {
- return $need_parens ? "($text)" : $text;
- }
-}
-
-# The following OPs don't have functions:
-
-# pp_padany -- does not exist after parsing
-
-sub AUTOLOAD {
- if ($AUTOLOAD =~ s/^.*::pp_//) {
- warn "unexpected OP_".
- ($_[1]->type == OP_CUSTOM ? "CUSTOM ($AUTOLOAD)" : uc $AUTOLOAD);
- return "XXX";
- } else {
- die "Undefined subroutine $AUTOLOAD called";
- }
-}
-
-sub DESTROY {} # Do not AUTOLOAD
-
-# $root should be the op which represents the root of whatever
-# we're sequencing here. If it's undefined, then we don't append
-# any subroutine declarations to the deparsed ops, otherwise we
-# append appropriate declarations.
-sub lineseq {
- my($self, $root, $cx, @ops) = @_;
- my($expr, @exprs);
-
- my $out_cop = $self->{'curcop'};
- my $out_seq = defined($out_cop) ? $out_cop->cop_seq : undef;
- my $limit_seq;
- if (defined $root) {
- $limit_seq = $out_seq;
- my $nseq;
- $nseq = $self->find_scope_st($root->sibling) if ${$root->sibling};
- $limit_seq = $nseq if !defined($limit_seq)
- or defined($nseq) && $nseq < $limit_seq;
- }
- $limit_seq = $self->{'limit_seq'}
- if defined($self->{'limit_seq'})
- && (!defined($limit_seq) || $self->{'limit_seq'} < $limit_seq);
- local $self->{'limit_seq'} = $limit_seq;
-
- $self->walk_lineseq($root, \@ops,
- sub { push @exprs, $_[0]} );
-
- my $sep = $cx ? '; ' : ";\n";
- my $body = join($sep, grep {length} @exprs);
- my $subs = "";
- if (defined $root && defined $limit_seq && !$self->{'in_format'}) {
- $subs = join "\n", $self->seq_subs($limit_seq);
- }
- return join($sep, grep {length} $body, $subs);
-}
-
-sub scopeop {
- my($real_block, $self, $op, $cx) = @_;
- my $kid;
- my @kids;
-
- local(@$self{qw'curstash warnings hints hinthash'})
- = @$self{qw'curstash warnings hints hinthash'} if $real_block;
- if ($real_block) {
- $kid = $op->first->sibling; # skip enter
- if (is_miniwhile($kid)) {
- my $top = $kid->first;
- my $name = $top->name;
- if ($name eq "and") {
- $name = $self->keyword("while");
- } elsif ($name eq "or") {
- $name = $self->keyword("until");
- } else { # no conditional -> while 1 or until 0
- return $self->deparse($top->first, 1) . " "
- . $self->keyword("while") . " 1";
- }
- my $cond = $top->first;
- my $body = $cond->sibling->first; # skip lineseq
- $cond = $self->deparse($cond, 1);
- $body = $self->deparse($body, 1);
- return "$body $name $cond";
- }
- } else {
- $kid = $op->first;
- }
- for (; !null($kid); $kid = $kid->sibling) {
- push @kids, $kid;
- }
- if ($cx > 0) { # inside an expression, (a do {} while for lineseq)
- my $body = $self->lineseq($op, 0, @kids);
- return is_lexical_subs(@kids)
- ? $body
- : ($self->lex_in_scope("&do") ? "CORE::do" : "do")
- . " {\n\t$body\n\b}";
- } else {
- my $lineseq = $self->lineseq($op, $cx, @kids);
- return (length ($lineseq) ? "$lineseq;" : "");
- }
-}
-
-sub pp_scope { scopeop(0, @_); }
-sub pp_lineseq { scopeop(0, @_); }
-sub pp_leave { scopeop(1, @_); }
-
-# This is a special case of scopeop and lineseq, for the case of the
-# main_root. The difference is that we print the output statements as
-# soon as we get them, for the sake of impatient users.
-sub deparse_root {
- my $self = shift;
- my($op) = @_;
- local(@$self{qw'curstash warnings hints hinthash'})
- = @$self{qw'curstash warnings hints hinthash'};
- my @kids;
- return if null $op->first; # Can happen, e.g., for Bytecode without -k
- for (my $kid = $op->first->sibling; !null($kid); $kid = $kid->sibling) {
- push @kids, $kid;
- }
- $self->walk_lineseq($op, \@kids,
- sub { return unless length $_[0];
- print $self->indent($_[0].';');
- print "\n"
- unless $_[1] == $#kids;
- });
-}
-
-sub walk_lineseq {
- my ($self, $op, $kids, $callback) = @_;
- my @kids = @$kids;
- for (my $i = 0; $i < @kids; $i++) {
- my $expr = "";
- if (is_state $kids[$i]) {
- $expr = $self->deparse($kids[$i++], 0);
- if ($i > $#kids) {
- $callback->($expr, $i);
- last;
- }
- }
- if (is_for_loop($kids[$i])) {
- $callback->($expr . $self->for_loop($kids[$i], 0),
- $i += $kids[$i]->sibling->name eq "unstack" ? 2 : 1);
- next;
- }
- my $expr2 = $self->deparse($kids[$i], (@kids != 1)/2);
- $expr2 =~ s/^sub :(?!:)/+sub :/; # statement label otherwise
- $expr .= $expr2;
- $callback->($expr, $i);
- }
-}
-
-# The BEGIN {} is used here because otherwise this code isn't executed
-# when you run B::Deparse on itself.
-my %globalnames;
-BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC",
- "ENV", "ARGV", "ARGVOUT", "_"); }
-
-sub gv_name {
- my $self = shift;
- my $gv = shift;
- my $raw = shift;
-#Carp::confess() unless ref($gv) eq "B::GV";
- my $cv = $gv->FLAGS & SVf_ROK ? $gv->RV : 0;
- my $stash = ($cv || $gv)->STASH->NAME;
- my $name = $raw
- ? $cv ? $cv->NAME_HEK || $cv->GV->NAME : $gv->NAME
- : $cv
- ? B::safename($cv->NAME_HEK || $cv->GV->NAME)
- : $gv->SAFENAME;
- if ($stash eq 'main' && $name =~ /^::/) {
- $stash = '::';
- }
- elsif (($stash eq 'main'
- && ($globalnames{$name} || $name =~ /^[^A-Za-z_:]/))
- or ($stash eq $self->{'curstash'} && !$globalnames{$name}
- && ($stash eq 'main' || $name !~ /::/))
- )
- {
- $stash = "";
- } else {
- $stash = $stash . "::";
- }
- if (!$raw and $name =~ /^(\^..|{)/) {
- $name = "{$name}"; # ${^WARNING_BITS}, etc and ${
- }
- return $stash . $name;
-}
-
-# Return the name to use for a stash variable.
-# If a lexical with the same name is in scope, or
-# if strictures are enabled, it may need to be
-# fully-qualified.
-sub stash_variable {
- my ($self, $prefix, $name, $cx) = @_;
-
- return "$prefix$name" if $name =~ /::/;
-
- unless ($prefix eq '$' || $prefix eq '@' || $prefix eq '&' || #'
- $prefix eq '%' || $prefix eq '$#') {
- return "$prefix$name";
- }
-
- if ($name =~ /^[^[:alpha:]_+-]$/) {
- if (defined $cx && $cx == 26) {
- if ($prefix eq '@') {
- return "$prefix\{$name}";
- }
- elsif ($name eq '#') { return '${#}' } # "${#}a" vs "$#a"
- }
- if ($prefix eq '$#') {
- return "\$#{$name}";
- }
- }
-
- return $prefix . $self->maybe_qualify($prefix, $name);
-}
-
-my %unctrl = # portable to EBCDIC
- (
- "\c@" => '@', # unused
- "\cA" => 'A',
- "\cB" => 'B',
- "\cC" => 'C',
- "\cD" => 'D',
- "\cE" => 'E',
- "\cF" => 'F',
- "\cG" => 'G',
- "\cH" => 'H',
- "\cI" => 'I',
- "\cJ" => 'J',
- "\cK" => 'K',
- "\cL" => 'L',
- "\cM" => 'M',
- "\cN" => 'N',
- "\cO" => 'O',
- "\cP" => 'P',
- "\cQ" => 'Q',
- "\cR" => 'R',
- "\cS" => 'S',
- "\cT" => 'T',
- "\cU" => 'U',
- "\cV" => 'V',
- "\cW" => 'W',
- "\cX" => 'X',
- "\cY" => 'Y',
- "\cZ" => 'Z',
- "\c[" => '[', # unused
- "\c\\" => '\\', # unused
- "\c]" => ']', # unused
- "\c_" => '_', # unused
- );
-
-# Return just the name, without the prefix. It may be returned as a quoted
-# string. The second return value is a boolean indicating that.
-sub stash_variable_name {
- my($self, $prefix, $gv) = @_;
- my $name = $self->gv_name($gv, 1);
- $name = $self->maybe_qualify($prefix,$name);
- if ($name =~ /^(?:\S|(?!\d)[\ca-\cz]?(?:\w|::)*|\d+)\z/) {
- $name =~ s/^([\ca-\cz])/'^' . $unctrl{$1}/e;
- $name =~ /^(\^..|{)/ and $name = "{$name}";
- return $name, 0; # not quoted
- }
- else {
- single_delim("q", "'", $name, $self), 1;
- }
-}
-
-sub maybe_qualify {
- my ($self,$prefix,$name) = @_;
- my $v = ($prefix eq '$#' ? '@' : $prefix) . $name;
- return $name if !$prefix || $name =~ /::/;
- return $self->{'curstash'}.'::'. $name
- if
- $name =~ /^(?!\d)\w/ # alphabetic
- && $v !~ /^\$[ab]\z/ # not $a or $b
- && !$globalnames{$name} # not a global name
- && $self->{hints} & $strict_bits{vars} # strict vars
- && !$self->lex_in_scope($v,1) # no "our"
- or $self->lex_in_scope($v); # conflicts with "my" variable
- return $name;
-}
-
-sub lex_in_scope {
- my ($self, $name, $our) = @_;
- substr $name, 0, 0, = $our ? 'o' : 'm'; # our/my
- $self->populate_curcvlex() if !defined $self->{'curcvlex'};
-
- return 0 if !defined($self->{'curcop'});
- my $seq = $self->{'curcop'}->cop_seq;
- return 0 if !exists $self->{'curcvlex'}{$name};
- for my $a (@{$self->{'curcvlex'}{$name}}) {
- my ($st, $en) = @$a;
- return 1 if $seq > $st && $seq <= $en;
- }
- return 0;
-}
-
-sub populate_curcvlex {
- my $self = shift;
- for (my $cv = $self->{'curcv'}; class($cv) eq "CV"; $cv = $cv->OUTSIDE) {
- my $padlist = $cv->PADLIST;
- # an undef CV still in lexical chain
- next if class($padlist) eq "SPECIAL";
- my @padlist = $padlist->ARRAY;
- my @ns = $padlist[0]->ARRAY;
-
- for (my $i=0; $i<@ns; ++$i) {
- next if class($ns[$i]) eq "SPECIAL";
- if (class($ns[$i]) eq "PV") {
- # Probably that pesky lexical @_
- next;
- }
- my $name = $ns[$i]->PVX;
- next unless defined $name;
- my ($seq_st, $seq_en) =
- ($ns[$i]->FLAGS & SVf_FAKE)
- ? (0, 999999)
- : ($ns[$i]->COP_SEQ_RANGE_LOW, $ns[$i]->COP_SEQ_RANGE_HIGH);
-
- push @{$self->{'curcvlex'}{
- ($ns[$i]->FLAGS & SVpad_OUR ? 'o' : 'm') . $name
- }}, [$seq_st, $seq_en, $ns[$i]];
- }
- }
-}
-
-sub find_scope_st { ((find_scope(@_))[0]); }
-sub find_scope_en { ((find_scope(@_))[1]); }
-
-# Recurses down the tree, looking for pad variable introductions and COPs
-sub find_scope {
- my ($self, $op, $scope_st, $scope_en) = @_;
- carp("Undefined op in find_scope") if !defined $op;
- return ($scope_st, $scope_en) unless $op->flags & OPf_KIDS;
-
- my @queue = ($op);
- while(my $op = shift @queue ) {
- for (my $o=$op->first; $$o; $o=$o->sibling) {
- if ($o->name =~ /^pad.v$/ && $o->private & OPpLVAL_INTRO) {
- my $s = int($self->padname_sv($o->targ)->COP_SEQ_RANGE_LOW);
- my $e = $self->padname_sv($o->targ)->COP_SEQ_RANGE_HIGH;
- $scope_st = $s if !defined($scope_st) || $s < $scope_st;
- $scope_en = $e if !defined($scope_en) || $e > $scope_en;
- return ($scope_st, $scope_en);
- }
- elsif (is_state($o)) {
- my $c = $o->cop_seq;
- $scope_st = $c if !defined($scope_st) || $c < $scope_st;
- $scope_en = $c if !defined($scope_en) || $c > $scope_en;
- return ($scope_st, $scope_en);
- }
- elsif ($o->flags & OPf_KIDS) {
- unshift (@queue, $o);
- }
- }
- }
-
- return ($scope_st, $scope_en);
-}
-
-# Returns a list of subs which should be inserted before the COP
-sub cop_subs {
- my ($self, $op, $out_seq) = @_;
- my $seq = $op->cop_seq;
- if ($] < 5.021006) {
- # If we have nephews, then our sequence number indicates
- # the cop_seq of the end of some sort of scope.
- if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS
- and my $nseq = $self->find_scope_st($op->sibling) ) {
- $seq = $nseq;
- }
- }
- $seq = $out_seq if defined($out_seq) && $out_seq < $seq;
- return $self->seq_subs($seq);
-}
-
-sub seq_subs {
- my ($self, $seq) = @_;
- my @text;
-#push @text, "# ($seq)\n";
-
- return "" if !defined $seq;
- my @pending;
- while (scalar(@{$self->{'subs_todo'}})
- and $seq > $self->{'subs_todo'}[0][0]) {
- my $cv = $self->{'subs_todo'}[0][1];
- # Skip the OUTSIDE check for lexical subs. We may be deparsing a
- # cloned anon sub with lexical subs declared in it, in which case
- # the OUTSIDE pointer points to the anon protosub.
- my $lexical = ref $self->{'subs_todo'}[0][3];
- my $outside = !$lexical && $cv && $cv->OUTSIDE;
- if (!$lexical and $cv
- and ${$cv->OUTSIDE || \0} != ${$self->{'curcv'}})
- {
- push @pending, shift @{$self->{'subs_todo'}};
- next;
- }
- push @text, $self->next_todo;
- }
- unshift @{$self->{'subs_todo'}}, @pending;
- return @text;
-}
-
-sub _features_from_bundle {
- my ($hints, $hh) = @_;
- foreach (@{$feature::feature_bundle{@feature::hint_bundles[$hints >> $feature::hint_shift]}}) {
- $hh->{$feature::feature{$_}} = 1;
- }
- return $hh;
-}
-
-# Notice how subs and formats are inserted between statements here;
-# also $[ assignments and pragmas.
-sub pp_nextstate {
- my $self = shift;
- my($op, $cx) = @_;
- $self->{'curcop'} = $op;
- my @text;
- push @text, $self->cop_subs($op);
- if (@text) {
- # Special marker to swallow up the semicolon
- push @text, "\cK";
- }
- my $stash = $op->stashpv;
- if ($stash ne $self->{'curstash'}) {
- push @text, $self->keyword("package") . " $stash;\n";
- $self->{'curstash'} = $stash;
- }
-
- if (OPpCONST_ARYBASE && $self->{'arybase'} != $op->arybase) {
- push @text, '$[ = '. $op->arybase .";\n";
- $self->{'arybase'} = $op->arybase;
- }
-
- my $warnings = $op->warnings;
- my $warning_bits;
- if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
- $warning_bits = $warnings::Bits{"all"} & WARN_MASK;
- }
- elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
- $warning_bits = $warnings::NONE;
- }
- elsif ($warnings->isa("B::SPECIAL")) {
- $warning_bits = undef;
- }
- else {
- $warning_bits = $warnings->PV & WARN_MASK;
- }
-
- if (defined ($warning_bits) and
- !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) {
- push @text,
- $self->declare_warnings($self->{'warnings'}, $warning_bits);
- $self->{'warnings'} = $warning_bits;
- }
-
- my $hints = $] < 5.008009 ? $op->private : $op->hints;
- my $old_hints = $self->{'hints'};
- if ($self->{'hints'} != $hints) {
- push @text, $self->declare_hints($self->{'hints'}, $hints);
- $self->{'hints'} = $hints;
- }
-
- my $newhh;
- if ($] > 5.009) {
- $newhh = $op->hints_hash->HASH;
- }
-
- if ($] >= 5.015006) {
- # feature bundle hints
- my $from = $old_hints & $feature::hint_mask;
- my $to = $ hints & $feature::hint_mask;
- if ($from != $to) {
- if ($to == $feature::hint_mask) {
- if ($self->{'hinthash'}) {
- delete $self->{'hinthash'}{$_}
- for grep /^feature_/, keys %{$self->{'hinthash'}};
- }
- else { $self->{'hinthash'} = {} }
- $self->{'hinthash'}
- = _features_from_bundle($from, $self->{'hinthash'});
- }
- else {
- my $bundle =
- $feature::hint_bundles[$to >> $feature::hint_shift];
- $bundle =~ s/(\d[13579])\z/$1+1/e; # 5.11 => 5.12
- push @text,
- $self->keyword("no") . " feature ':all';\n",
- $self->keyword("use") . " feature ':$bundle';\n";
- }
- }
- }
-
- if ($] > 5.009) {
- push @text, $self->declare_hinthash(
- $self->{'hinthash'}, $newhh,
- $self->{indent_size}, $self->{hints},
- );
- $self->{'hinthash'} = $newhh;
- }
-
- # This should go after of any branches that add statements, to
- # increase the chances that it refers to the same line it did in
- # the original program.
- if ($self->{'linenums'} && $cx != .5) { # $cx == .5 means in a format
- push @text, "\f#line " . $op->line .
- ' "' . $op->file, qq'"\n';
- }
-
- push @text, $op->label . ": " if $op->label;
-
- return join("", @text);
-}
-
-sub declare_warnings {
- my ($self, $from, $to) = @_;
- if (($to & WARN_MASK) eq (warnings::bits("all") & WARN_MASK)) {
- return $self->keyword("use") . " warnings;\n";
- }
- elsif (($to & WARN_MASK) eq ("\0"x length($to) & WARN_MASK)) {
- return $self->keyword("no") . " warnings;\n";
- }
- return "BEGIN {\${^WARNING_BITS} = \""
- . join("", map { sprintf("\\x%02x", ord $_) } split "", $to)
- . "\"}\n\cK";
-}
-
-sub declare_hints {
- my ($self, $from, $to) = @_;
- my $use = $to & ~$from;
- my $no = $from & ~$to;
- my $decls = "";
- for my $pragma (hint_pragmas($use)) {
- $decls .= $self->keyword("use") . " $pragma;\n";
- }
- for my $pragma (hint_pragmas($no)) {
- $decls .= $self->keyword("no") . " $pragma;\n";
- }
- return $decls;
-}
-
-# Internal implementation hints that the core sets automatically, so don't need
-# (or want) to be passed back to the user
-my %ignored_hints = (
- 'open<' => 1,
- 'open>' => 1,
- ':' => 1,
- 'strict/refs' => 1,
- 'strict/subs' => 1,
- 'strict/vars' => 1,
-);
-
-my %rev_feature;
-
-sub declare_hinthash {
- my ($self, $from, $to, $indent, $hints) = @_;
- my $doing_features =
- ($hints & $feature::hint_mask) == $feature::hint_mask;
- my @decls;
- my @features;
- my @unfeatures; # bugs?
- for my $key (sort keys %$to) {
- next if $ignored_hints{$key};
- my $is_feature = $key =~ /^feature_/ && $^V ge 5.15.6;
- next if $is_feature and not $doing_features;
- if (!exists $from->{$key} or $from->{$key} ne $to->{$key}) {
- push(@features, $key), next if $is_feature;
- push @decls,
- qq(\$^H{) . single_delim("q", "'", $key, $self) . qq(} = )
- . (
- defined $to->{$key}
- ? single_delim("q", "'", $to->{$key}, $self)
- : 'undef'
- )
- . qq(;);
- }
- }
- for my $key (sort keys %$from) {
- next if $ignored_hints{$key};
- my $is_feature = $key =~ /^feature_/ && $^V ge 5.15.6;
- next if $is_feature and not $doing_features;
- if (!exists $to->{$key}) {
- push(@unfeatures, $key), next if $is_feature;
- push @decls, qq(delete \$^H{'$key'};);
- }
- }
- my @ret;
- if (@features || @unfeatures) {
- if (!%rev_feature) { %rev_feature = reverse %feature::feature }
- }
- if (@features) {
- push @ret, $self->keyword("use") . " feature "
- . join(", ", map "'$rev_feature{$_}'", @features) . ";\n";
- }
- if (@unfeatures) {
- push @ret, $self->keyword("no") . " feature "
- . join(", ", map "'$rev_feature{$_}'", @unfeatures)
- . ";\n";
- }
- @decls and
- push @ret,
- join("\n" . (" " x $indent), "BEGIN {", @decls) . "\n}\n\cK";
- return @ret;
-}
-
-sub hint_pragmas {
- my ($bits) = @_;
- my (@pragmas, @strict);
- push @pragmas, "integer" if $bits & 0x1;
- for (sort keys %strict_bits) {
- push @strict, "'$_'" if $bits & $strict_bits{$_};
- }
- if (@strict == keys %strict_bits) {
- push @pragmas, "strict";
- }
- elsif (@strict) {
- push @pragmas, "strict " . join ', ', @strict;
- }
- push @pragmas, "bytes" if $bits & 0x8;
- return @pragmas;
-}
-
-sub pp_dbstate { pp_nextstate(@_) }
-sub pp_setstate { pp_nextstate(@_) }
-
-sub pp_unstack { return "" } # see also leaveloop
-
-my %feature_keywords = (
- # keyword => 'feature',
- state => 'state',
- say => 'say',
- given => 'switch',
- when => 'switch',
- default => 'switch',
- break => 'switch',
- evalbytes=>'evalbytes',
- __SUB__ => '__SUB__',
- fc => 'fc',
-);
-
-# keywords that are strong and also have a prototype
-#
-my %strong_proto_keywords = map { $_ => 1 } qw(
- pos
- prototype
- scalar
- study
- undef
-);
-
-sub feature_enabled {
- my($self,$name) = @_;
- my $hh;
- my $hints = $self->{hints} & $feature::hint_mask;
- if ($hints && $hints != $feature::hint_mask) {
- $hh = _features_from_bundle($hints);
- }
- elsif ($hints) { $hh = $self->{'hinthash'} }
- return $hh && $hh->{"feature_$feature_keywords{$name}"}
-}
-
-sub keyword {
- my $self = shift;
- my $name = shift;
- return $name if $name =~ /^CORE::/; # just in case
- if (exists $feature_keywords{$name}) {
- return "CORE::$name" if not $self->feature_enabled($name);
- }
- # This sub may be called for a program that has no nextstate ops. In
- # that case we may have a lexical sub named no/use/sub in scope but
- # but $self->lex_in_scope will return false because it depends on the
- # current nextstate op. So we need this alternate method if there is
- # no current cop.
- if (!$self->{'curcop'}) {
- $self->populate_curcvlex() if !defined $self->{'curcvlex'};
- return "CORE::$name" if exists $self->{'curcvlex'}{"m&$name"}
- || exists $self->{'curcvlex'}{"o&$name"};
- } elsif ($self->lex_in_scope("&$name")
- || $self->lex_in_scope("&$name", 1)) {
- return "CORE::$name";
- }
- if ($strong_proto_keywords{$name}
- || ($name !~ /^(?:chom?p|do|exec|glob|s(?:elect|ystem))\z/
- && !defined eval{prototype "CORE::$name"})
- ) { return $name }
- if (
- exists $self->{subs_declared}{$name}
- or
- exists &{"$self->{curstash}::$name"}
- ) {
- return "CORE::$name"
- }
- return $name;
-}
-
-sub baseop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- return $self->keyword($name);
-}
-
-sub pp_stub { "()" }
-sub pp_wantarray { baseop(@_, "wantarray") }
-sub pp_fork { baseop(@_, "fork") }
-sub pp_wait { maybe_targmy(@_, \&baseop, "wait") }
-sub pp_getppid { maybe_targmy(@_, \&baseop, "getppid") }
-sub pp_time { maybe_targmy(@_, \&baseop, "time") }
-sub pp_tms { baseop(@_, "times") }
-sub pp_ghostent { baseop(@_, "gethostent") }
-sub pp_gnetent { baseop(@_, "getnetent") }
-sub pp_gprotoent { baseop(@_, "getprotoent") }
-sub pp_gservent { baseop(@_, "getservent") }
-sub pp_ehostent { baseop(@_, "endhostent") }
-sub pp_enetent { baseop(@_, "endnetent") }
-sub pp_eprotoent { baseop(@_, "endprotoent") }
-sub pp_eservent { baseop(@_, "endservent") }
-sub pp_gpwent { baseop(@_, "getpwent") }
-sub pp_spwent { baseop(@_, "setpwent") }
-sub pp_epwent { baseop(@_, "endpwent") }
-sub pp_ggrent { baseop(@_, "getgrent") }
-sub pp_sgrent { baseop(@_, "setgrent") }
-sub pp_egrent { baseop(@_, "endgrent") }
-sub pp_getlogin { baseop(@_, "getlogin") }
-
-sub POSTFIX () { 1 }
-
-# I couldn't think of a good short name, but this is the category of
-# symbolic unary operators with interesting precedence
-
-sub pfixop {
- my $self = shift;
- my($op, $cx, $name, $prec, $flags) = (@_, 0);
- my $kid = $op->first;
- $kid = $self->deparse($kid, $prec);
- return $self->maybe_parens(($flags & POSTFIX)
- ? "$kid$name"
- # avoid confusion with filetests
- : $name eq '-'
- && $kid =~ /^[a-zA-Z](?!\w)/
- ? "$name($kid)"
- : "$name$kid",
- $cx, $prec);
-}
-
-sub pp_preinc { pfixop(@_, "++", 23) }
-sub pp_predec { pfixop(@_, "--", 23) }
-sub pp_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
-sub pp_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
-sub pp_i_preinc { pfixop(@_, "++", 23) }
-sub pp_i_predec { pfixop(@_, "--", 23) }
-sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
-sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
-sub pp_complement { maybe_targmy(@_, \&pfixop, "~", 21) }
-*pp_ncomplement = *pp_complement;
-sub pp_scomplement { maybe_targmy(@_, \&pfixop, "~.", 21) }
-
-sub pp_negate { maybe_targmy(@_, \&real_negate) }
-sub real_negate {
- my $self = shift;
- my($op, $cx) = @_;
- if ($op->first->name =~ /^(i_)?negate$/) {
- # avoid --$x
- $self->pfixop($op, $cx, "-", 21.5);
- } else {
- $self->pfixop($op, $cx, "-", 21);
- }
-}
-sub pp_i_negate { pp_negate(@_) }
-
-sub pp_not {
- my $self = shift;
- my($op, $cx) = @_;
- if ($cx <= 4) {
- $self->listop($op, $cx, "not", $op->first);
- } else {
- $self->pfixop($op, $cx, "!", 21);
- }
-}
-
-sub unop {
- my $self = shift;
- my($op, $cx, $name, $nollafr) = @_;
- my $kid;
- if ($op->flags & OPf_KIDS) {
- $kid = $op->first;
- if (not $name) {
- # this deals with 'boolkeys' right now
- return $self->deparse($kid,$cx);
- }
- my $builtinname = $name;
- $builtinname =~ /^CORE::/ or $builtinname = "CORE::$name";
- if (defined prototype($builtinname)
- && $builtinname ne 'CORE::readline'
- && prototype($builtinname) =~ /^;?\*/
- && $kid->name eq "rv2gv") {
- $kid = $kid->first;
- }
-
- if ($nollafr) {
- if (($kid = $self->deparse($kid, 16)) !~ s/^\cS//) {
- # require foo() is a syntax error.
- $kid =~ /^(?!\d)\w/ and $kid = "($kid)";
- }
- return $self->maybe_parens(
- $self->keyword($name) . " $kid", $cx, 16
- );
- }
- return $self->maybe_parens_unop($name, $kid, $cx);
- } else {
- return $self->maybe_parens(
- $self->keyword($name) . ($op->flags & OPf_SPECIAL ? "()" : ""),
- $cx, 16,
- );
- }
-}
-
-sub pp_chop { maybe_targmy(@_, \&unop, "chop") }
-sub pp_chomp { maybe_targmy(@_, \&unop, "chomp") }
-sub pp_schop { maybe_targmy(@_, \&unop, "chop") }
-sub pp_schomp { maybe_targmy(@_, \&unop, "chomp") }
-sub pp_defined { unop(@_, "defined") }
-sub pp_undef { unop(@_, "undef") }
-sub pp_study { unop(@_, "study") }
-sub pp_ref { unop(@_, "ref") }
-sub pp_pos { maybe_local(@_, unop(@_, "pos")) }
-
-sub pp_sin { maybe_targmy(@_, \&unop, "sin") }
-sub pp_cos { maybe_targmy(@_, \&unop, "cos") }
-sub pp_rand { maybe_targmy(@_, \&unop, "rand") }
-sub pp_srand { unop(@_, "srand") }
-sub pp_exp { maybe_targmy(@_, \&unop, "exp") }
-sub pp_log { maybe_targmy(@_, \&unop, "log") }
-sub pp_sqrt { maybe_targmy(@_, \&unop, "sqrt") }
-sub pp_int { maybe_targmy(@_, \&unop, "int") }
-sub pp_hex { maybe_targmy(@_, \&unop, "hex") }
-sub pp_oct { maybe_targmy(@_, \&unop, "oct") }
-sub pp_abs { maybe_targmy(@_, \&unop, "abs") }
-
-sub pp_length { maybe_targmy(@_, \&unop, "length") }
-sub pp_ord { maybe_targmy(@_, \&unop, "ord") }
-sub pp_chr { maybe_targmy(@_, \&unop, "chr") }
-
-sub pp_each { unop(@_, "each") }
-sub pp_values { unop(@_, "values") }
-sub pp_keys { unop(@_, "keys") }
-{ no strict 'refs'; *{"pp_r$_"} = *{"pp_$_"} for qw< keys each values >; }
-sub pp_boolkeys {
- # no name because its an optimisation op that has no keyword
- unop(@_,"");
-}
-sub pp_aeach { unop(@_, "each") }
-sub pp_avalues { unop(@_, "values") }
-sub pp_akeys { unop(@_, "keys") }
-sub pp_pop { unop(@_, "pop") }
-sub pp_shift { unop(@_, "shift") }
-
-sub pp_caller { unop(@_, "caller") }
-sub pp_reset { unop(@_, "reset") }
-sub pp_exit { unop(@_, "exit") }
-sub pp_prototype { unop(@_, "prototype") }
-
-sub pp_close { unop(@_, "close") }
-sub pp_fileno { unop(@_, "fileno") }
-sub pp_umask { unop(@_, "umask") }
-sub pp_untie { unop(@_, "untie") }
-sub pp_tied { unop(@_, "tied") }
-sub pp_dbmclose { unop(@_, "dbmclose") }
-sub pp_getc { unop(@_, "getc") }
-sub pp_eof { unop(@_, "eof") }
-sub pp_tell { unop(@_, "tell") }
-sub pp_getsockname { unop(@_, "getsockname") }
-sub pp_getpeername { unop(@_, "getpeername") }
-
-sub pp_chdir {
- my ($self, $op, $cx) = @_;
- if (($op->flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS)) {
- my $kw = $self->keyword("chdir");
- my $kid = $self->const_sv($op->first)->PV;
- my $code = $kw
- . ($cx >= 16 || $self->{'parens'} ? "($kid)" : " $kid");
- maybe_targmy(@_, sub { $_[3] }, $code);
- } else {
- maybe_targmy(@_, \&unop, "chdir")
- }
-}
-
-sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") }
-sub pp_readlink { unop(@_, "readlink") }
-sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") }
-sub pp_readdir { unop(@_, "readdir") }
-sub pp_telldir { unop(@_, "telldir") }
-sub pp_rewinddir { unop(@_, "rewinddir") }
-sub pp_closedir { unop(@_, "closedir") }
-sub pp_getpgrp { maybe_targmy(@_, \&unop, "getpgrp") }
-sub pp_localtime { unop(@_, "localtime") }
-sub pp_gmtime { unop(@_, "gmtime") }
-sub pp_alarm { unop(@_, "alarm") }
-sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") }
-
-sub pp_dofile {
- my $code = unop(@_, "do", 1); # llafr does not apply
- if ($code =~ s/^((?:CORE::)?do) \{/$1({/) { $code .= ')' }
- $code;
-}
-sub pp_entereval {
- unop(
- @_,
- $_[1]->private & OPpEVAL_BYTES ? 'evalbytes' : "eval"
- )
-}
-
-sub pp_ghbyname { unop(@_, "gethostbyname") }
-sub pp_gnbyname { unop(@_, "getnetbyname") }
-sub pp_gpbyname { unop(@_, "getprotobyname") }
-sub pp_shostent { unop(@_, "sethostent") }
-sub pp_snetent { unop(@_, "setnetent") }
-sub pp_sprotoent { unop(@_, "setprotoent") }
-sub pp_sservent { unop(@_, "setservent") }
-sub pp_gpwnam { unop(@_, "getpwnam") }
-sub pp_gpwuid { unop(@_, "getpwuid") }
-sub pp_ggrnam { unop(@_, "getgrnam") }
-sub pp_ggrgid { unop(@_, "getgrgid") }
-
-sub pp_lock { unop(@_, "lock") }
-
-sub pp_continue { unop(@_, "continue"); }
-sub pp_break { unop(@_, "break"); }
-
-sub givwhen {
- my $self = shift;
- my($op, $cx, $givwhen) = @_;
-
- my $enterop = $op->first;
- my ($head, $block);
- if ($enterop->flags & OPf_SPECIAL) {
- $head = $self->keyword("default");
- $block = $self->deparse($enterop->first, 0);
- }
- else {
- my $cond = $enterop->first;
- my $cond_str = $self->deparse($cond, 1);
- $head = "$givwhen ($cond_str)";
- $block = $self->deparse($cond->sibling, 0);
- }
-
- return "$head {\n".
- "\t$block\n".
- "\b}\cK";
-}
-
-sub pp_leavegiven { givwhen(@_, $_[0]->keyword("given")); }
-sub pp_leavewhen { givwhen(@_, $_[0]->keyword("when")); }
-
-sub pp_exists {
- my $self = shift;
- my($op, $cx) = @_;
- my $arg;
- my $name = $self->keyword("exists");
- if ($op->private & OPpEXISTS_SUB) {
- # Checking for the existence of a subroutine
- return $self->maybe_parens_func($name,
- $self->pp_rv2cv($op->first, 16), $cx, 16);
- }
- if ($op->flags & OPf_SPECIAL) {
- # Array element, not hash element
- return $self->maybe_parens_func($name,
- $self->pp_aelem($op->first, 16), $cx, 16);
- }
- return $self->maybe_parens_func($name, $self->pp_helem($op->first, 16),
- $cx, 16);
-}
-
-sub pp_delete {
- my $self = shift;
- my($op, $cx) = @_;
- my $arg;
- my $name = $self->keyword("delete");
- if ($op->private & OPpSLICE) {
- if ($op->flags & OPf_SPECIAL) {
- # Deleting from an array, not a hash
- return $self->maybe_parens_func($name,
- $self->pp_aslice($op->first, 16),
- $cx, 16);
- }
- return $self->maybe_parens_func($name,
- $self->pp_hslice($op->first, 16),
- $cx, 16);
- } else {
- if ($op->flags & OPf_SPECIAL) {
- # Deleting from an array, not a hash
- return $self->maybe_parens_func($name,
- $self->pp_aelem($op->first, 16),
- $cx, 16);
- }
- return $self->maybe_parens_func($name,
- $self->pp_helem($op->first, 16),
- $cx, 16);
- }
-}
-
-sub pp_require {
- my $self = shift;
- my($op, $cx) = @_;
- my $opname = $op->flags & OPf_SPECIAL ? 'CORE::require' : 'require';
- my $kid = $op->first;
- if ($kid->name eq 'const') {
- my $priv = $kid->private;
- my $sv = $self->const_sv($kid);
- my $arg;
- if ($priv & OPpCONST_BARE) {
- $arg = $sv->PV;
- $arg =~ s[/][::]g;
- $arg =~ s/\.pm//g;
- } elsif ($priv & OPpCONST_NOVER) {
- $opname = $self->keyword('no');
- $arg = $self->const($sv, 16);
- } elsif ((my $tmp = $self->const($sv, 16)) =~ /^v/) {
- $arg = $tmp;
- }
- if ($arg) {
- return $self->maybe_parens("$opname $arg", $cx, 16);
- }
- }
- $self->unop(
- $op, $cx,
- $opname,
- 1, # llafr does not apply
- );
-}
-
-sub pp_scalar {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if (not null $kid->sibling) {
- # XXX Was a here-doc
- return $self->dquote($op);
- }
- $self->unop(@_, "scalar");
-}
-
-
-sub padval {
- my $self = shift;
- my $targ = shift;
- return $self->{'curcv'}->PADLIST->ARRAYelt(1)->ARRAYelt($targ);
-}
-
-sub anon_hash_or_list {
- my $self = shift;
- my($op, $cx) = @_;
-
- my($pre, $post) = @{{"anonlist" => ["[","]"],
- "anonhash" => ["{","}"]}->{$op->name}};
- my($expr, @exprs);
- $op = $op->first->sibling; # skip pushmark
- for (; !null($op); $op = $op->sibling) {
- $expr = $self->deparse($op, 6);
- push @exprs, $expr;
- }
- if ($pre eq "{" and $cx < 1) {
- # Disambiguate that it's not a block
- $pre = "+{";
- }
- return $pre . join(", ", @exprs) . $post;
-}
-
-sub pp_anonlist {
- my $self = shift;
- my ($op, $cx) = @_;
- if ($op->flags & OPf_SPECIAL) {
- return $self->anon_hash_or_list($op, $cx);
- }
- warn "Unexpected op pp_" . $op->name() . " without OPf_SPECIAL";
- return 'XXX';
-}
-
-*pp_anonhash = \&pp_anonlist;
-
-sub pp_refgen {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if ($kid->name eq "null") {
- my $anoncode = $kid = $kid->first;
- if ($anoncode->name eq "anonconst") {
- $anoncode = $anoncode->first->first->sibling;
- }
- if ($anoncode->name eq "anoncode"
- or !null($anoncode = $kid->sibling) and
- $anoncode->name eq "anoncode") {
- return $self->e_anoncode({ code => $self->padval($anoncode->targ) });
- } elsif ($kid->name eq "pushmark") {
- my $sib_name = $kid->sibling->name;
- if ($sib_name eq 'entersub') {
- my $text = $self->deparse($kid->sibling, 1);
- # Always show parens for \(&func()), but only with -p otherwise
- $text = "($text)" if $self->{'parens'}
- or $kid->sibling->private & OPpENTERSUB_AMPER;
- return "\\$text";
- }
- }
- }
- local $self->{'in_refgen'} = 1;
- $self->pfixop($op, $cx, "\\", 20);
-}
-
-sub e_anoncode {
- my ($self, $info) = @_;
- my $text = $self->deparse_sub($info->{code});
- return $self->keyword("sub") . " $text";
-}
-
-sub pp_srefgen { pp_refgen(@_) }
-
-sub pp_readline {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if (is_scalar($kid)
- and $op->flags & OPf_SPECIAL
- and $self->deparse($kid, 1) eq 'ARGV')
- {
- return '<<>>';
- }
- return $self->unop($op, $cx, "readline");
-}
-
-sub pp_rcatline {
- my $self = shift;
- my($op) = @_;
- return "<" . $self->gv_name($self->gv_or_padgv($op)) . ">";
-}
-
-# Unary operators that can occur as pseudo-listops inside double quotes
-sub dq_unop {
- my $self = shift;
- my($op, $cx, $name, $prec, $flags) = (@_, 0, 0);
- my $kid;
- if ($op->flags & OPf_KIDS) {
- $kid = $op->first;
- # If there's more than one kid, the first is an ex-pushmark.
- $kid = $kid->sibling if not null $kid->sibling;
- return $self->maybe_parens_unop($name, $kid, $cx);
- } else {
- return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
- }
-}
-
-sub pp_ucfirst { dq_unop(@_, "ucfirst") }
-sub pp_lcfirst { dq_unop(@_, "lcfirst") }
-sub pp_uc { dq_unop(@_, "uc") }
-sub pp_lc { dq_unop(@_, "lc") }
-sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") }
-sub pp_fc { dq_unop(@_, "fc") }
-
-sub loopex {
- my $self = shift;
- my ($op, $cx, $name) = @_;
- if (class($op) eq "PVOP") {
- $name .= " " . $op->pv;
- } elsif (class($op) eq "OP") {
- # no-op
- } elsif (class($op) eq "UNOP") {
- (my $kid = $self->deparse($op->first, 7)) =~ s/^\cS//;
- # last foo() is a syntax error.
- $kid =~ /^(?!\d)\w/ and $kid = "($kid)";
- $name .= " $kid";
- }
- return $self->maybe_parens($name, $cx, 7);
-}
-
-sub pp_last { loopex(@_, "last") }
-sub pp_next { loopex(@_, "next") }
-sub pp_redo { loopex(@_, "redo") }
-sub pp_goto { loopex(@_, "goto") }
-sub pp_dump { loopex(@_, "CORE::dump") }
-
-sub ftst {
- my $self = shift;
- my($op, $cx, $name) = @_;
- if (class($op) eq "UNOP") {
- # Genuine '-X' filetests are exempt from the LLAFR, but not
- # l?stat()
- if ($name =~ /^-/) {
- (my $kid = $self->deparse($op->first, 16)) =~ s/^\cS//;
- return $self->maybe_parens("$name $kid", $cx, 16);
- }
- return $self->maybe_parens_unop($name, $op->first, $cx);
- } elsif (class($op) =~ /^(SV|PAD)OP$/) {
- return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16);
- } else { # I don't think baseop filetests ever survive ck_ftst, but...
- return $name;
- }
-}
-
-sub pp_lstat { ftst(@_, "lstat") }
-sub pp_stat { ftst(@_, "stat") }
-sub pp_ftrread { ftst(@_, "-R") }
-sub pp_ftrwrite { ftst(@_, "-W") }
-sub pp_ftrexec { ftst(@_, "-X") }
-sub pp_fteread { ftst(@_, "-r") }
-sub pp_ftewrite { ftst(@_, "-w") }
-sub pp_fteexec { ftst(@_, "-x") }
-sub pp_ftis { ftst(@_, "-e") }
-sub pp_fteowned { ftst(@_, "-O") }
-sub pp_ftrowned { ftst(@_, "-o") }
-sub pp_ftzero { ftst(@_, "-z") }
-sub pp_ftsize { ftst(@_, "-s") }
-sub pp_ftmtime { ftst(@_, "-M") }
-sub pp_ftatime { ftst(@_, "-A") }
-sub pp_ftctime { ftst(@_, "-C") }
-sub pp_ftsock { ftst(@_, "-S") }
-sub pp_ftchr { ftst(@_, "-c") }
-sub pp_ftblk { ftst(@_, "-b") }
-sub pp_ftfile { ftst(@_, "-f") }
-sub pp_ftdir { ftst(@_, "-d") }
-sub pp_ftpipe { ftst(@_, "-p") }
-sub pp_ftlink { ftst(@_, "-l") }
-sub pp_ftsuid { ftst(@_, "-u") }
-sub pp_ftsgid { ftst(@_, "-g") }
-sub pp_ftsvtx { ftst(@_, "-k") }
-sub pp_fttty { ftst(@_, "-t") }
-sub pp_fttext { ftst(@_, "-T") }
-sub pp_ftbinary { ftst(@_, "-B") }
-
-sub SWAP_CHILDREN () { 1 }
-sub ASSIGN () { 2 } # has OP= variant
-sub LIST_CONTEXT () { 4 } # Assignment is in list context
-
-my(%left, %right);
-
-sub assoc_class {
- my $op = shift;
- my $name = $op->name;
- if ($name eq "concat" and $op->first->name eq "concat") {
- # avoid spurious '=' -- see comment in pp_concat
- return "concat";
- }
- if ($name eq "null" and class($op) eq "UNOP"
- and $op->first->name =~ /^(and|x?or)$/
- and null $op->first->sibling)
- {
- # Like all conditional constructs, OP_ANDs and OP_ORs are topped
- # with a null that's used as the common end point of the two
- # flows of control. For precedence purposes, ignore it.
- # (COND_EXPRs have these too, but we don't bother with
- # their associativity).
- return assoc_class($op->first);
- }
- return $name . ($op->flags & OPf_STACKED ? "=" : "");
-}
-
-# Left associative operators, like '+', for which
-# $a + $b + $c is equivalent to ($a + $b) + $c
-
-BEGIN {
- %left = ('multiply' => 19, 'i_multiply' => 19,
- 'divide' => 19, 'i_divide' => 19,
- 'modulo' => 19, 'i_modulo' => 19,
- 'repeat' => 19,
- 'add' => 18, 'i_add' => 18,
- 'subtract' => 18, 'i_subtract' => 18,
- 'concat' => 18,
- 'left_shift' => 17, 'right_shift' => 17,
- 'bit_and' => 13, 'nbit_and' => 13, 'sbit_and' => 13,
- 'bit_or' => 12, 'bit_xor' => 12,
- 'sbit_or' => 12, 'sbit_xor' => 12,
- 'nbit_or' => 12, 'nbit_xor' => 12,
- 'and' => 3,
- 'or' => 2, 'xor' => 2,
- );
-}
-
-sub deparse_binop_left {
- my $self = shift;
- my($op, $left, $prec) = @_;
- if ($left{assoc_class($op)} && $left{assoc_class($left)}
- and $left{assoc_class($op)} == $left{assoc_class($left)})
- {
- return $self->deparse($left, $prec - .00001);
- } else {
- return $self->deparse($left, $prec);
- }
-}
-
-# Right associative operators, like '=', for which
-# $a = $b = $c is equivalent to $a = ($b = $c)
-
-BEGIN {
- %right = ('pow' => 22,
- 'sassign=' => 7, 'aassign=' => 7,
- 'multiply=' => 7, 'i_multiply=' => 7,
- 'divide=' => 7, 'i_divide=' => 7,
- 'modulo=' => 7, 'i_modulo=' => 7,
- 'repeat=' => 7, 'refassign' => 7, 'refassign=' => 7,
- 'add=' => 7, 'i_add=' => 7,
- 'subtract=' => 7, 'i_subtract=' => 7,
- 'concat=' => 7,
- 'left_shift=' => 7, 'right_shift=' => 7,
- 'bit_and=' => 7, 'sbit_and=' => 7, 'nbit_and=' => 7,
- 'nbit_or=' => 7, 'nbit_xor=' => 7,
- 'sbit_or=' => 7, 'sbit_xor=' => 7,
- 'andassign' => 7,
- 'orassign' => 7,
- );
-}
-
-sub deparse_binop_right {
- my $self = shift;
- my($op, $right, $prec) = @_;
- if ($right{assoc_class($op)} && $right{assoc_class($right)}
- and $right{assoc_class($op)} == $right{assoc_class($right)})
- {
- return $self->deparse($right, $prec - .00001);
- } else {
- return $self->deparse($right, $prec);
- }
-}
-
-sub binop {
- my $self = shift;
- my ($op, $cx, $opname, $prec, $flags) = (@_, 0);
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- if ($op->flags & OPf_STACKED && $flags & ASSIGN) {
- $eq = "=";
- $prec = 7;
- }
- if ($flags & SWAP_CHILDREN) {
- ($left, $right) = ($right, $left);
- }
- my $leftop = $left;
- $left = $self->deparse_binop_left($op, $left, $prec);
- $left = "($left)" if $flags & LIST_CONTEXT
- and $left !~ /^(my|our|local|)[\@\(]/
- || do {
- # Parenthesize if the left argument is a
- # lone repeat op.
- my $left = $leftop->first->sibling;
- $left->name eq 'repeat'
- && null($left->sibling);
- };
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left $opname$eq $right", $cx, $prec);
-}
-
-sub pp_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
-sub pp_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
-sub pp_subtract { maybe_targmy(@_, \&binop, "-",18, ASSIGN) }
-sub pp_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
-sub pp_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
-sub pp_i_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
-sub pp_i_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
-sub pp_i_subtract { maybe_targmy(@_, \&binop, "-", 18, ASSIGN) }
-sub pp_i_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
-sub pp_i_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
-sub pp_pow { maybe_targmy(@_, \&binop, "**", 22, ASSIGN) }
-
-sub pp_left_shift { maybe_targmy(@_, \&binop, "<<", 17, ASSIGN) }
-sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) }
-sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) }
-sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) }
-sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) }
-*pp_nbit_and = *pp_bit_and;
-*pp_nbit_or = *pp_bit_or;
-*pp_nbit_xor = *pp_bit_xor;
-sub pp_sbit_and { maybe_targmy(@_, \&binop, "&.", 13, ASSIGN) }
-sub pp_sbit_or { maybe_targmy(@_, \&binop, "|.", 12, ASSIGN) }
-sub pp_sbit_xor { maybe_targmy(@_, \&binop, "^.", 12, ASSIGN) }
-
-sub pp_eq { binop(@_, "==", 14) }
-sub pp_ne { binop(@_, "!=", 14) }
-sub pp_lt { binop(@_, "<", 15) }
-sub pp_gt { binop(@_, ">", 15) }
-sub pp_ge { binop(@_, ">=", 15) }
-sub pp_le { binop(@_, "<=", 15) }
-sub pp_ncmp { binop(@_, "<=>", 14) }
-sub pp_i_eq { binop(@_, "==", 14) }
-sub pp_i_ne { binop(@_, "!=", 14) }
-sub pp_i_lt { binop(@_, "<", 15) }
-sub pp_i_gt { binop(@_, ">", 15) }
-sub pp_i_ge { binop(@_, ">=", 15) }
-sub pp_i_le { binop(@_, "<=", 15) }
-sub pp_i_ncmp { maybe_targmy(@_, \&binop, "<=>", 14) }
-
-sub pp_seq { binop(@_, "eq", 14) }
-sub pp_sne { binop(@_, "ne", 14) }
-sub pp_slt { binop(@_, "lt", 15) }
-sub pp_sgt { binop(@_, "gt", 15) }
-sub pp_sge { binop(@_, "ge", 15) }
-sub pp_sle { binop(@_, "le", 15) }
-sub pp_scmp { maybe_targmy(@_, \&binop, "cmp", 14) }
-
-sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
-sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
-
-sub pp_smartmatch {
- my ($self, $op, $cx) = @_;
- if ($op->flags & OPf_SPECIAL) {
- return $self->deparse($op->last, $cx);
- }
- else {
- binop(@_, "~~", 14);
- }
-}
-
-# '.' is special because concats-of-concats are optimized to save copying
-# by making all but the first concat stacked. The effect is as if the
-# programmer had written '($a . $b) .= $c', except legal.
-sub pp_concat { maybe_targmy(@_, \&real_concat) }
-sub real_concat {
- my $self = shift;
- my($op, $cx) = @_;
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- my $prec = 18;
- if ($op->flags & OPf_STACKED and $op->first->name ne "concat") {
- $eq = "=";
- $prec = 7;
- }
- $left = $self->deparse_binop_left($op, $left, $prec);
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left .$eq $right", $cx, $prec);
-}
-
-sub pp_repeat { maybe_targmy(@_, \&repeat) }
-
-# 'x' is weird when the left arg is a list
-sub repeat {
- my $self = shift;
- my($op, $cx) = @_;
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- my $prec = 19;
- if ($op->flags & OPf_STACKED) {
- $eq = "=";
- $prec = 7;
- }
- if (null($right)) { # list repeat; count is inside left-side ex-list
- # in 5.21.5 and earlier
- my $kid = $left->first->sibling; # skip pushmark
- my @exprs;
- for (; !null($kid->sibling); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- $right = $kid;
- $left = "(" . join(", ", @exprs). ")";
- } else {
- my $dolist = $op->private & OPpREPEAT_DOLIST;
- $left = $self->deparse_binop_left($op, $left, $dolist ? 1 : $prec);
- if ($dolist) {
- $left = "($left)";
- }
- }
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left x$eq $right", $cx, $prec);
-}
-
-sub range {
- my $self = shift;
- my ($op, $cx, $type) = @_;
- my $left = $op->first;
- my $right = $left->sibling;
- $left = $self->deparse($left, 9);
- $right = $self->deparse($right, 9);
- return $self->maybe_parens("$left $type $right", $cx, 9);
-}
-
-sub pp_flop {
- my $self = shift;
- my($op, $cx) = @_;
- my $flip = $op->first;
- my $type = ($flip->flags & OPf_SPECIAL) ? "..." : "..";
- return $self->range($flip->first, $cx, $type);
-}
-
-# one-line while/until is handled in pp_leave
-
-sub logop {
- my $self = shift;
- my ($op, $cx, $lowop, $lowprec, $highop, $highprec, $blockname) = @_;
- my $left = $op->first;
- my $right = $op->first->sibling;
- $blockname &&= $self->keyword($blockname);
- if ($cx < 1 and is_scope($right) and $blockname
- and $self->{'expand'} < 7)
- { # if ($a) {$b}
- $left = $self->deparse($left, 1);
- $right = $self->deparse($right, 0);
- return "$blockname ($left) {\n\t$right\n\b}\cK";
- } elsif ($cx < 1 and $blockname and not $self->{'parens'}
- and $self->{'expand'} < 7) { # $b if $a
- $right = $self->deparse($right, 1);
- $left = $self->deparse($left, 1);
- return "$right $blockname $left";
- } elsif ($cx > $lowprec and $highop) { # $a && $b
- $left = $self->deparse_binop_left($op, $left, $highprec);
- $right = $self->deparse_binop_right($op, $right, $highprec);
- return $self->maybe_parens("$left $highop $right", $cx, $highprec);
- } else { # $a and $b
- $left = $self->deparse_binop_left($op, $left, $lowprec);
- $right = $self->deparse_binop_right($op, $right, $lowprec);
- return $self->maybe_parens("$left $lowop $right", $cx, $lowprec);
- }
-}
-
-sub pp_and { logop(@_, "and", 3, "&&", 11, "if") }
-sub pp_or { logop(@_, "or", 2, "||", 10, "unless") }
-sub pp_dor { logop(@_, "//", 10) }
-
-# xor is syntactically a logop, but it's really a binop (contrary to
-# old versions of opcode.pl). Syntax is what matters here.
-sub pp_xor { logop(@_, "xor", 2, "", 0, "") }
-
-sub logassignop {
- my $self = shift;
- my ($op, $cx, $opname) = @_;
- my $left = $op->first;
- my $right = $op->first->sibling->first; # skip sassign
- $left = $self->deparse($left, 7);
- $right = $self->deparse($right, 7);
- return $self->maybe_parens("$left $opname $right", $cx, 7);
-}
-
-sub pp_andassign { logassignop(@_, "&&=") }
-sub pp_orassign { logassignop(@_, "||=") }
-sub pp_dorassign { logassignop(@_, "//=") }
-
-sub rv2gv_or_string {
- my($self,$op) = @_;
- if ($op->name eq "gv") { # could be open("open") or open("###")
- my($name,$quoted) =
- $self->stash_variable_name("", $self->gv_or_padgv($op));
- $quoted ? $name : "*$name";
- }
- else {
- $self->deparse($op, 6);
- }
-}
-
-sub listop {
- my $self = shift;
- my($op, $cx, $name, $kid, $nollafr) = @_;
- my(@exprs);
- my $parens = ($cx >= 5) || $self->{'parens'};
- $kid ||= $op->first->sibling;
- # If there are no arguments, add final parentheses (or parenthesize the
- # whole thing if the llafr does not apply) to account for cases like
- # (return)+1 or setpgrp()+1. When the llafr does not apply, we use a
- # precedence of 6 (< comma), as "return, 1" does not need parentheses.
- if (null $kid) {
- return $nollafr
- ? $self->maybe_parens($self->keyword($name), $cx, 7)
- : $self->keyword($name) . '()' x (7 < $cx);
- }
- my $first;
- my $fullname = $self->keyword($name);
- my $proto = prototype("CORE::$name");
- if (
- ( (defined $proto && $proto =~ /^;?\*/)
- || $name eq 'select' # select(F) doesn't have a proto
- )
- && $kid->name eq "rv2gv"
- && !($kid->private & OPpLVAL_INTRO)
- ) {
- $first = $self->rv2gv_or_string($kid->first);
- }
- else {
- $first = $self->deparse($kid, 6);
- }
- if ($name eq "chmod" && $first =~ /^\d+$/) {
- $first = sprintf("%#o", $first);
- }
- $first = "+$first"
- if not $parens and not $nollafr and substr($first, 0, 1) eq "(";
- push @exprs, $first;
- $kid = $kid->sibling;
- if (defined $proto && $proto =~ /^\*\*/ && $kid->name eq "rv2gv"
- && !($kid->private & OPpLVAL_INTRO)) {
- push @exprs, $first = $self->rv2gv_or_string($kid->first);
- $kid = $kid->sibling;
- }
- for (; !null($kid); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- if ($name eq "reverse" && ($op->private & OPpREVERSE_INPLACE)) {
- return "$exprs[0] = $fullname"
- . ($parens ? "($exprs[0])" : " $exprs[0]");
- }
-
- if ($parens && $nollafr) {
- return "($fullname " . join(", ", @exprs) . ")";
- } elsif ($parens) {
- return "$fullname(" . join(", ", @exprs) . ")";
- } else {
- return "$fullname " . join(", ", @exprs);
- }
-}
-
-sub pp_bless { listop(@_, "bless") }
-sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") }
-sub pp_substr {
- my ($self,$op,$cx) = @_;
- if ($op->private & OPpSUBSTR_REPL_FIRST) {
- return
- listop($self, $op, 7, "substr", $op->first->sibling->sibling)
- . " = "
- . $self->deparse($op->first->sibling, 7);
- }
- maybe_local(@_, listop(@_, "substr"))
-}
-sub pp_vec { maybe_targmy(@_, \&maybe_local, listop(@_, "vec")) }
-sub pp_index { maybe_targmy(@_, \&listop, "index") }
-sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") }
-sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") }
-sub pp_formline { listop(@_, "formline") } # see also deparse_format
-sub pp_crypt { maybe_targmy(@_, \&listop, "crypt") }
-sub pp_unpack { listop(@_, "unpack") }
-sub pp_pack { listop(@_, "pack") }
-sub pp_join { maybe_targmy(@_, \&listop, "join") }
-sub pp_splice { listop(@_, "splice") }
-sub pp_push { maybe_targmy(@_, \&listop, "push") }
-sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") }
-sub pp_reverse { listop(@_, "reverse") }
-sub pp_warn { listop(@_, "warn") }
-sub pp_die { listop(@_, "die") }
-sub pp_return { listop(@_, "return", undef, 1) } # llafr does not apply
-sub pp_open { listop(@_, "open") }
-sub pp_pipe_op { listop(@_, "pipe") }
-sub pp_tie { listop(@_, "tie") }
-sub pp_binmode { listop(@_, "binmode") }
-sub pp_dbmopen { listop(@_, "dbmopen") }
-sub pp_sselect { listop(@_, "select") }
-sub pp_select { listop(@_, "select") }
-sub pp_read { listop(@_, "read") }
-sub pp_sysopen { listop(@_, "sysopen") }
-sub pp_sysseek { listop(@_, "sysseek") }
-sub pp_sysread { listop(@_, "sysread") }
-sub pp_syswrite { listop(@_, "syswrite") }
-sub pp_send { listop(@_, "send") }
-sub pp_recv { listop(@_, "recv") }
-sub pp_seek { listop(@_, "seek") }
-sub pp_fcntl { listop(@_, "fcntl") }
-sub pp_ioctl { listop(@_, "ioctl") }
-sub pp_flock { maybe_targmy(@_, \&listop, "flock") }
-sub pp_socket { listop(@_, "socket") }
-sub pp_sockpair { listop(@_, "socketpair") }
-sub pp_bind { listop(@_, "bind") }
-sub pp_connect { listop(@_, "connect") }
-sub pp_listen { listop(@_, "listen") }
-sub pp_accept { listop(@_, "accept") }
-sub pp_shutdown { listop(@_, "shutdown") }
-sub pp_gsockopt { listop(@_, "getsockopt") }
-sub pp_ssockopt { listop(@_, "setsockopt") }
-sub pp_chown { maybe_targmy(@_, \&listop, "chown") }
-sub pp_unlink { maybe_targmy(@_, \&listop, "unlink") }
-sub pp_chmod { maybe_targmy(@_, \&listop, "chmod") }
-sub pp_utime { maybe_targmy(@_, \&listop, "utime") }
-sub pp_rename { maybe_targmy(@_, \&listop, "rename") }
-sub pp_link { maybe_targmy(@_, \&listop, "link") }
-sub pp_symlink { maybe_targmy(@_, \&listop, "symlink") }
-sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") }
-sub pp_open_dir { listop(@_, "opendir") }
-sub pp_seekdir { listop(@_, "seekdir") }
-sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") }
-sub pp_system { maybe_targmy(@_, \&indirop, "system") }
-sub pp_exec { maybe_targmy(@_, \&indirop, "exec") }
-sub pp_kill { maybe_targmy(@_, \&listop, "kill") }
-sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") }
-sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") }
-sub pp_setpriority { maybe_targmy(@_, \&listop, "setpriority") }
-sub pp_shmget { listop(@_, "shmget") }
-sub pp_shmctl { listop(@_, "shmctl") }
-sub pp_shmread { listop(@_, "shmread") }
-sub pp_shmwrite { listop(@_, "shmwrite") }
-sub pp_msgget { listop(@_, "msgget") }
-sub pp_msgctl { listop(@_, "msgctl") }
-sub pp_msgsnd { listop(@_, "msgsnd") }
-sub pp_msgrcv { listop(@_, "msgrcv") }
-sub pp_semget { listop(@_, "semget") }
-sub pp_semctl { listop(@_, "semctl") }
-sub pp_semop { listop(@_, "semop") }
-sub pp_ghbyaddr { listop(@_, "gethostbyaddr") }
-sub pp_gnbyaddr { listop(@_, "getnetbyaddr") }
-sub pp_gpbynumber { listop(@_, "getprotobynumber") }
-sub pp_gsbyname { listop(@_, "getservbyname") }
-sub pp_gsbyport { listop(@_, "getservbyport") }
-sub pp_syscall { listop(@_, "syscall") }
-
-sub pp_glob {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first->sibling; # skip pushmark
- my $keyword =
- $op->flags & OPf_SPECIAL ? 'glob' : $self->keyword('glob');
- my $text = $self->deparse($kid);
- return $cx >= 5 || $self->{'parens'}
- ? "$keyword($text)"
- : "$keyword $text";
-}
-
-# Truncate is special because OPf_SPECIAL makes a bareword first arg
-# be a filehandle. This could probably be better fixed in the core
-# by moving the GV lookup into ck_truc.
-
-sub pp_truncate {
- my $self = shift;
- my($op, $cx) = @_;
- my(@exprs);
- my $parens = ($cx >= 5) || $self->{'parens'};
- my $kid = $op->first->sibling;
- my $fh;
- if ($op->flags & OPf_SPECIAL) {
- # $kid is an OP_CONST
- $fh = $self->const_sv($kid)->PV;
- } else {
- $fh = $self->deparse($kid, 6);
- $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "(";
- }
- my $len = $self->deparse($kid->sibling, 6);
- my $name = $self->keyword('truncate');
- if ($parens) {
- return "$name($fh, $len)";
- } else {
- return "$name $fh, $len";
- }
-}
-
-sub indirop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my($expr, @exprs);
- my $firstkid = my $kid = $op->first->sibling;
- my $indir = "";
- if ($op->flags & OPf_STACKED) {
- $indir = $kid;
- $indir = $indir->first; # skip rv2gv
- if (is_scope($indir)) {
- $indir = "{" . $self->deparse($indir, 0) . "}";
- $indir = "{;}" if $indir eq "{}";
- } elsif ($indir->name eq "const" && $indir->private & OPpCONST_BARE) {
- $indir = $self->const_sv($indir)->PV;
- } else {
- $indir = $self->deparse($indir, 24);
- }
- $indir = $indir . " ";
- $kid = $kid->sibling;
- }
- if ($name eq "sort" && $op->private & (OPpSORT_NUMERIC | OPpSORT_INTEGER)) {
- $indir = ($op->private & OPpSORT_DESCEND) ? '{$b <=> $a} '
- : '{$a <=> $b} ';
- }
- elsif ($name eq "sort" && $op->private & OPpSORT_DESCEND) {
- $indir = '{$b cmp $a} ';
- }
- for (; !null($kid); $kid = $kid->sibling) {
- $expr = $self->deparse($kid, !$indir && $kid == $firstkid && $name eq "sort" && $firstkid->name eq "entersub" ? 16 : 6);
- push @exprs, $expr;
- }
- my $name2;
- if ($name eq "sort" && $op->private & OPpSORT_REVERSE) {
- $name2 = $self->keyword('reverse') . ' ' . $self->keyword('sort');
- }
- else { $name2 = $self->keyword($name) }
- if ($name eq "sort" && ($op->private & OPpSORT_INPLACE)) {
- return "$exprs[0] = $name2 $indir $exprs[0]";
- }
-
- my $args = $indir . join(", ", @exprs);
- if ($indir ne "" && $name eq "sort") {
- # We don't want to say "sort(f 1, 2, 3)", since perl -w will
- # give bareword warnings in that case. Therefore if context
- # requires, we'll put parens around the outside "(sort f 1, 2,
- # 3)". Unfortunately, we'll currently think the parens are
- # necessary more often that they really are, because we don't
- # distinguish which side of an assignment we're on.
- if ($cx >= 5) {
- return "($name2 $args)";
- } else {
- return "$name2 $args";
- }
- } elsif (
- !$indir && $name eq "sort"
- && !null($op->first->sibling)
- && $op->first->sibling->name eq 'entersub'
- ) {
- # We cannot say sort foo(bar), as foo will be interpreted as a
- # comparison routine. We have to say sort(...) in that case.
- return "$name2($args)";
- } else {
- return length $args
- ? $self->maybe_parens_func($name2, $args, $cx, 5)
- : $name2 . '()' x (7 < $cx);
- }
-
-}
-
-sub pp_prtf { indirop(@_, "printf") }
-sub pp_print { indirop(@_, "print") }
-sub pp_say { indirop(@_, "say") }
-sub pp_sort { indirop(@_, "sort") }
-
-sub mapop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my($expr, @exprs);
- my $kid = $op->first; # this is the (map|grep)start
- $kid = $kid->first->sibling; # skip a pushmark
- my $code = $kid->first; # skip a null
- if (is_scope $code) {
- $code = "{" . $self->deparse($code, 0) . "} ";
- } else {
- $code = $self->deparse($code, 24);
- $code .= ", " if !null($kid->sibling);
- }
- $kid = $kid->sibling;
- for (; !null($kid); $kid = $kid->sibling) {
- $expr = $self->deparse($kid, 6);
- push @exprs, $expr if defined $expr;
- }
- return $self->maybe_parens_func($self->keyword($name),
- $code . join(", ", @exprs), $cx, 5);
-}
-
-sub pp_mapwhile { mapop(@_, "map") }
-sub pp_grepwhile { mapop(@_, "grep") }
-sub pp_mapstart { baseop(@_, "map") }
-sub pp_grepstart { baseop(@_, "grep") }
-
-my %uses_intro;
-BEGIN {
- @uses_intro{
- eval { require B::Op_private }
- ? @{$B::Op_private::ops_using{OPpLVAL_INTRO}}
- : qw(gvsv rv2sv rv2hv rv2gv rv2av aelem helem aslice
- hslice delete padsv padav padhv enteriter entersub padrange
- pushmark cond_expr refassign list)
- } = ();
- delete @uses_intro{qw( lvref lvrefslice lvavref entersub )};
-}
-
-sub pp_list {
- my $self = shift;
- my($op, $cx) = @_;
- my($expr, @exprs);
- my $kid = $op->first->sibling; # skip pushmark
- return '' if class($kid) eq 'NULL';
- my $lop;
- my $local = "either"; # could be local(...), my(...), state(...) or our(...)
- my $type;
- for ($lop = $kid; !null($lop); $lop = $lop->sibling) {
- my $lopname = $lop->name;
- my $loppriv = $lop->private;
- my $newtype;
- if ($lopname =~ /^pad[ash]v$/ && $loppriv & OPpLVAL_INTRO) {
- if ($loppriv & OPpPAD_STATE) { # state()
- ($local = "", last) if $local !~ /^(?:either|state)$/;
- $local = "state";
- } else { # my()
- ($local = "", last) if $local !~ /^(?:either|my)$/;
- $local = "my";
- }
- my $padname = $self->padname_sv($lop->targ);
- if ($padname->FLAGS & SVpad_TYPED) {
- $newtype = $padname->SvSTASH->NAME;
- }
- } elsif ($lopname =~ /^(?:gv|rv2)([ash])v$/
- && $loppriv & OPpOUR_INTRO
- or $lopname eq "null" && class($lop) eq 'UNOP'
- && $lop->first->name eq "gvsv"
- && $lop->first->private & OPpOUR_INTRO) { # our()
- my $newlocal = "local " x !!($loppriv & OPpLVAL_INTRO) . "our";
- ($local = "", last)
- if $local ne 'either' && $local ne $newlocal;
- $local = $newlocal;
- my $funny = !$1 || $1 eq 's' ? '$' : $1 eq 'a' ? '@' : '%';
- if (my $t = $self->find_our_type(
- $funny . $self->gv_or_padgv($lop->first)->NAME
- )) {
- $newtype = $t;
- }
- } elsif ($lopname ne 'undef'
- and !($loppriv & OPpLVAL_INTRO)
- || !exists $uses_intro{$lopname eq 'null'
- ? substr B::ppname($lop->targ), 3
- : $lopname})
- {
- $local = ""; # or not
- last;
- } elsif ($lopname ne "undef")
- {
- # local()
- ($local = "", last) if $local !~ /^(?:either|local)$/;
- $local = "local";
- }
- if (defined $type && defined $newtype && $newtype ne $type) {
- $local = '';
- last;
- }
- $type = $newtype;
- }
- $local = "" if $local eq "either"; # no point if it's all undefs
- $local &&= join ' ', map $self->keyword($_), split / /, $local;
- $local .= " $type " if $local && length $type;
- return $self->deparse($kid, $cx) if null $kid->sibling and not $local;
- for (; !null($kid); $kid = $kid->sibling) {
- if ($local) {
- if (class($kid) eq "UNOP" and $kid->first->name eq "gvsv") {
- $lop = $kid->first;
- } else {
- $lop = $kid;
- }
- $self->{'avoid_local'}{$$lop}++;
- $expr = $self->deparse($kid, 6);
- delete $self->{'avoid_local'}{$$lop};
- } else {
- $expr = $self->deparse($kid, 6);
- }
- push @exprs, $expr;
- }
- if ($local) {
- return "$local(" . join(", ", @exprs) . ")";
- } else {
- return $self->maybe_parens( join(", ", @exprs), $cx, 6);
- }
-}
-
-sub is_ifelse_cont {
- my $op = shift;
- return ($op->name eq "null" and class($op) eq "UNOP"
- and $op->first->name =~ /^(and|cond_expr)$/
- and is_scope($op->first->first->sibling));
-}
-
-sub pp_cond_expr {
- my $self = shift;
- my($op, $cx) = @_;
- my $cond = $op->first;
- my $true = $cond->sibling;
- my $false = $true->sibling;
- my $cuddle = $self->{'cuddle'};
- unless ($cx < 1 and (is_scope($true) and $true->name ne "null") and
- (is_scope($false) || is_ifelse_cont($false))
- and $self->{'expand'} < 7) {
- $cond = $self->deparse($cond, 8);
- $true = $self->deparse($true, 6);
- $false = $self->deparse($false, 8);
- return $self->maybe_parens("$cond ? $true : $false", $cx, 8);
- }
-
- $cond = $self->deparse($cond, 1);
- $true = $self->deparse($true, 0);
- my $head = $self->keyword("if") . " ($cond) {\n\t$true\n\b}";
- my @elsifs;
- my $elsif;
- while (!null($false) and is_ifelse_cont($false)) {
- my $newop = $false->first;
- my $newcond = $newop->first;
- my $newtrue = $newcond->sibling;
- $false = $newtrue->sibling; # last in chain is OP_AND => no else
- if ($newcond->name eq "lineseq")
- {
- # lineseq to ensure correct line numbers in elsif()
- # Bug #37302 fixed by change #33710.
- $newcond = $newcond->first->sibling;
- }
- $newcond = $self->deparse($newcond, 1);
- $newtrue = $self->deparse($newtrue, 0);
- $elsif ||= $self->keyword("elsif");
- push @elsifs, "$elsif ($newcond) {\n\t$newtrue\n\b}";
- }
- if (!null($false)) {
- $false = $cuddle . $self->keyword("else") . " {\n\t" .
- $self->deparse($false, 0) . "\n\b}\cK";
- } else {
- $false = "\cK";
- }
- return $head . join($cuddle, "", @elsifs) . $false;
-}
-
-sub pp_once {
- my ($self, $op, $cx) = @_;
- my $cond = $op->first;
- my $true = $cond->sibling;
-
- my $ret = $self->deparse($true, $cx);
- $ret =~ s/^(\(?)\$/$1 . $self->keyword("state") . ' $'/e;
- $ret;
-}
-
-sub loop_common {
- my $self = shift;
- my($op, $cx, $init) = @_;
- my $enter = $op->first;
- my $kid = $enter->sibling;
- local(@$self{qw'curstash warnings hints hinthash'})
- = @$self{qw'curstash warnings hints hinthash'};
- my $head = "";
- my $bare = 0;
- my $body;
- my $cond = undef;
- my $name;
- if ($kid->name eq "lineseq") { # bare or infinite loop
- if ($kid->last->name eq "unstack") { # infinite
- $head = "while (1) "; # Can't use for(;;) if there's a continue
- $cond = "";
- } else {
- $bare = 1;
- }
- $body = $kid;
- } elsif ($enter->name eq "enteriter") { # foreach
- my $ary = $enter->first->sibling; # first was pushmark
- my $var = $ary->sibling;
- if ($ary->name eq 'null' and $enter->private & OPpITER_REVERSED) {
- # "reverse" was optimised away
- $ary = listop($self, $ary->first->sibling, 1, 'reverse');
- } elsif ($enter->flags & OPf_STACKED
- and not null $ary->first->sibling->sibling)
- {
- $ary = $self->deparse($ary->first->sibling, 9) . " .. " .
- $self->deparse($ary->first->sibling->sibling, 9);
- } else {
- $ary = $self->deparse($ary, 1);
- }
- if (null $var) {
- $var = $self->pp_padsv($enter, 1, 1);
- } elsif ($var->name eq "rv2gv") {
- $var = $self->pp_rv2sv($var, 1);
- if ($enter->private & OPpOUR_INTRO) {
- # our declarations don't have package names
- $var =~ s/^(.).*::/$1/;
- $var = "our $var";
- }
- } elsif ($var->name eq "gv") {
- $var = "\$" . $self->deparse($var, 1);
- } else {
- $var = $self->deparse($var, 1);
- }
- $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER
- if (!is_state $body->first and $body->first->name !~ /^(?:stub|leave|scope)$/) {
- confess unless $var eq '$_';
- $body = $body->first;
- return $self->deparse($body, 2) . " "
- . $self->keyword("foreach") . " ($ary)";
- }
- $head = "foreach $var ($ary) ";
- } elsif ($kid->name eq "null") { # while/until
- $kid = $kid->first;
- $name = {"and" => "while", "or" => "until"}->{$kid->name};
- $cond = $kid->first;
- $body = $kid->first->sibling;
- } elsif ($kid->name eq "stub") { # bare and empty
- return "{;}"; # {} could be a hashref
- }
- # If there isn't a continue block, then the next pointer for the loop
- # will point to the unstack, which is kid's last child, except
- # in a bare loop, when it will point to the leaveloop. When neither of
- # these conditions hold, then the second-to-last child is the continue
- # block (or the last in a bare loop).
- my $cont_start = $enter->nextop;
- my $cont;
- my $precond;
- my $postcond;
- if ($$cont_start != $$op && ${$cont_start} != ${$body->last}) {
- if ($bare) {
- $cont = $body->last;
- } else {
- $cont = $body->first;
- while (!null($cont->sibling->sibling)) {
- $cont = $cont->sibling;
- }
- }
- my $state = $body->first;
- my $cuddle = $self->{'cuddle'};
- my @states;
- for (; $$state != $$cont; $state = $state->sibling) {
- push @states, $state;
- }
- $body = $self->lineseq(undef, 0, @states);
- if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) {
- $precond = "for ($init; ";
- $postcond = "; " . $self->deparse($cont, 1) .") ";
- $cont = "\cK";
- } else {
- $cont = $cuddle . "continue {\n\t" .
- $self->deparse($cont, 0) . "\n\b}\cK";
- }
- } else {
- return "" if !defined $body;
- if (length $init) {
- $precond = "for ($init; ";
- $postcond = ";) ";
- }
- $cont = "\cK";
- $body = $self->deparse($body, 0);
- }
- if ($precond) { # for(;;)
- $cond &&= $name eq 'until'
- ? listop($self, undef, 1, "not", $cond->first)
- : $self->deparse($cond, 1);
- $head = "$precond$cond$postcond";
- }
- if ($name && !$head) {
- ref $cond and $cond = $self->deparse($cond, 1);
- $head = "$name ($cond) ";
- }
- $head =~ s/^(for(?:each)?|while|until)/$self->keyword($1)/e;
- $body =~ s/;?$/;\n/;
-
- return $head . "{\n\t" . $body . "\b}" . $cont;
-}
-
-sub pp_leaveloop { shift->loop_common(@_, "") }
-
-sub for_loop {
- my $self = shift;
- my($op, $cx) = @_;
- my $init = $self->deparse($op, 1);
- my $s = $op->sibling;
- my $ll = $s->name eq "unstack" ? $s->sibling : $s->first->sibling;
- return $self->loop_common($ll, $cx, $init);
-}
-
-sub pp_leavetry {
- my $self = shift;
- return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}";
-}
-
-sub _op_is_or_was {
- my ($op, $expect_type) = @_;
- my $type = $op->type;
- return($type == $expect_type
- || ($type == OP_NULL && $op->targ == $expect_type));
-}
-
-sub pp_null {
- my($self, $op, $cx) = @_;
- if (class($op) eq "OP") {
- # old value is lost
- return $self->{'ex_const'} if $op->targ == OP_CONST;
- } elsif (class ($op) eq "COP") {
- return &pp_nextstate;
- } elsif ($op->first->name eq 'pushmark'
- or $op->first->name eq 'null'
- && $op->first->targ == OP_PUSHMARK
- && _op_is_or_was($op, OP_LIST)) {
- return $self->pp_list($op, $cx);
- } elsif ($op->first->name eq "enter") {
- return $self->pp_leave($op, $cx);
- } elsif ($op->first->name eq "leave") {
- return $self->pp_leave($op->first, $cx);
- } elsif ($op->first->name eq "scope") {
- return $self->pp_scope($op->first, $cx);
- } elsif ($op->targ == OP_STRINGIFY) {
- return $self->dquote($op, $cx);
- } elsif ($op->targ == OP_GLOB) {
- return $self->pp_glob(
- $op->first # entersub
- ->first # ex-list
- ->first # pushmark
- ->sibling, # glob
- $cx
- );
- } elsif (!null($op->first->sibling) and
- $op->first->sibling->name eq "readline" and
- $op->first->sibling->flags & OPf_STACKED) {
- return $self->maybe_parens($self->deparse($op->first, 7) . " = "
- . $self->deparse($op->first->sibling, 7),
- $cx, 7);
- } elsif (!null($op->first->sibling) and
- $op->first->sibling->name =~ /^transr?\z/ and
- $op->first->sibling->flags & OPf_STACKED) {
- return $self->maybe_parens($self->deparse($op->first, 20) . " =~ "
- . $self->deparse($op->first->sibling, 20),
- $cx, 20);
- } elsif ($op->flags & OPf_SPECIAL && $cx < 1 && !$op->targ) {
- return ($self->lex_in_scope("&do") ? "CORE::do" : "do")
- . " {\n\t". $self->deparse($op->first, $cx) ."\n\b};";
- } elsif (!null($op->first->sibling) and
- $op->first->sibling->name eq "null" and
- class($op->first->sibling) eq "UNOP" and
- $op->first->sibling->first->flags & OPf_STACKED and
- $op->first->sibling->first->name eq "rcatline") {
- return $self->maybe_parens($self->deparse($op->first, 18) . " .= "
- . $self->deparse($op->first->sibling, 18),
- $cx, 18);
- } else {
- return $self->deparse($op->first, $cx);
- }
-}
-
-sub padname {
- my $self = shift;
- my $targ = shift;
- return $self->padname_sv($targ)->PVX;
-}
-
-sub padany {
- my $self = shift;
- my $op = shift;
- return substr($self->padname($op->targ), 1); # skip $/@/%
-}
-
-sub pp_padsv {
- my $self = shift;
- my($op, $cx, $forbid_parens) = @_;
- my $targ = $op->targ;
- return $self->maybe_my($op, $cx, $self->padname($targ),
- $self->padname_sv($targ),
- $forbid_parens);
-}
-
-sub pp_padav { pp_padsv(@_) }
-sub pp_padhv { pp_padsv(@_) }
-
-sub gv_or_padgv {
- my $self = shift;
- my $op = shift;
- if (class($op) eq "PADOP") {
- return $self->padval($op->padix);
- } else { # class($op) eq "SVOP"
- return $op->gv;
- }
-}
-
-sub pp_gvsv {
- my $self = shift;
- my($op, $cx) = @_;
- my $gv = $self->gv_or_padgv($op);
- return $self->maybe_local($op, $cx, $self->stash_variable("\$",
- $self->gv_name($gv), $cx));
-}
-
-sub pp_gv {
- my $self = shift;
- my($op, $cx) = @_;
- my $gv = $self->gv_or_padgv($op);
- return $self->gv_name($gv);
-}
-
-sub pp_aelemfast_lex {
- my $self = shift;
- my($op, $cx) = @_;
- my $name = $self->padname($op->targ);
- $name =~ s/^@/\$/;
- my $i = $op->private;
- $i -= 256 if $i > 127;
- return $name . "[" . ($i + $self->{'arybase'}) . "]";
-}
-
-sub pp_aelemfast {
- my $self = shift;
- my($op, $cx) = @_;
- # optimised PADAV, pre 5.15
- return $self->pp_aelemfast_lex(@_) if ($op->flags & OPf_SPECIAL);
-
- my $gv = $self->gv_or_padgv($op);
- my($name,$quoted) = $self->stash_variable_name('@',$gv);
- $name = $quoted ? "$name->" : '$' . $name;
- my $i = $op->private;
- $i -= 256 if $i > 127;
- return $name . "[" . ($i + $self->{'arybase'}) . "]";
-}
-
-sub rv2x {
- my $self = shift;
- my($op, $cx, $type) = @_;
-
- if (class($op) eq 'NULL' || !$op->can("first")) {
- carp("Unexpected op in pp_rv2x");
- return 'XXX';
- }
- my $kid = $op->first;
- if ($kid->name eq "gv") {
- return $self->stash_variable($type, $self->deparse($kid, 0), $cx);
- } elsif (is_scalar $kid) {
- my $str = $self->deparse($kid, 0);
- if ($str =~ /^\$([^\w\d])\z/) {
- # "$$+" isn't a legal way to write the scalar dereference
- # of $+, since the lexer can't tell you aren't trying to
- # do something like "$$ + 1" to get one more than your
- # PID. Either "${$+}" or "$${+}" are workable
- # disambiguations, but if the programmer did the former,
- # they'd be in the "else" clause below rather than here.
- # It's not clear if this should somehow be unified with
- # the code in dq and re_dq that also adds lexer
- # disambiguation braces.
- $str = '$' . "{$1}"; #'
- }
- return $type . $str;
- } else {
- return $type . "{" . $self->deparse($kid, 0) . "}";
- }
-}
-
-sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) }
-sub pp_rv2hv { maybe_local(@_, rv2x(@_, "%")) }
-sub pp_rv2gv { maybe_local(@_, rv2x(@_, "*")) }
-
-# skip rv2av
-sub pp_av2arylen {
- my $self = shift;
- my($op, $cx) = @_;
- if ($op->first->name eq "padav") {
- return $self->maybe_local($op, $cx, '$#' . $self->padany($op->first));
- } else {
- return $self->maybe_local($op, $cx,
- $self->rv2x($op->first, $cx, '$#'));
- }
-}
-
-# skip down to the old, ex-rv2cv
-sub pp_rv2cv {
- my ($self, $op, $cx) = @_;
- if (!null($op->first) && $op->first->name eq 'null' &&
- $op->first->targ == OP_LIST)
- {
- return $self->rv2x($op->first->first->sibling, $cx, "&")
- }
- else {
- return $self->rv2x($op, $cx, "")
- }
-}
-
-sub list_const {
- my $self = shift;
- my($cx, @list) = @_;
- my @a = map $self->const($_, 6), @list;
- if (@a == 0) {
- return "()";
- } elsif (@a == 1) {
- return $a[0];
- } elsif ( @a > 2 and !grep(!/^-?\d+$/, @a)) {
- # collapse (-1,0,1,2) into (-1..2)
- my ($s, $e) = @a[0,-1];
- my $i = $s;
- return $self->maybe_parens("$s..$e", $cx, 9)
- unless grep $i++ != $_, @a;
- }
- return $self->maybe_parens(join(", ", @a), $cx, 6);
-}
-
-sub pp_rv2av {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if ($kid->name eq "const") { # constant list
- my $av = $self->const_sv($kid);
- return $self->list_const($cx, $av->ARRAY);
- } else {
- return $self->maybe_local($op, $cx, $self->rv2x($op, $cx, "\@"));
- }
- }
-
-sub is_subscriptable {
- my $op = shift;
- if ($op->name =~ /^([ahg]elem|multideref$)/) {
- return 1;
- } elsif ($op->name eq "entersub") {
- my $kid = $op->first;
- return 0 unless null $kid->sibling;
- $kid = $kid->first;
- $kid = $kid->sibling until null $kid->sibling;
- return 0 if is_scope($kid);
- $kid = $kid->first;
- return 0 if $kid->name eq "gv" || $kid->name eq "padcv";
- return 0 if is_scalar($kid);
- return is_subscriptable($kid);
- } else {
- return 0;
- }
-}
-
-sub elem_or_slice_array_name
-{
- my $self = shift;
- my ($array, $left, $padname, $allow_arrow) = @_;
-
- if ($array->name eq $padname) {
- return $self->padany($array);
- } elsif (is_scope($array)) { # ${expr}[0]
- return "{" . $self->deparse($array, 0) . "}";
- } elsif ($array->name eq "gv") {
- ($array, my $quoted) =
- $self->stash_variable_name(
- $left eq '[' ? '@' : '%', $self->gv_or_padgv($array)
- );
- if (!$allow_arrow && $quoted) {
- # This cannot happen.
- die "Invalid variable name $array for slice";
- }
- return $quoted ? "$array->" : $array;
- } elsif (!$allow_arrow || is_scalar $array) { # $x[0], $$x[0], ...
- return $self->deparse($array, 24);
- } else {
- return undef;
- }
-}
-
-sub elem_or_slice_single_index
-{
- my $self = shift;
- my ($idx) = @_;
-
- $idx = $self->deparse($idx, 1);
-
- # Outer parens in an array index will confuse perl
- # if we're interpolating in a regular expression, i.e.
- # /$x$foo[(-1)]/ is *not* the same as /$x$foo[-1]/
- #
- # If $self->{parens}, then an initial '(' will
- # definitely be paired with a final ')'. If
- # !$self->{parens}, the misleading parens won't
- # have been added in the first place.
- #
- # [You might think that we could get "(...)...(...)"
- # where the initial and final parens do not match
- # each other. But we can't, because the above would
- # only happen if there's an infix binop between the
- # two pairs of parens, and *that* means that the whole
- # expression would be parenthesized as well.]
- #
- $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
-
- # Hash-element braces will autoquote a bareword inside themselves.
- # We need to make sure that C<$hash{warn()}> doesn't come out as
- # C<$hash{warn}>, which has a quite different meaning. Currently
- # B::Deparse will always quote strings, even if the string was a
- # bareword in the original (i.e. the OPpCONST_BARE flag is ignored
- # for constant strings.) So we can cheat slightly here - if we see
- # a bareword, we know that it is supposed to be a function call.
- #
- $idx =~ s/^([A-Za-z_]\w*)$/$1()/;
-
- return $idx;
-}
-
-sub elem {
- my $self = shift;
- my ($op, $cx, $left, $right, $padname) = @_;
- my($array, $idx) = ($op->first, $op->first->sibling);
-
- $idx = $self->elem_or_slice_single_index($idx);
-
- unless ($array->name eq $padname) { # Maybe this has been fixed
- $array = $array->first; # skip rv2av (or ex-rv2av in _53+)
- }
- if (my $array_name=$self->elem_or_slice_array_name
- ($array, $left, $padname, 1)) {
- return ($array_name =~ /->\z/
- ? $array_name
- : $array_name eq '#' ? '${#}' : "\$" . $array_name)
- . $left . $idx . $right;
- } else {
- # $x[20][3]{hi} or expr->[20]
- my $arrow = is_subscriptable($array) ? "" : "->";
- return $self->deparse($array, 24) . $arrow . $left . $idx . $right;
- }
-
-}
-
-# a simplified version of elem_or_slice_array_name()
-# for the use of pp_multideref
-
-sub multideref_var_name {
- my $self = shift;
- my ($gv, $is_hash) = @_;
-
- my ($name, $quoted) =
- $self->stash_variable_name( $is_hash ? '%' : '@', $gv);
- return $quoted ? "$name->"
- : $name eq '#'
- ? '${#}' # avoid ${#}[1] => $#[1]
- : '$' . $name;
-}
-
-
-sub pp_multideref {
- my $self = shift;
- my($op, $cx) = @_;
- my $text = "";
-
- if ($op->private & OPpMULTIDEREF_EXISTS) {
- $text = $self->keyword("exists"). " ";
- }
- elsif ($op->private & OPpMULTIDEREF_DELETE) {
- $text = $self->keyword("delete"). " ";
- }
- elsif ($op->private & OPpLVAL_INTRO) {
- $text = $self->keyword("local"). " ";
- }
-
- if ($op->first && ($op->first->flags & OPf_KIDS)) {
- # arbitrary initial expression, e.g. f(1,2,3)->[...]
- $text .= $self->deparse($op->first, 24);
- }
-
- my @items = $op->aux_list($self->{curcv});
- my $actions = shift @items;
-
- my $is_hash;
- my $derefs = 0;
-
- while (1) {
- if (($actions & MDEREF_ACTION_MASK) == MDEREF_reload) {
- $actions = shift @items;
- next;
- }
-
- $is_hash = (
- ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_pop_rv2hv_helem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvsv_vivify_rv2hv_helem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padsv_vivify_rv2hv_helem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_vivify_rv2hv_helem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padhv_helem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvhv_helem
- );
-
- if ( ($actions & MDEREF_ACTION_MASK) == MDEREF_AV_padav_aelem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_padhv_helem)
- {
- $derefs = 1;
- $text .= '$' . substr($self->padname(shift @items), 1);
- }
- elsif ( ($actions & MDEREF_ACTION_MASK) == MDEREF_AV_gvav_aelem
- || ($actions & MDEREF_ACTION_MASK) == MDEREF_HV_gvhv_helem)
- {
- $derefs = 1;
- $text .= $self->multideref_var_name(shift @items, $is_hash);
- }
- else {
- if ( ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_AV_padsv_vivify_rv2av_aelem
- || ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_HV_padsv_vivify_rv2hv_helem)
- {
- $text .= $self->padname(shift @items);
- }
- elsif ( ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_AV_gvsv_vivify_rv2av_aelem
- || ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_HV_gvsv_vivify_rv2hv_helem)
- {
- $text .= $self->multideref_var_name(shift @items, $is_hash);
- }
- elsif ( ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_AV_pop_rv2av_aelem
- || ($actions & MDEREF_ACTION_MASK) ==
- MDEREF_HV_pop_rv2hv_helem)
- {
- if ( ($op->flags & OPf_KIDS)
- && ( _op_is_or_was($op->first, OP_RV2AV)
- || _op_is_or_was($op->first, OP_RV2HV))
- && ($op->first->flags & OPf_KIDS)
- && ( _op_is_or_was($op->first->first, OP_AELEM)
- || _op_is_or_was($op->first->first, OP_HELEM))
- )
- {
- $derefs++;
- }
- }
-
- $text .= '->' if !$derefs++;
- }
-
-
- if (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_none) {
- last;
- }
-
- $text .= $is_hash ? '{' : '[';
-
- if (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_const) {
- my $key = shift @items;
- if ($is_hash) {
- $text .= $self->const($key, $cx);
- }
- else {
- $text .= $key;
- }
- }
- elsif (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_padsv) {
- $text .= $self->padname(shift @items);
- }
- elsif (($actions & MDEREF_INDEX_MASK) == MDEREF_INDEX_gvsv) {
- $text .= '$' . ($self->stash_variable_name('$', shift @items))[0];
- }
-
- $text .= $is_hash ? '}' : ']';
-
- if ($actions & MDEREF_FLAG_last) {
- last;
- }
- $actions >>= MDEREF_SHIFT;
- }
-
- return $text;
-}
-
-
-sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) }
-sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) }
-
-sub pp_gelem {
- my $self = shift;
- my($op, $cx) = @_;
- my($glob, $part) = ($op->first, $op->last);
- $glob = $glob->first; # skip rv2gv
- $glob = $glob->first if $glob->name eq "rv2gv"; # this one's a bug
- my $scope = is_scope($glob);
- $glob = $self->deparse($glob, 0);
- $part = $self->deparse($part, 1);
- return "*" . ($scope ? "{$glob}" : $glob) . "{$part}";
-}
-
-sub slice {
- my $self = shift;
- my ($op, $cx, $left, $right, $regname, $padname) = @_;
- my $last;
- my(@elems, $kid, $array, $list);
- if (class($op) eq "LISTOP") {
- $last = $op->last;
- } else { # ex-hslice inside delete()
- for ($kid = $op->first; !null $kid->sibling; $kid = $kid->sibling) {}
- $last = $kid;
- }
- $array = $last;
- $array = $array->first
- if $array->name eq $regname or $array->name eq "null";
- $array = $self->elem_or_slice_array_name($array,$left,$padname,0);
- $kid = $op->first->sibling; # skip pushmark
- if ($kid->name eq "list") {
- $kid = $kid->first->sibling; # skip list, pushmark
- for (; !null $kid; $kid = $kid->sibling) {
- push @elems, $self->deparse($kid, 6);
- }
- $list = join(", ", @elems);
- } else {
- $list = $self->elem_or_slice_single_index($kid);
- }
- my $lead = '@';
- $lead = '%' if $op->name =~ /^kv/i;
- return $lead . $array . $left . $list . $right;
-}
-
-sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
-sub pp_kvaslice { slice(@_, "[", "]", "rv2av", "padav") }
-sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
-sub pp_kvhslice { slice(@_, "{", "}", "rv2hv", "padhv") }
-
-sub pp_lslice {
- my $self = shift;
- my($op, $cx) = @_;
- my $idx = $op->first;
- my $list = $op->last;
- my(@elems, $kid);
- $list = $self->deparse($list, 1);
- $idx = $self->deparse($idx, 1);
- return "($list)" . "[$idx]";
-}
-
-sub want_scalar {
- my $op = shift;
- return ($op->flags & OPf_WANT) == OPf_WANT_SCALAR;
-}
-
-sub want_list {
- my $op = shift;
- return ($op->flags & OPf_WANT) == OPf_WANT_LIST;
-}
-
-sub _method {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first->sibling; # skip pushmark
- my($meth, $obj, @exprs);
- if ($kid->name eq "list" and want_list $kid) {
- # When an indirect object isn't a bareword but the args are in
- # parens, the parens aren't part of the method syntax (the LLAFR
- # doesn't apply), but they make a list with OPf_PARENS set that
- # doesn't get flattened by the append_elem that adds the method,
- # making a (object, arg1, arg2, ...) list where the object
- # usually is. This can be distinguished from
- # '($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an
- # object) because in the later the list is in scalar context
- # as the left side of -> always is, while in the former
- # the list is in list context as method arguments always are.
- # (Good thing there aren't method prototypes!)
- $meth = $kid->sibling;
- $kid = $kid->first->sibling; # skip pushmark
- $obj = $kid;
- $kid = $kid->sibling;
- for (; not null $kid; $kid = $kid->sibling) {
- push @exprs, $kid;
- }
- } else {
- $obj = $kid;
- $kid = $kid->sibling;
- for (; !null ($kid->sibling) && $kid->name!~/^method(?:_named)?\z/;
- $kid = $kid->sibling) {
- push @exprs, $kid
- }
- $meth = $kid;
- }
-
- if ($meth->name eq "method_named") {
- $meth = $self->meth_sv($meth)->PV;
- } elsif ($meth->name eq "method_super") {
- $meth = "SUPER::".$self->meth_sv($meth)->PV;
- } elsif ($meth->name eq "method_redir") {
- $meth = $self->meth_rclass_sv($meth)->PV.'::'.$self->meth_sv($meth)->PV;
- } elsif ($meth->name eq "method_redir_super") {
- $meth = $self->meth_rclass_sv($meth)->PV.'::SUPER::'.
- $self->meth_sv($meth)->PV;
- } else {
- $meth = $meth->first;
- if ($meth->name eq "const") {
- # As of 5.005_58, this case is probably obsoleted by the
- # method_named case above
- $meth = $self->const_sv($meth)->PV; # needs to be bare
- }
- }
-
- return { method => $meth, variable_method => ref($meth),
- object => $obj, args => \@exprs },
- $cx;
-}
-
-# compat function only
-sub method {
- my $self = shift;
- my $info = $self->_method(@_);
- return $self->e_method( $self->_method(@_) );
-}
-
-sub e_method {
- my ($self, $info, $cx) = @_;
- my $obj = $self->deparse($info->{object}, 24);
-
- my $meth = $info->{method};
- $meth = $self->deparse($meth, 1) if $info->{variable_method};
- my $args = join(", ", map { $self->deparse($_, 6) } @{$info->{args}} );
- if ($info->{object}->name eq 'scope' && want_list $info->{object}) {
- # method { $object }
- # This must be deparsed this way to preserve list context
- # of $object.
- my $need_paren = $cx >= 6;
- return '(' x $need_paren
- . $meth . substr($obj,2) # chop off the "do"
- . " $args"
- . ')' x $need_paren;
- }
- my $kid = $obj . "->" . $meth;
- if (length $args) {
- return $kid . "(" . $args . ")"; # parens mandatory
- } else {
- return $kid;
- }
-}
-
-# returns "&" if the prototype doesn't match the args,
-# or ("", $args_after_prototype_demunging) if it does.
-sub check_proto {
- my $self = shift;
- return "&" if $self->{'noproto'};
- my($proto, @args) = @_;
- my($arg, $real);
- my $doneok = 0;
- my @reals;
- # An unbackslashed @ or % gobbles up the rest of the args
- 1 while $proto =~ s/(?deparse($_, 6), @args);
- @args = ();
- } else {
- $arg = shift @args;
- last unless $arg;
- if ($chr eq "\$" || $chr eq "_") {
- if (want_scalar $arg) {
- push @reals, $self->deparse($arg, 6);
- } else {
- return "&";
- }
- } elsif ($chr eq "&") {
- if ($arg->name =~ /^(s?refgen|undef)$/) {
- push @reals, $self->deparse($arg, 6);
- } else {
- return "&";
- }
- } elsif ($chr eq "*") {
- if ($arg->name =~ /^s?refgen$/
- and $arg->first->first->name eq "rv2gv")
- {
- $real = $arg->first->first; # skip refgen, null
- if ($real->first->name eq "gv") {
- push @reals, $self->deparse($real, 6);
- } else {
- push @reals, $self->deparse($real->first, 6);
- }
- } else {
- return "&";
- }
- } elsif (substr($chr, 0, 1) eq "\\") {
- $chr =~ tr/\\[]//d;
- if ($arg->name =~ /^s?refgen$/ and
- !null($real = $arg->first) and
- ($chr =~ /\$/ && is_scalar($real->first)
- or ($chr =~ /@/
- && class($real->first->sibling) ne 'NULL'
- && $real->first->sibling->name
- =~ /^(rv2|pad)av$/)
- or ($chr =~ /%/
- && class($real->first->sibling) ne 'NULL'
- && $real->first->sibling->name
- =~ /^(rv2|pad)hv$/)
- #or ($chr =~ /&/ # This doesn't work
- # && $real->first->name eq "rv2cv")
- or ($chr =~ /\*/
- && $real->first->name eq "rv2gv")))
- {
- push @reals, $self->deparse($real, 6);
- } else {
- return "&";
- }
- }
- }
- }
- return "&" if $proto and !$doneok; # too few args and no ';'
- return "&" if @args; # too many args
- return ("", join ", ", @reals);
-}
-
-sub retscalar {
- my $name = $_[0]->name;
- # XXX There has to be a better way of doing this scalar-op check.
- # Currently PL_opargs is not exposed.
- if ($name eq 'null') {
- $name = substr B::ppname($_[0]->targ), 3
- }
- $name =~ /^(?:scalar|pushmark|wantarray|const|gvsv|gv|padsv|rv2gv
- |rv2sv|av2arylen|anoncode|prototype|srefgen|ref|bless
- |regcmaybe|regcreset|regcomp|qr|subst|substcont|trans
- |transr|sassign|chop|schop|chomp|schomp|defined|undef
- |study|pos|preinc|i_preinc|predec|i_predec|postinc
- |i_postinc|postdec|i_postdec|pow|multiply|i_multiply
- |divide|i_divide|modulo|i_modulo|add|i_add|subtract
- |i_subtract|concat|stringify|left_shift|right_shift|lt
- |i_lt|gt|i_gt|le|i_le|ge|i_ge|eq|i_eq|ne|i_ne|ncmp|i_ncmp
- |slt|sgt|sle|sge|seq|sne|scmp|[sn]?bit_(?:and|x?or)|negate
- |i_negate|not|[sn]?complement|smartmatch|atan2|sin|cos
- |rand|srand|exp|log|sqrt|int|hex|oct|abs|length|substr
- |vec|index|rindex|sprintf|formline|ord|chr|crypt|ucfirst
- |lcfirst|uc|lc|quotemeta|aelemfast|aelem|exists|helem
- |pack|join|anonlist|anonhash|push|pop|shift|unshift|xor
- |andassign|orassign|dorassign|warn|die|reset|nextstate
- |dbstate|unstack|last|next|redo|dump|goto|exit|open|close
- |pipe_op|fileno|umask|binmode|tie|untie|tied|dbmopen
- |dbmclose|select|getc|read|enterwrite|prtf|print|say
- |sysopen|sysseek|sysread|syswrite|eof|tell|seek|truncate
- |fcntl|ioctl|flock|send|recv|socket|sockpair|bind|connect
- |listen|accept|shutdown|gsockopt|ssockopt|getsockname
- |getpeername|ftrread|ftrwrite|ftrexec|fteread|ftewrite
- |fteexec|ftis|ftsize|ftmtime|ftatime|ftctime|ftrowned
- |fteowned|ftzero|ftsock|ftchr|ftblk|ftfile|ftdir|ftpipe
- |ftsuid|ftsgid|ftsvtx|ftlink|fttty|fttext|ftbinary|chdir
- |chown|chroot|unlink|chmod|utime|rename|link|symlink
- |readlink|mkdir|rmdir|open_dir|telldir|seekdir|rewinddir
- |closedir|fork|wait|waitpid|system|exec|kill|getppid
- |getpgrp|setpgrp|getpriority|setpriority|time|alarm|sleep
- |shmget|shmctl|shmread|shmwrite|msgget|msgctl|msgsnd
- |msgrcv|semop|semget|semctl|hintseval|shostent|snetent
- |sprotoent|sservent|ehostent|enetent|eprotoent|eservent
- |spwent|epwent|sgrent|egrent|getlogin|syscall|lock|runcv
- |fc)\z/x
-}
-
-sub pp_entersub {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->e_method($self->_method($op, $cx))
- unless null $op->first->sibling;
- my $prefix = "";
- my $amper = "";
- my($kid, @exprs);
- if ($op->flags & OPf_SPECIAL && !($op->flags & OPf_MOD)) {
- $prefix = "do ";
- } elsif ($op->private & OPpENTERSUB_AMPER) {
- $amper = "&";
- }
- $kid = $op->first;
- $kid = $kid->first->sibling; # skip ex-list, pushmark
- for (; not null $kid->sibling; $kid = $kid->sibling) {
- push @exprs, $kid;
- }
- my $simple = 0;
- my $proto = undef;
- my $lexical;
- if (is_scope($kid)) {
- $amper = "&";
- $kid = "{" . $self->deparse($kid, 0) . "}";
- } elsif ($kid->first->name eq "gv") {
- my $gv = $self->gv_or_padgv($kid->first);
- my $cv;
- if (class($gv) eq 'GV' && class($cv = $gv->CV) ne "SPECIAL"
- || $gv->FLAGS & SVf_ROK && class($cv = $gv->RV) eq 'CV') {
- $proto = $cv->PV if $cv->FLAGS & SVf_POK;
- }
- $simple = 1; # only calls of named functions can be prototyped
- $kid = $self->deparse($kid, 24);
- my $fq;
- # Fully qualify any sub name that conflicts with a lexical.
- if ($self->lex_in_scope("&$kid")
- || $self->lex_in_scope("&$kid", 1))
- {
- $fq++;
- } elsif (!$amper) {
- if ($kid eq 'main::') {
- $kid = '::';
- }
- else {
- if ($kid !~ /::/ && $kid ne 'x') {
- # Fully qualify any sub name that is also a keyword. While
- # we could check the import flag, we cannot guarantee that
- # the code deparsed so far would set that flag, so we qual-
- # ify the names regardless of importation.
- if (exists $feature_keywords{$kid}) {
- $fq++ if $self->feature_enabled($kid);
- } elsif (do { local $@; local $SIG{__DIE__};
- eval { () = prototype "CORE::$kid"; 1 } }) {
- $fq++
- }
- }
- if ($kid !~ /^(?:\w|::)(?:[\w\d]|::(?!\z))*\z/) {
- $kid = single_delim("q", "'", $kid, $self) . '->';
- }
- }
- }
- $fq and substr $kid, 0, 0, = $self->{'curstash'}.'::';
- } elsif (is_scalar ($kid->first) && $kid->first->name ne 'rv2cv') {
- $amper = "&";
- $kid = $self->deparse($kid, 24);
- } else {
- $prefix = "";
- my $grandkid = $kid->first;
- my $arrow = ($lexical = $grandkid->name eq "padcv")
- || is_subscriptable($grandkid)
- ? ""
- : "->";
- $kid = $self->deparse($kid, 24) . $arrow;
- if ($lexical) {
- my $padlist = $self->{'curcv'}->PADLIST;
- my $padoff = $grandkid->targ;
- my $padname = $padlist->ARRAYelt(0)->ARRAYelt($padoff);
- my $protocv = $padname->FLAGS & SVpad_STATE
- ? $padlist->ARRAYelt(1)->ARRAYelt($padoff)
- : $padname->PROTOCV;
- if ($protocv->FLAGS & SVf_POK) {
- $proto = $protocv->PV
- }
- $simple = 1;
- }
- }
-
- # Doesn't matter how many prototypes there are, if
- # they haven't happened yet!
- my $declared = $lexical || exists $self->{'subs_declared'}{$kid};
- if (not $declared and $self->{'in_coderef2text'}) {
- no strict 'refs';
- no warnings 'uninitialized';
- $declared =
- (
- defined &{ ${$self->{'curstash'}."::"}{$kid} }
- && !exists
- $self->{'subs_deparsed'}{$self->{'curstash'}."::".$kid}
- && defined prototype $self->{'curstash'}."::".$kid
- );
- }
- if (!$declared && defined($proto)) {
- # Avoid "too early to check prototype" warning
- ($amper, $proto) = ('&');
- }
-
- my $args;
- my $listargs = 1;
- if ($declared and defined $proto and not $amper) {
- ($amper, $args) = $self->check_proto($proto, @exprs);
- $listargs = $amper;
- }
- if ($listargs) {
- $args = join(", ", map(
- ($_->flags & OPf_WANT) == OPf_WANT_SCALAR
- && !retscalar($_)
- ? $self->maybe_parens_unop('scalar', $_, 6)
- : $self->deparse($_, 6),
- @exprs
- ));
- }
- if ($prefix or $amper) {
- if ($kid eq '&') { $kid = "{$kid}" } # &{&} cannot be written as &&
- if ($op->flags & OPf_STACKED) {
- return $prefix . $amper . $kid . "(" . $args . ")";
- } else {
- return $prefix . $amper. $kid;
- }
- } else {
- # It's a syntax error to call CORE::GLOBAL::foo with a prefix,
- # so it must have been translated from a keyword call. Translate
- # it back.
- $kid =~ s/^CORE::GLOBAL:://;
-
- my $dproto = defined($proto) ? $proto : "undefined";
- my $scalar_proto = $dproto =~ /^;*(?:[\$*_+]|\\.|\\\[[^]]\])\z/;
- if (!$declared) {
- return "$kid(" . $args . ")";
- } elsif ($dproto =~ /^\s*\z/) {
- return $kid;
- } elsif ($scalar_proto and is_scalar($exprs[0])) {
- # is_scalar is an excessively conservative test here:
- # really, we should be comparing to the precedence of the
- # top operator of $exprs[0] (ala unop()), but that would
- # take some major code restructuring to do right.
- return $self->maybe_parens_func($kid, $args, $cx, 16);
- } elsif (not $scalar_proto and defined($proto) || $simple) { #'
- return $self->maybe_parens_func($kid, $args, $cx, 5);
- } else {
- return "$kid(" . $args . ")";
- }
- }
-}
-
-sub pp_enterwrite { unop(@_, "write") }
-
-# escape things that cause interpolation in double quotes,
-# but not character escapes
-sub uninterp {
- my($str) = @_;
- $str =~ s/(^|\G|[^\\])((?:\\\\)*)([\$\@]|\\[uUlLQE])/$1$2\\$3/g;
- return $str;
-}
-
-{
-my $bal;
-BEGIN {
- use re "eval";
- # Matches any string which is balanced with respect to {braces}
- $bal = qr(
- (?:
- [^\\{}]
- | \\\\
- | \\[{}]
- | \{(??{$bal})\}
- )*
- )x;
-}
-
-# the same, but treat $|, $), $( and $ at the end of the string differently
-# and leave comments unmangled for the sake of /x and (?x).
-sub re_uninterp {
- my($str) = @_;
-
- $str =~ s/
- ( ^|\G # $1
- | [^\\]
- )
-
- ( # $2
- (?:\\\\)*
- )
-
- ( # $3
- ( \(\?\??\{$bal\}\) # $4 (skip over (?{}) and (??{}) blocks)
- | \#[^\n]* # (skip over comments)
- )
- | [\$\@]
- (?!\||\)|\(|$|\s)
- | \\[uUlLQE]
- )
-
- /defined($4) && length($4) ? "$1$2$4" : "$1$2\\$3"/xeg;
-
- return $str;
-}
-}
-
-# character escapes, but not delimiters that might need to be escaped
-sub escape_str { # ASCII, UTF8
- my($str) = @_;
- $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
- $str =~ s/\a/\\a/g;
-# $str =~ s/\cH/\\b/g; # \b means something different in a regex; and \cH
- # isn't a backspace in EBCDIC
- $str =~ s/\t/\\t/g;
- $str =~ s/\n/\\n/g;
- $str =~ s/\e/\\e/g;
- $str =~ s/\f/\\f/g;
- $str =~ s/\r/\\r/g;
- $str =~ s/([\cA-\cZ])/'\\c' . $unctrl{$1}/ge;
- $str =~ s/([[:^print:]])/sprintf("\\%03o", ord($1))/age;
- return $str;
-}
-
-# For regexes. Leave whitespace unmangled in case of /x or (?x).
-sub escape_re {
- my($str) = @_;
- $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
- $str =~ s/([[:^print:]])/
- ($1 =~ y! \t\n!!) ? $1 : sprintf("\\%03o", ord($1))/age;
- $str =~ s/\n/\n\f/g;
- return $str;
-}
-
-# Don't do this for regexen
-sub unback {
- my($str) = @_;
- $str =~ s/\\/\\\\/g;
- return $str;
-}
-
-# Remove backslashes which precede literal control characters,
-# to avoid creating ambiguity when we escape the latter.
-sub re_unback {
- my($str) = @_;
-
- # the insane complexity here is due to the behaviour of "\c\"
- $str =~ s/(^|[^\\]|\\c\\)(?'], ['{','}']) {
- ($open, $close) = @$ar;
- $fail = 0; $cnt = 0; $last_bs = 0;
- for $c (@str) {
- if ($c eq $open) {
- $fail = 1 if $last_bs;
- $cnt++;
- } elsif ($c eq $close) {
- $fail = 1 if $last_bs;
- $cnt--;
- if ($cnt < 0) {
- # qq()() isn't ")("
- $fail = 1;
- last;
- }
- }
- $last_bs = $c eq '\\';
- }
- $fail = 1 if $cnt != 0;
- return ($open, "$open$str$close") if not $fail;
- }
- return ("", $str);
-}
-
-sub single_delim {
- my($q, $default, $str, $self) = @_;
- return "$default$str$default" if $default and index($str, $default) == -1;
- my $coreq = $self->keyword($q); # maybe CORE::q
- if ($q ne 'qr') {
- (my $succeed, $str) = balanced_delim($str);
- return "$coreq$str" if $succeed;
- }
- for my $delim ('/', '"', '#') {
- return "$coreq$delim" . $str . $delim if index($str, $delim) == -1;
- }
- if ($default) {
- $str =~ s/$default/\\$default/g;
- return "$default$str$default";
- } else {
- $str =~ s[/][\\/]g;
- return "$coreq/$str/";
- }
-}
-
-my $max_prec;
-BEGIN { $max_prec = int(0.999 + 8*length(pack("F", 42))*log(2)/log(10)); }
-
-# Split a floating point number into an integer mantissa and a binary
-# exponent. Assumes you've already made sure the number isn't zero or
-# some weird infinity or NaN.
-sub split_float {
- my($f) = @_;
- my $exponent = 0;
- if ($f == int($f)) {
- while ($f % 2 == 0) {
- $f /= 2;
- $exponent++;
- }
- } else {
- while ($f != int($f)) {
- $f *= 2;
- $exponent--;
- }
- }
- my $mantissa = sprintf("%.0f", $f);
- return ($mantissa, $exponent);
-}
-
-sub const {
- my $self = shift;
- my($sv, $cx) = @_;
- if ($self->{'use_dumper'}) {
- return $self->const_dumper($sv, $cx);
- }
- if (class($sv) eq "SPECIAL") {
- # sv_undef, sv_yes, sv_no
- return $$sv == 3 ? $self->maybe_parens("!1", $cx, 21)
- : ('undef', '1')[$$sv-1];
- }
- if (class($sv) eq "NULL") {
- return 'undef';
- }
- # convert a version object into the "v1.2.3" string in its V magic
- if ($sv->FLAGS & SVs_RMG) {
- for (my $mg = $sv->MAGIC; $mg; $mg = $mg->MOREMAGIC) {
- return $mg->PTR if $mg->TYPE eq 'V';
- }
- }
-
- if ($sv->FLAGS & SVf_IOK) {
- my $str = $sv->int_value;
- $str = $self->maybe_parens($str, $cx, 21) if $str < 0;
- return $str;
- } elsif ($sv->FLAGS & SVf_NOK) {
- my $nv = $sv->NV;
- if ($nv == 0) {
- if (pack("F", $nv) eq pack("F", 0)) {
- # positive zero
- return "0";
- } else {
- # negative zero
- return $self->maybe_parens("-.0", $cx, 21);
- }
- } elsif (1/$nv == 0) {
- if ($nv > 0) {
- # positive infinity
- return $self->maybe_parens("9**9**9", $cx, 22);
- } else {
- # negative infinity
- return $self->maybe_parens("-9**9**9", $cx, 21);
- }
- } elsif ($nv != $nv) {
- # NaN
- if (pack("F", $nv) eq pack("F", sin(9**9**9))) {
- # the normal kind
- return "sin(9**9**9)";
- } elsif (pack("F", $nv) eq pack("F", -sin(9**9**9))) {
- # the inverted kind
- return $self->maybe_parens("-sin(9**9**9)", $cx, 21);
- } else {
- # some other kind
- my $hex = unpack("h*", pack("F", $nv));
- return qq'unpack("F", pack("h*", "$hex"))';
- }
- }
- # first, try the default stringification
- my $str = "$nv";
- if ($str != $nv) {
- # failing that, try using more precision
- $str = sprintf("%.${max_prec}g", $nv);
-# if (pack("F", $str) ne pack("F", $nv)) {
- if ($str != $nv) {
- # not representable in decimal with whatever sprintf()
- # and atof() Perl is using here.
- my($mant, $exp) = split_float($nv);
- return $self->maybe_parens("$mant * 2**$exp", $cx, 19);
- }
- }
- $str = $self->maybe_parens($str, $cx, 21) if $nv < 0;
- return $str;
- } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) {
- my $ref = $sv->RV;
- my $class = class($ref);
- if ($class eq "AV") {
- return "[" . $self->list_const(2, $ref->ARRAY) . "]";
- } elsif ($class eq "HV") {
- my %hash = $ref->ARRAY;
- my @elts;
- for my $k (sort keys %hash) {
- push @elts, "$k => " . $self->const($hash{$k}, 6);
- }
- return "{" . join(", ", @elts) . "}";
- } elsif ($class eq "CV") {
- BEGIN {
- if ($] > 5.0150051) {
- require overloading;
- unimport overloading;
- }
- }
- if ($] > 5.0150051 && $self->{curcv} &&
- $self->{curcv}->object_2svref == $ref->object_2svref) {
- return $self->keyword("__SUB__");
- }
- return "sub " . $self->deparse_sub($ref);
- }
- if ($class ne 'SPECIAL' and $ref->FLAGS & SVs_SMG) {
- for (my $mg = $ref->MAGIC; $mg; $mg = $mg->MOREMAGIC) {
- if ($mg->TYPE eq 'r') {
- my $re = re_uninterp(escape_re(re_unback($mg->precomp)));
- return single_delim("qr", "", $re, $self);
- }
- }
- }
-
- my $const = $self->const($ref, 20);
- if ($self->{in_subst_repl} && $const =~ /^[0-9]/) {
- $const = "($const)";
- }
- return $self->maybe_parens("\\$const", $cx, 20);
- } elsif ($sv->FLAGS & SVf_POK) {
- my $str = $sv->PV;
- if ($str =~ /[[:^print:]]/a) {
- return single_delim("qq", '"',
- uninterp(escape_str unback $str), $self);
- } else {
- return single_delim("q", "'", unback($str), $self);
- }
- } else {
- return "undef";
- }
-}
-
-sub const_dumper {
- my $self = shift;
- my($sv, $cx) = @_;
- my $ref = $sv->object_2svref();
- my $dumper = Data::Dumper->new([$$ref], ['$v']);
- $dumper->Purity(1)->Terse(1)->Deparse(1)->Indent(0)->Useqq(1)->Sortkeys(1);
- my $str = $dumper->Dump();
- if ($str =~ /^\$v/) {
- return '${my ' . $str . ' \$v}';
- } else {
- return $str;
- }
-}
-
-sub const_sv {
- my $self = shift;
- my $op = shift;
- my $sv = $op->sv;
- # the constant could be in the pad (under useithreads)
- $sv = $self->padval($op->targ) unless $$sv;
- return $sv;
-}
-
-sub meth_sv {
- my $self = shift;
- my $op = shift;
- my $sv = $op->meth_sv;
- # the constant could be in the pad (under useithreads)
- $sv = $self->padval($op->targ) unless $$sv;
- return $sv;
-}
-
-sub meth_rclass_sv {
- my $self = shift;
- my $op = shift;
- my $sv = $op->rclass;
- # the constant could be in the pad (under useithreads)
- $sv = $self->padval($sv) unless ref $sv;
- return $sv;
-}
-
-sub pp_const {
- my $self = shift;
- my($op, $cx) = @_;
- if ($op->private & OPpCONST_ARYBASE) {
- return '$[';
- }
-# if ($op->private & OPpCONST_BARE) { # trouble with '=>' autoquoting
-# return $self->const_sv($op)->PV;
-# }
- my $sv = $self->const_sv($op);
- return $self->const($sv, $cx);
-}
-
-sub dq {
- my $self = shift;
- my $op = shift;
- my $type = $op->name;
- if ($type eq "const") {
- return '$[' if $op->private & OPpCONST_ARYBASE;
- return uninterp(escape_str(unback($self->const_sv($op)->as_string)));
- } elsif ($type eq "concat") {
- my $first = $self->dq($op->first);
- my $last = $self->dq($op->last);
-
- # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]", "$foo\::bar"
- ($last =~ /^[A-Z\\\^\[\]_?]/ &&
- $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
- || ($last =~ /^[:'{\[\w_]/ && #'
- $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
-
- return $first . $last;
- } elsif ($type eq "uc") {
- return '\U' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "lc") {
- return '\L' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "ucfirst") {
- return '\u' . $self->dq($op->first->sibling);
- } elsif ($type eq "lcfirst") {
- return '\l' . $self->dq($op->first->sibling);
- } elsif ($type eq "quotemeta") {
- return '\Q' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "fc") {
- return '\F' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "join") {
- return $self->deparse($op->last, 26); # was join($", @ary)
- } else {
- return $self->deparse($op, 26);
- }
-}
-
-sub pp_backtick {
- my $self = shift;
- my($op, $cx) = @_;
- # skip pushmark if it exists (readpipe() vs ``)
- my $child = $op->first->sibling->isa('B::NULL')
- ? $op->first : $op->first->sibling;
- if ($self->pure_string($child)) {
- return single_delim("qx", '`', $self->dq($child, 1), $self);
- }
- unop($self, @_, "readpipe");
-}
-
-sub dquote {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first->sibling; # skip ex-stringify, pushmark
- return $self->deparse($kid, $cx) if $self->{'unquote'};
- $self->maybe_targmy($kid, $cx,
- sub {single_delim("qq", '"', $self->dq($_[1]),
- $self)});
-}
-
-# OP_STRINGIFY is a listop, but it only ever has one arg
-sub pp_stringify {
- my ($self, $op, $cx) = @_;
- my $kid = $op->first->sibling;
- while ($kid->name eq 'null' && !null($kid->first)) {
- $kid = $kid->first;
- }
- if ($kid->name =~ /^(?:const|padsv|rv2sv|av2arylen|gvsv|multideref
- |aelemfast(?:_lex)?|[ah]elem|join|concat)\z/x) {
- maybe_targmy(@_, \&dquote);
- }
- else {
- # Actually an optimised join.
- my $result = listop(@_,"join");
- $result =~ s/join([( ])/join$1$self->{'ex_const'}, /;
- $result;
- }
-}
-
-# tr/// and s/// (and tr[][], tr[]//, tr###, etc)
-# note that tr(from)/to/ is OK, but not tr/from/(to)
-sub double_delim {
- my($from, $to) = @_;
- my($succeed, $delim);
- if ($from !~ m[/] and $to !~ m[/]) {
- return "/$from/$to/";
- } elsif (($succeed, $from) = balanced_delim($from) and $succeed) {
- if (($succeed, $to) = balanced_delim($to) and $succeed) {
- return "$from$to";
- } else {
- for $delim ('/', '"', '#') { # note no "'" -- s''' is special
- return "$from$delim$to$delim" if index($to, $delim) == -1;
- }
- $to =~ s[/][\\/]g;
- return "$from/$to/";
- }
- } else {
- for $delim ('/', '"', '#') { # note no '
- return "$delim$from$delim$to$delim"
- if index($to . $from, $delim) == -1;
- }
- $from =~ s[/][\\/]g;
- $to =~ s[/][\\/]g;
- return "/$from/$to/";
- }
-}
-
-# Only used by tr///, so backslashes hyphens
-sub pchr { # ASCII
- my($n) = @_;
- if ($n == ord '\\') {
- return '\\\\';
- } elsif ($n == ord "-") {
- return "\\-";
- } elsif (utf8::native_to_unicode($n) >= utf8::native_to_unicode(ord(' '))
- and utf8::native_to_unicode($n) <= utf8::native_to_unicode(ord('~')))
- {
- # I'm presuming a regex is not ok here, otherwise we could have used
- # /[[:print:]]/a to get here
- return chr($n);
- } elsif ($n == ord "\a") {
- return '\\a';
- } elsif ($n == ord "\b") {
- return '\\b';
- } elsif ($n == ord "\t") {
- return '\\t';
- } elsif ($n == ord "\n") {
- return '\\n';
- } elsif ($n == ord "\e") {
- return '\\e';
- } elsif ($n == ord "\f") {
- return '\\f';
- } elsif ($n == ord "\r") {
- return '\\r';
- } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
- return '\\c' . unctrl{chr $n};
- } else {
-# return '\x' . sprintf("%02x", $n);
- return '\\' . sprintf("%03o", $n);
- }
-}
-
-sub collapse {
- my(@chars) = @_;
- my($str, $c, $tr) = ("");
- for ($c = 0; $c < @chars; $c++) {
- $tr = $chars[$c];
- $str .= pchr($tr);
- if ($c <= $#chars - 2 and $chars[$c + 1] == $tr + 1 and
- $chars[$c + 2] == $tr + 2)
- {
- for (; $c <= $#chars-1 and $chars[$c + 1] == $chars[$c] + 1; $c++)
- {}
- $str .= "-";
- $str .= pchr($chars[$c]);
- }
- }
- return $str;
-}
-
-sub tr_decode_byte {
- my($table, $flags) = @_;
- my(@table) = unpack("s*", $table);
- splice @table, 0x100, 1; # Number of subsequent elements
- my($c, $tr, @from, @to, @delfrom, $delhyphen);
- if ($table[ord "-"] != -1 and
- $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1)
- {
- $tr = $table[ord "-"];
- $table[ord "-"] = -1;
- if ($tr >= 0) {
- @from = ord("-");
- @to = $tr;
- } else { # -2 ==> delete
- $delhyphen = 1;
- }
- }
- for ($c = 0; $c < @table; $c++) {
- $tr = $table[$c];
- if ($tr >= 0) {
- push @from, $c; push @to, $tr;
- } elsif ($tr == -2) {
- push @delfrom, $c;
- }
- }
- @from = (@from, @delfrom);
- if ($flags & OPpTRANS_COMPLEMENT) {
- my @newfrom = ();
- my %from;
- @from{@from} = (1) x @from;
- for ($c = 0; $c < 256; $c++) {
- push @newfrom, $c unless $from{$c};
- }
- @from = @newfrom;
- }
- unless ($flags & OPpTRANS_DELETE || !@to) {
- pop @to while $#to and $to[$#to] == $to[$#to -1];
- }
- my($from, $to);
- $from = collapse(@from);
- $to = collapse(@to);
- $from .= "-" if $delhyphen;
- return ($from, $to);
-}
-
-sub tr_chr {
- my $x = shift;
- if ($x == ord "-") {
- return "\\-";
- } elsif ($x == ord "\\") {
- return "\\\\";
- } else {
- return chr $x;
- }
-}
-
-# XXX This doesn't yet handle all cases correctly either
-
-sub tr_decode_utf8 {
- my($swash_hv, $flags) = @_;
- my %swash = $swash_hv->ARRAY;
- my $final = undef;
- $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'};
- my $none = $swash{"NONE"}->IV;
- my $extra = $none + 1;
- my(@from, @delfrom, @to);
- my $line;
- foreach $line (split /\n/, $swash{'LIST'}->PV) {
- my($min, $max, $result) = split(/\t/, $line);
- $min = hex $min;
- if (length $max) {
- $max = hex $max;
- } else {
- $max = $min;
- }
- $result = hex $result;
- if ($result == $extra) {
- push @delfrom, [$min, $max];
- } else {
- push @from, [$min, $max];
- push @to, [$result, $result + $max - $min];
- }
- }
- for my $i (0 .. $#from) {
- if ($from[$i][0] == ord '-') {
- unshift @from, splice(@from, $i, 1);
- unshift @to, splice(@to, $i, 1);
- last;
- } elsif ($from[$i][1] == ord '-') {
- $from[$i][1]--;
- $to[$i][1]--;
- unshift @from, ord '-';
- unshift @to, ord '-';
- last;
- }
- }
- for my $i (0 .. $#delfrom) {
- if ($delfrom[$i][0] == ord '-') {
- push @delfrom, splice(@delfrom, $i, 1);
- last;
- } elsif ($delfrom[$i][1] == ord '-') {
- $delfrom[$i][1]--;
- push @delfrom, ord '-';
- last;
- }
- }
- if (defined $final and $to[$#to][1] != $final) {
- push @to, [$final, $final];
- }
- push @from, @delfrom;
- if ($flags & OPpTRANS_COMPLEMENT) {
- my @newfrom;
- my $next = 0;
- for my $i (0 .. $#from) {
- push @newfrom, [$next, $from[$i][0] - 1];
- $next = $from[$i][1] + 1;
- }
- @from = ();
- for my $range (@newfrom) {
- if ($range->[0] <= $range->[1]) {
- push @from, $range;
- }
- }
- }
- my($from, $to, $diff);
- for my $chunk (@from) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $from .= tr_chr($chunk->[0]);
- }
- }
- for my $chunk (@to) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $to .= tr_chr($chunk->[0]);
- }
- }
- #$final = sprintf("%04x", $final) if defined $final;
- #$none = sprintf("%04x", $none) if defined $none;
- #$extra = sprintf("%04x", $extra) if defined $extra;
- #print STDERR "final: $final\n none: $none\nextra: $extra\n";
- #print STDERR $swash{'LIST'}->PV;
- return (escape_str($from), escape_str($to));
-}
-
-sub pp_trans {
- my $self = shift;
- my($op, $cx, $morflags) = @_;
- my($from, $to);
- my $class = class($op);
- my $priv_flags = $op->private;
- if ($class eq "PVOP") {
- ($from, $to) = tr_decode_byte($op->pv, $priv_flags);
- } elsif ($class eq "PADOP") {
- ($from, $to)
- = tr_decode_utf8($self->padval($op->padix)->RV, $priv_flags);
- } else { # class($op) eq "SVOP"
- ($from, $to) = tr_decode_utf8($op->sv->RV, $priv_flags);
- }
- my $flags = "";
- $flags .= "c" if $priv_flags & OPpTRANS_COMPLEMENT;
- $flags .= "d" if $priv_flags & OPpTRANS_DELETE;
- $to = "" if $from eq $to and $flags eq "";
- $flags .= "s" if $priv_flags & OPpTRANS_SQUASH;
- $flags .= $morflags if defined $morflags;
- my $ret = $self->keyword("tr") . double_delim($from, $to) . $flags;
- if (my $targ = $op->targ) {
- return $self->maybe_parens($self->padname($targ) . " =~ $ret",
- $cx, 20);
- }
- return $ret;
-}
-
-sub pp_transr { push @_, 'r'; goto &pp_trans }
-
-sub re_dq_disambiguate {
- my ($first, $last) = @_;
- # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
- ($last =~ /^[A-Z\\\^\[\]_?]/ &&
- $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
- || ($last =~ /^[{\[\w_]/ &&
- $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
- return $first . $last;
-}
-
-# Like dq(), but different
-sub re_dq {
- my $self = shift;
- my ($op) = @_;
-
- my $type = $op->name;
- if ($type eq "const") {
- return '$[' if $op->private & OPpCONST_ARYBASE;
- my $unbacked = re_unback($self->const_sv($op)->as_string);
- return re_uninterp(escape_re($unbacked));
- } elsif ($type eq "concat") {
- my $first = $self->re_dq($op->first);
- my $last = $self->re_dq($op->last);
- return re_dq_disambiguate($first, $last);
- } elsif ($type eq "uc") {
- return '\U' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "lc") {
- return '\L' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "ucfirst") {
- return '\u' . $self->re_dq($op->first->sibling);
- } elsif ($type eq "lcfirst") {
- return '\l' . $self->re_dq($op->first->sibling);
- } elsif ($type eq "quotemeta") {
- return '\Q' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "fc") {
- return '\F' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "join") {
- return $self->deparse($op->last, 26); # was join($", @ary)
- } else {
- my $ret = $self->deparse($op, 26);
- $ret =~ s/^\$([(|)])\z/\${$1}/ # $( $| $) need braces
- or $ret =~ s/^\@([-+])\z/\@{$1}/; # @- @+ need braces
- return $ret;
- }
-}
-
-sub pure_string {
- my ($self, $op) = @_;
- return 0 if null $op;
- my $type = $op->name;
-
- if ($type eq 'const' || $type eq 'av2arylen') {
- return 1;
- }
- elsif ($type =~ /^(?:[ul]c(first)?|fc)$/ || $type eq 'quotemeta') {
- return $self->pure_string($op->first->sibling);
- }
- elsif ($type eq 'join') {
- my $join_op = $op->first->sibling; # Skip pushmark
- return 0 unless $join_op->name eq 'null' && $join_op->targ == OP_RV2SV;
-
- my $gvop = $join_op->first;
- return 0 unless $gvop->name eq 'gvsv';
- return 0 unless '"' eq $self->gv_name($self->gv_or_padgv($gvop));
-
- return 0 unless ${$join_op->sibling} eq ${$op->last};
- return 0 unless $op->last->name =~ /^(?:[ah]slice|(?:rv2|pad)av)$/;
- }
- elsif ($type eq 'concat') {
- return $self->pure_string($op->first)
- && $self->pure_string($op->last);
- }
- elsif (is_scalar($op) || $type =~ /^[ah]elem$/) {
- return 1;
- }
- elsif ($type eq "null" and $op->can('first') and not null $op->first) {
- my $first = $op->first;
-
- return 1 if $first->name eq "multideref";
- return 1 if $first->name eq "aelemfast_lex";
-
- if ( $first->name eq "null"
- and $first->can('first')
- and not null $first->first
- and $first->first->name eq "aelemfast"
- )
- {
- return 1;
- }
- }
-
- return 0;
-}
-
-sub code_list {
- my ($self,$op,$cv) = @_;
-
- # localise stuff relating to the current sub
- $cv and
- local($self->{'curcv'}) = $cv,
- local($self->{'curcvlex'}),
- local(@$self{qw'curstash warnings hints hinthash curcop'})
- = @$self{qw'curstash warnings hints hinthash curcop'};
-
- my $re;
- for ($op = $op->first->sibling; !null($op); $op = $op->sibling) {
- if ($op->name eq 'null' and $op->flags & OPf_SPECIAL) {
- my $scope = $op->first;
- # 0 context (last arg to scopeop) means statement context, so
- # the contents of the block will not be wrapped in do{...}.
- my $block = scopeop($scope->first->name eq "enter", $self,
- $scope, 0);
- # next op is the source code of the block
- $op = $op->sibling;
- $re .= ($self->const_sv($op)->PV =~ m|^(\(\?\??\{)|)[0];
- my $multiline = $block =~ /\n/;
- $re .= $multiline ? "\n\t" : ' ';
- $re .= $block;
- $re .= $multiline ? "\n\b})" : " })";
- } else {
- $re = re_dq_disambiguate($re, $self->re_dq($op));
- }
- }
- $re;
-}
-
-sub regcomp {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- $kid = $kid->first if $kid->name eq "regcmaybe";
- $kid = $kid->first if $kid->name eq "regcreset";
- my $kname = $kid->name;
- if ($kname eq "null" and !null($kid->first)
- and $kid->first->name eq 'pushmark')
- {
- my $str = '';
- $kid = $kid->first->sibling;
- while (!null($kid)) {
- my $first = $str;
- my $last = $self->re_dq($kid);
- $str = re_dq_disambiguate($first, $last);
- $kid = $kid->sibling;
- }
- return $str, 1;
- }
-
- return ($self->re_dq($kid), 1)
- if $kname =~ /^(?:rv2|pad)av/ or $self->pure_string($kid);
- return ($self->deparse($kid, $cx), 0);
-}
-
-sub pp_regcomp {
- my ($self, $op, $cx) = @_;
- return (($self->regcomp($op, $cx, 0))[0]);
-}
-
-sub re_flags {
- my ($self, $op) = @_;
- my $flags = '';
- my $pmflags = $op->pmflags;
- if (!$pmflags) {
- my $re = $op->pmregexp;
- if ($$re) {
- $pmflags = $re->compflags;
- }
- }
- $flags .= "g" if $pmflags & PMf_GLOBAL;
- $flags .= "i" if $pmflags & PMf_FOLD;
- $flags .= "m" if $pmflags & PMf_MULTILINE;
- $flags .= "o" if $pmflags & PMf_KEEP;
- $flags .= "s" if $pmflags & PMf_SINGLELINE;
- $flags .= "x" if $pmflags & PMf_EXTENDED;
- $flags .= "x" if $pmflags & PMf_EXTENDED_MORE;
- $flags .= "p" if $pmflags & PMf_KEEPCOPY;
- $flags .= "n" if $pmflags & PMf_NOCAPTURE;
- if (my $charset = $pmflags & PMf_CHARSET) {
- # Hardcoding this is fragile, but B does not yet export the
- # constants we need.
- $flags .= qw(d l u a aa)[$charset >> 7]
- }
- # The /d flag is indicated by 0; only show it if necessary.
- elsif ($self->{hinthash} and
- $self->{hinthash}{reflags_charset}
- || $self->{hinthash}{feature_unicode}
- or $self->{hints} & $feature::hint_mask
- && ($self->{hints} & $feature::hint_mask)
- != $feature::hint_mask
- && $self->{hints} & $feature::hint_uni8bit
- ) {
- $flags .= 'd';
- }
- $flags;
-}
-
-# osmic acid -- see osmium tetroxide
-
-my %matchwords;
-map($matchwords{join "", sort split //, $_} = $_, 'cig', 'cog', 'cos', 'cogs',
- 'cox', 'go', 'is', 'ism', 'iso', 'mig', 'mix', 'osmic', 'ox', 'sic',
- 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi', 'soup', 'soupmix');
-
-# When deparsing a regular expression with code blocks, we have to look in
-# various places to find the blocks.
-#
-# For qr/(?{...})/ without interpolation, the CV is under $qr->qr_anoncv
-# and the code list (list of blocks and constants, maybe vars) is under
-# $cv->ROOT->first->code_list:
-# ./perl -Ilib -MB -e 'use O "Concise", B::svref_2object(sub {qr/(?{die})/})->ROOT->first->first->sibling->pmregexp->qr_anoncv->object_2svref'
-#
-# For qr/$a(?{...})/ with interpolation, the code list is more accessible,
-# under $pmop->code_list, but the $cv is something you have to dig for in
-# the regcomp op’s kids:
-# ./perl -Ilib -mO=Concise -e 'qr/$a(?{die})/'
-#
-# For m// and split //, things are much simpler. There is no CV. The code
-# list is under $pmop->code_list.
-
-sub matchop {
- my $self = shift;
- my($op, $cx, $name, $delim) = @_;
- my $kid = $op->first;
- my ($binop, $var, $re) = ("", "", "");
- if ($op->flags & OPf_STACKED) {
- $binop = 1;
- $var = $self->deparse($kid, 20);
- $kid = $kid->sibling;
- }
- # not $name; $name will be 'm' for both match and split
- elsif ($op->name eq 'match' and my $targ = $op->targ) {
- $binop = 1;
- $var = $self->padname($targ);
- }
- my $quote = 1;
- my $pmflags = $op->pmflags;
- my $rhs_bound_to_defsv;
- my ($cv, $bregexp);
- my $have_kid = !null $kid;
- # Check for code blocks first
- if (not null my $code_list = $op->code_list) {
- $re = $self->code_list($code_list,
- $op->name eq 'qr'
- ? $self->padval(
- $kid->first # ex-list
- ->first # pushmark
- ->sibling # entersub
- ->first # ex-list
- ->first # pushmark
- ->sibling # srefgen
- ->first # ex-list
- ->first # anoncode
- ->targ
- )
- : undef);
- } elsif (${$bregexp = $op->pmregexp} && ${$cv = $bregexp->qr_anoncv}) {
- my $patop = $cv->ROOT # leavesub
- ->first # qr
- ->code_list;# list
- $re = $self->code_list($patop, $cv);
- } elsif (!$have_kid) {
- $re = re_uninterp(escape_re(re_unback($op->precomp)));
- } elsif ($kid->name ne 'regcomp') {
- carp("found ".$kid->name." where regcomp expected");
- } else {
- ($re, $quote) = $self->regcomp($kid, 21);
- }
- if ($have_kid and $kid->name eq 'regcomp') {
- my $matchop = $kid->first;
- if ($matchop->name eq 'regcreset') {
- $matchop = $matchop->first;
- }
- if ($matchop->name =~ /^(?:match|transr?|subst)\z/
- && $matchop->flags & OPf_SPECIAL) {
- $rhs_bound_to_defsv = 1;
- }
- }
- my $flags = "";
- $flags .= "c" if $pmflags & PMf_CONTINUE;
- $flags .= $self->re_flags($op);
- $flags = join '', sort split //, $flags;
- $flags = $matchwords{$flags} if $matchwords{$flags};
- if ($pmflags & PMf_ONCE) { # only one kind of delimiter works here
- $re =~ s/\?/\\?/g;
- $re = $self->keyword("m") . "?$re?"; # explicit 'm' is required
- } elsif ($quote) {
- $re = single_delim($name, $delim, $re, $self);
- }
- $re = $re . $flags if $quote;
- if ($binop) {
- return
- $self->maybe_parens(
- $rhs_bound_to_defsv
- ? "$var =~ (\$_ =~ $re)"
- : "$var =~ $re",
- $cx, 20
- );
- } else {
- return $re;
- }
-}
-
-sub pp_match { matchop(@_, "m", "/") }
-sub pp_pushre { matchop(@_, "m", "/") }
-sub pp_qr { matchop(@_, "qr", "") }
-
-sub pp_runcv { unop(@_, "__SUB__"); }
-
-sub pp_split {
- maybe_targmy(@_, \&split);
-}
-sub split {
- my $self = shift;
- my($op, $cx) = @_;
- my($kid, @exprs, $ary, $expr);
- $kid = $op->first;
-
- # For our kid (an OP_PUSHRE), pmreplroot is never actually the
- # root of a replacement; it's either empty, or abused to point to
- # the GV for an array we split into (an optimization to save
- # assignment overhead). Depending on whether we're using ithreads,
- # this OP* holds either a GV* or a PADOFFSET. Luckily, B.xs
- # figures out for us which it is.
- my $replroot = $kid->pmreplroot;
- my $gv = 0;
- my $stacked = $op->flags & OPf_STACKED;
- if (ref($replroot) eq "B::GV") {
- $gv = $replroot;
- } elsif (!ref($replroot) and $replroot > 0) {
- $gv = $self->padval($replroot);
- } elsif ($kid->targ) {
- $ary = $self->padname($kid->targ)
- } elsif ($stacked) {
- $ary = $self->deparse($op->last, 7);
- }
- $ary = $self->maybe_local(@_,
- $self->stash_variable('@',
- $self->gv_name($gv),
- $cx))
- if $gv;
-
- # Skip the last kid when OPf_STACKED is set, since it is the array
- # on the left.
- for (; !null($stacked ? $kid->sibling : $kid); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
-
- # handle special case of split(), and split(' ') that compiles to /\s+/
- # Under 5.10, the reflags may be undef if the split regexp isn't a constant
- # Under 5.17.5-5.17.9, the special flag is on split itself.
- $kid = $op->first;
- if ( $op->flags & OPf_SPECIAL
- or (
- $kid->flags & OPf_SPECIAL
- and ( $] < 5.009 ? $kid->pmflags & PMf_SKIPWHITE()
- : ($kid->reflags || 0) & RXf_SKIPWHITE()
- )
- )
- ) {
- $exprs[0] = "' '";
- }
-
- $expr = "split(" . join(", ", @exprs) . ")";
- if ($ary) {
- return $self->maybe_parens("$ary = $expr", $cx, 7);
- } else {
- return $expr;
- }
-}
-
-# oxime -- any of various compounds obtained chiefly by the action of
-# hydroxylamine on aldehydes and ketones and characterized by the
-# bivalent grouping C=NOH [Webster's Tenth]
-
-my %substwords;
-map($substwords{join "", sort split //, $_} = $_, 'ego', 'egoism', 'em',
- 'es', 'ex', 'exes', 'gee', 'go', 'goes', 'ie', 'ism', 'iso', 'me',
- 'meese', 'meso', 'mig', 'mix', 'os', 'ox', 'oxime', 'see', 'seem',
- 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi', 'rogue',
- 'sir', 'rise', 'smore', 'more', 'seer', 'rome', 'gore', 'grim', 'grime',
- 'or', 'rose', 'rosie');
-
-sub pp_subst {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- my($binop, $var, $re, $repl) = ("", "", "", "");
- if ($op->flags & OPf_STACKED) {
- $binop = 1;
- $var = $self->deparse($kid, 20);
- $kid = $kid->sibling;
- }
- elsif (my $targ = $op->targ) {
- $binop = 1;
- $var = $self->padname($targ);
- }
- my $flags = "";
- my $pmflags = $op->pmflags;
- if (null($op->pmreplroot)) {
- $repl = $kid;
- $kid = $kid->sibling;
- } else {
- $repl = $op->pmreplroot->first; # skip substcont
- }
- while ($repl->name eq "entereval") {
- $repl = $repl->first;
- $flags .= "e";
- }
- {
- local $self->{in_subst_repl} = 1;
- if ($pmflags & PMf_EVAL) {
- $repl = $self->deparse($repl->first, 0);
- } else {
- $repl = $self->dq($repl);
- }
- }
- if (not null my $code_list = $op->code_list) {
- $re = $self->code_list($code_list);
- } elsif (null $kid) {
- $re = re_uninterp(escape_re(re_unback($op->precomp)));
- } else {
- ($re) = $self->regcomp($kid, 1);
- }
- $flags .= "r" if $pmflags & PMf_NONDESTRUCT;
- $flags .= "e" if $pmflags & PMf_EVAL;
- $flags .= $self->re_flags($op);
- $flags = join '', sort split //, $flags;
- $flags = $substwords{$flags} if $substwords{$flags};
- my $core_s = $self->keyword("s"); # maybe CORE::s
- if ($binop) {
- return $self->maybe_parens("$var =~ $core_s"
- . double_delim($re, $repl) . $flags,
- $cx, 20);
- } else {
- return "$core_s". double_delim($re, $repl) . $flags;
- }
-}
-
-sub is_lexical_subs {
- my (@ops) = shift;
- for my $op (@ops) {
- return 0 if $op->name !~ /\A(?:introcv|clonecv)\z/;
- }
- return 1;
-}
-
-# Pretend these two ops do not exist. The perl parser adds them to the
-# beginning of any block containing my-sub declarations, whereas we handle
-# the subs in pad_subs and next_todo.
-*pp_clonecv = *pp_introcv;
-sub pp_introcv {
- my $self = shift;
- my($op, $cx) = @_;
- # For now, deparsing doesn't worry about the distinction between introcv
- # and clonecv, so pretend this op doesn't exist:
- return '';
-}
-
-sub pp_padcv {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->padany($op);
-}
-
-my %lvref_funnies = (
- OPpLVREF_SV, => '$',
- OPpLVREF_AV, => '@',
- OPpLVREF_HV, => '%',
- OPpLVREF_CV, => '&',
-);
-
-sub pp_refassign {
- my ($self, $op, $cx) = @_;
- my $left;
- if ($op->private & OPpLVREF_ELEM) {
- $left = $op->first->sibling;
- $left = maybe_local(@_, elem($self, $left, undef,
- $left->targ == OP_AELEM
- ? qw([ ] padav)
- : qw({ } padhv)));
- } elsif ($op->flags & OPf_STACKED) {
- $left = maybe_local(@_,
- $lvref_funnies{$op->private & OPpLVREF_TYPE}
- . $self->deparse($op->first->sibling));
- } else {
- $left = &pp_padsv;
- }
- my $right = $self->deparse_binop_right($op, $op->first, 7);
- return $self->maybe_parens("\\$left = $right", $cx, 7);
-}
-
-sub pp_lvref {
- my ($self, $op, $cx) = @_;
- my $code;
- if ($op->private & OPpLVREF_ELEM) {
- $code = $op->first->name =~ /av\z/ ? &pp_aelem : &pp_helem;
- } elsif ($op->flags & OPf_STACKED) {
- $code = maybe_local(@_,
- $lvref_funnies{$op->private & OPpLVREF_TYPE}
- . $self->deparse($op->first));
- } else {
- $code = &pp_padsv;
- }
- "\\$code";
-}
-
-sub pp_lvrefslice {
- my ($self, $op, $cx) = @_;
- '\\' . ($op->last->name =~ /av\z/ ? &pp_aslice : &pp_hslice);
-}
-
-sub pp_lvavref {
- my ($self, $op, $cx) = @_;
- '\\(' . ($op->flags & OPf_STACKED
- ? maybe_local(@_, rv2x(@_, "\@"))
- : &pp_padsv) . ')'
-}
-
-1;
-__END__
-
-#line 6287
diff --git a/software/Slic3r-1.3.0.64bit/lib/CPAN/Config.pm b/software/Slic3r-1.3.0.64bit/lib/CPAN/Config.pm
deleted file mode 100644
index 52e60943..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/CPAN/Config.pm
+++ /dev/null
@@ -1,100 +0,0 @@
-#line 1 "CPAN/Config.pm"
-
-# This is CPAN.pms systemwide configuration file. This file provides
-# defaults for users, and the values can be changed in a per-user
-# configuration file. The user-config file is being looked for as
-# /.cpan/CPAN/MyConfig.pm.
-
-my @urllist = (
- 'http://cpan.strawberryperl.com/',
- 'http://www.cpan.org/',
-);
-
-if ( -d 'C:\\STRAWB~1\\minicpan' ) {
- # If we are on fake Hotel/Airport wireless,
- # prefer the minicpan to the poisoned wireless.
- eval { require LWP::Online; };
- unless ( $@ ) {
- if ( LWP::Online::online() ) {
- push @urllist, q[file:///C:/STRAWB~1/minicpan/];
- } else {
- unshift @urllist, q[file:///C:/STRAWB~1/minicpan/];
- }
- }
-}
-
-$CPAN::Config = {
- applypatch => q[],
- auto_commit => q[1],
- build_cache => q[50],
- build_dir => q[C:\\STRAWB~1\\cpan\\build],
- build_dir_reuse => q[0],
- build_requires_install_policy => q[yes],
- bzip2 => q[ ], #will use perl module if it is ' '
- cache_metadata => q[1],
- check_sigs => q[0],
- colorize_print => q[bold green],
- colorize_warn => q[bold red],
- colorize_output => q[0],
- commandnumber_in_prompt => q[0],
- connect_to_internet_ok => q[1],
- cpan_home => q[C:\\STRAWB~1\\cpan],
- curl => q[],
- ftp => q[C:\\Windows\\system32\\ftp.exe],
- ftp_passive => q[1],
- ftp_proxy => q[],
- getcwd => q[cwd],
- gpg => q[],
- gzip => q[ ], #will use perl module if it is ' '
- halt_on_failure => q[1],
- histfile => q[C:\\STRAWB~1\\cpan\\histfile],
- histsize => q[1000],
- http_proxy => q[],
- inactivity_timeout => q[0],
- index_expire => q[1],
- inhibit_startup_message => q[0],
- keep_source_where => q[C:\\STRAWB~1\\cpan\\sources],
- load_module_verbosity => q[none],
- lynx => q[],
- make => q[C:\\STRAWB~1\\c\\bin\\dmake.exe],
- make_arg => q[],
- make_install_arg => q[UNINST=1],
- make_install_make_command => q[C:\\STRAWB~1\\c\\bin\\dmake.exe],
- makepl_arg => q[],
- mbuild_arg => q[],
- mbuild_install_arg => q[--uninst 1],
- mbuildpl_arg => q[],
- ncftp => q[],
- ncftpget => q[],
- no_proxy => q[],
- pager => q[C:\\Windows\\system32\\more.COM],
- patch => q[C:\\STRAWB~1\\c\\bin\\patch.exe],
- perl5lib_verbosity => q[none],
- prefer_external_tar => q[0],
- prefer_installer => q[MB],
- prefs_dir => q[C:\\STRAWB~1\\cpan\\prefs],
- prerequisites_policy => q[follow],
- recommends_policy => q[1],
- scan_cache => q[atstart],
- shell => q[C:\\Windows\\system32\\cmd.exe],
- show_unparsable_versions => q[0],
- show_upload_date => q[1],
- show_zero_versions => q[0],
- suggests_policy => q[0],
- tar => q[ ], #will use perl module if it is ' '
- tar_verbosity => q[none],
- term_is_latin => q[1],
- term_ornaments => q[1],
- test_report => q[0],
- trust_test_report_history => q[0],
- unzip => q[],
- urllist => \@urllist,
- use_prompt_default => q[0],
- use_sqlite => q[1],
- version_timeout => q[15],
- wget => q[],
- yaml_load_code => q[0],
- yaml_module => q[YAML::XS],
-};
-1;
-__END__
diff --git a/software/Slic3r-1.3.0.64bit/lib/Carp.pm b/software/Slic3r-1.3.0.64bit/lib/Carp.pm
deleted file mode 100644
index 4182a5b2..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Carp.pm
+++ /dev/null
@@ -1,621 +0,0 @@
-#line 1 "Carp.pm"
-package Carp;
-
-{ use 5.006; }
-use strict;
-use warnings;
-BEGIN {
- # Very old versions of warnings.pm load Carp. This can go wrong due
- # to the circular dependency. If warnings is invoked before Carp,
- # then warnings starts by loading Carp, then Carp (above) tries to
- # invoke warnings, and gets nothing because warnings is in the process
- # of loading and hasn't defined its import method yet. If we were
- # only turning on warnings ("use warnings" above) this wouldn't be too
- # bad, because Carp would just gets the state of the -w switch and so
- # might not get some warnings that it wanted. The real problem is
- # that we then want to turn off Unicode warnings, but "no warnings
- # 'utf8'" won't be effective if we're in this circular-dependency
- # situation. So, if warnings.pm is an affected version, we turn
- # off all warnings ourselves by directly setting ${^WARNING_BITS}.
- # On unaffected versions, we turn off just Unicode warnings, via
- # the proper API.
- if(!defined($warnings::VERSION) || eval($warnings::VERSION) < 1.06) {
- ${^WARNING_BITS} = "";
- } else {
- "warnings"->unimport("utf8");
- }
-}
-
-sub _fetch_sub { # fetch sub without autovivifying
- my($pack, $sub) = @_;
- $pack .= '::';
- # only works with top-level packages
- return unless exists($::{$pack});
- for ($::{$pack}) {
- return unless ref \$_ eq 'GLOB' && *$_{HASH} && exists $$_{$sub};
- for ($$_{$sub}) {
- return ref \$_ eq 'GLOB' ? *$_{CODE} : undef
- }
- }
-}
-
-# UTF8_REGEXP_PROBLEM is a compile-time constant indicating whether Carp
-# must avoid applying a regular expression to an upgraded (is_utf8)
-# string. There are multiple problems, on different Perl versions,
-# that require this to be avoided. All versions prior to 5.13.8 will
-# load utf8_heavy.pl for the swash system, even if the regexp doesn't
-# use character classes. Perl 5.6 and Perls [5.11.2, 5.13.11) exhibit
-# specific problems when Carp is being invoked in the aftermath of a
-# syntax error.
-BEGIN {
- if("$]" < 5.013011) {
- *UTF8_REGEXP_PROBLEM = sub () { 1 };
- } else {
- *UTF8_REGEXP_PROBLEM = sub () { 0 };
- }
-}
-
-# is_utf8() is essentially the utf8::is_utf8() function, which indicates
-# whether a string is represented in the upgraded form (using UTF-8
-# internally). As utf8::is_utf8() is only available from Perl 5.8
-# onwards, extra effort is required here to make it work on Perl 5.6.
-BEGIN {
- if(defined(my $sub = _fetch_sub utf8 => 'is_utf8')) {
- *is_utf8 = $sub;
- } else {
- # black magic for perl 5.6
- *is_utf8 = sub { unpack("C", "\xaa".$_[0]) != 170 };
- }
-}
-
-# The downgrade() function defined here is to be used for attempts to
-# downgrade where it is acceptable to fail. It must be called with a
-# second argument that is a true value.
-BEGIN {
- if(defined(my $sub = _fetch_sub utf8 => 'downgrade')) {
- *downgrade = \&{"utf8::downgrade"};
- } else {
- *downgrade = sub {
- my $r = "";
- my $l = length($_[0]);
- for(my $i = 0; $i != $l; $i++) {
- my $o = ord(substr($_[0], $i, 1));
- return if $o > 255;
- $r .= chr($o);
- }
- $_[0] = $r;
- };
- }
-}
-
-our $VERSION = '1.40';
-$VERSION =~ tr/_//d;
-
-our $MaxEvalLen = 0;
-our $Verbose = 0;
-our $CarpLevel = 0;
-our $MaxArgLen = 64; # How much of each argument to print. 0 = all.
-our $MaxArgNums = 8; # How many arguments to print. 0 = all.
-our $RefArgFormatter = undef; # allow caller to format reference arguments
-
-require Exporter;
-our @ISA = ('Exporter');
-our @EXPORT = qw(confess croak carp);
-our @EXPORT_OK = qw(cluck verbose longmess shortmess);
-our @EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
-
-# The members of %Internal are packages that are internal to perl.
-# Carp will not report errors from within these packages if it
-# can. The members of %CarpInternal are internal to Perl's warning
-# system. Carp will not report errors from within these packages
-# either, and will not report calls *to* these packages for carp and
-# croak. They replace $CarpLevel, which is deprecated. The
-# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
-# text and function arguments should be formatted when printed.
-
-our %CarpInternal;
-our %Internal;
-
-# disable these by default, so they can live w/o require Carp
-$CarpInternal{Carp}++;
-$CarpInternal{warnings}++;
-$Internal{Exporter}++;
-$Internal{'Exporter::Heavy'}++;
-
-# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
-# then the following method will be called by the Exporter which knows
-# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
-# 'verbose'.
-
-sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ }
-
-sub _cgc {
- no strict 'refs';
- return \&{"CORE::GLOBAL::caller"} if defined &{"CORE::GLOBAL::caller"};
- return;
-}
-
-sub longmess {
- local($!, $^E);
- # Icky backwards compatibility wrapper. :-(
- #
- # The story is that the original implementation hard-coded the
- # number of call levels to go back, so calls to longmess were off
- # by one. Other code began calling longmess and expecting this
- # behaviour, so the replacement has to emulate that behaviour.
- my $cgc = _cgc();
- my $call_pack = $cgc ? $cgc->() : caller();
- if ( $Internal{$call_pack} or $CarpInternal{$call_pack} ) {
- return longmess_heavy(@_);
- }
- else {
- local $CarpLevel = $CarpLevel + 1;
- return longmess_heavy(@_);
- }
-}
-
-our @CARP_NOT;
-
-sub shortmess {
- local($!, $^E);
- my $cgc = _cgc();
-
- # Icky backwards compatibility wrapper. :-(
- local @CARP_NOT = $cgc ? $cgc->() : caller();
- shortmess_heavy(@_);
-}
-
-sub croak { die shortmess @_ }
-sub confess { die longmess @_ }
-sub carp { warn shortmess @_ }
-sub cluck { warn longmess @_ }
-
-BEGIN {
- if("$]" >= 5.015002 || ("$]" >= 5.014002 && "$]" < 5.015) ||
- ("$]" >= 5.012005 && "$]" < 5.013)) {
- *CALLER_OVERRIDE_CHECK_OK = sub () { 1 };
- } else {
- *CALLER_OVERRIDE_CHECK_OK = sub () { 0 };
- }
-}
-
-sub caller_info {
- my $i = shift(@_) + 1;
- my %call_info;
- my $cgc = _cgc();
- {
- # Some things override caller() but forget to implement the
- # @DB::args part of it, which we need. We check for this by
- # pre-populating @DB::args with a sentinel which no-one else
- # has the address of, so that we can detect whether @DB::args
- # has been properly populated. However, on earlier versions
- # of perl this check tickles a bug in CORE::caller() which
- # leaks memory. So we only check on fixed perls.
- @DB::args = \$i if CALLER_OVERRIDE_CHECK_OK;
- package DB;
- @call_info{
- qw(pack file line sub has_args wantarray evaltext is_require) }
- = $cgc ? $cgc->($i) : caller($i);
- }
-
- unless ( defined $call_info{file} ) {
- return ();
- }
-
- my $sub_name = Carp::get_subname( \%call_info );
- if ( $call_info{has_args} ) {
- my @args;
- if (CALLER_OVERRIDE_CHECK_OK && @DB::args == 1
- && ref $DB::args[0] eq ref \$i
- && $DB::args[0] == \$i ) {
- @DB::args = (); # Don't let anyone see the address of $i
- local $@;
- my $where = eval {
- my $func = $cgc or return '';
- my $gv =
- (_fetch_sub B => 'svref_2object' or return '')
- ->($func)->GV;
- my $package = $gv->STASH->NAME;
- my $subname = $gv->NAME;
- return unless defined $package && defined $subname;
-
- # returning CORE::GLOBAL::caller isn't useful for tracing the cause:
- return if $package eq 'CORE::GLOBAL' && $subname eq 'caller';
- " in &${package}::$subname";
- } || '';
- @args
- = "** Incomplete caller override detected$where; \@DB::args were not set **";
- }
- else {
- @args = @DB::args;
- my $overflow;
- if ( $MaxArgNums and @args > $MaxArgNums )
- { # More than we want to show?
- $#args = $MaxArgNums - 1;
- $overflow = 1;
- }
-
- @args = map { Carp::format_arg($_) } @args;
-
- if ($overflow) {
- push @args, '...';
- }
- }
-
- # Push the args onto the subroutine
- $sub_name .= '(' . join( ', ', @args ) . ')';
- }
- $call_info{sub_name} = $sub_name;
- return wantarray() ? %call_info : \%call_info;
-}
-
-# Transform an argument to a function into a string.
-our $in_recurse;
-sub format_arg {
- my $arg = shift;
-
- if ( ref($arg) ) {
- # legitimate, let's not leak it.
- if (!$in_recurse &&
- do {
- local $@;
- local $in_recurse = 1;
- local $SIG{__DIE__} = sub{};
- eval {$arg->can('CARP_TRACE') }
- })
- {
- return $arg->CARP_TRACE();
- }
- elsif (!$in_recurse &&
- defined($RefArgFormatter) &&
- do {
- local $@;
- local $in_recurse = 1;
- local $SIG{__DIE__} = sub{};
- eval {$arg = $RefArgFormatter->($arg); 1}
- })
- {
- return $arg;
- }
- else
- {
- my $sub = _fetch_sub(overload => 'StrVal');
- return $sub ? &$sub($arg) : "$arg";
- }
- }
- return "undef" if !defined($arg);
- downgrade($arg, 1);
- return $arg if !(UTF8_REGEXP_PROBLEM && is_utf8($arg)) &&
- $arg =~ /\A-?[0-9]+(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?\z/;
- my $suffix = "";
- if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
- substr ( $arg, $MaxArgLen - 3 ) = "";
- $suffix = "...";
- }
- if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
- for(my $i = length($arg); $i--; ) {
- my $c = substr($arg, $i, 1);
- my $x = substr($arg, 0, 0); # work around bug on Perl 5.8.{1,2}
- if($c eq "\"" || $c eq "\\" || $c eq "\$" || $c eq "\@") {
- substr $arg, $i, 0, "\\";
- next;
- }
- my $o = ord($c);
-
- # This code is repeated in Regexp::CARP_TRACE()
- if ($] ge 5.007_003) {
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if utf8::native_to_unicode($o) < utf8::native_to_unicode(0x20)
- || utf8::native_to_unicode($o) > utf8::native_to_unicode(0x7e);
- } elsif (ord("A") == 65) {
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if $o < 0x20 || $o > 0x7e;
- } else { # Early EBCDIC
-
- # 3 EBCDIC code pages supported then; all controls but one
- # are the code points below SPACE. The other one is 0x5F on
- # POSIX-BC; FF on the other two.
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if $o < ord(" ") || ((ord ("^") == 106)
- ? $o == 0x5f
- : $o == 0xff);
- }
- }
- } else {
- $arg =~ s/([\"\\\$\@])/\\$1/g;
- # This is all the ASCII printables spelled-out. It is portable to all
- # Perl versions and platforms (such as EBCDIC). There are other more
- # compact ways to do this, but may not work everywhere every version.
- $arg =~ s/([^ !"\$\%#'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
- }
- downgrade($arg, 1);
- return "\"".$arg."\"".$suffix;
-}
-
-sub Regexp::CARP_TRACE {
- my $arg = "$_[0]";
- downgrade($arg, 1);
- if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
- for(my $i = length($arg); $i--; ) {
- my $o = ord(substr($arg, $i, 1));
- my $x = substr($arg, 0, 0); # work around bug on Perl 5.8.{1,2}
-
- # This code is repeated in format_arg()
- if ($] ge 5.007_003) {
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if utf8::native_to_unicode($o) < utf8::native_to_unicode(0x20)
- || utf8::native_to_unicode($o) > utf8::native_to_unicode(0x7e);
- } elsif (ord("A") == 65) {
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if $o < 0x20 || $o > 0x7e;
- } else { # Early EBCDIC
- substr $arg, $i, 1, sprintf("\\x{%x}", $o)
- if $o < ord(" ") || ((ord ("^") == 106)
- ? $o == 0x5f
- : $o == 0xff);
- }
- }
- } else {
- # See comment in format_arg() about this same regex.
- $arg =~ s/([^ !"\$\%#'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
- }
- downgrade($arg, 1);
- my $suffix = "";
- if($arg =~ /\A\(\?\^?([a-z]*)(?:-[a-z]*)?:(.*)\)\z/s) {
- ($suffix, $arg) = ($1, $2);
- }
- if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
- substr ( $arg, $MaxArgLen - 3 ) = "";
- $suffix = "...".$suffix;
- }
- return "qr($arg)$suffix";
-}
-
-# Takes an inheritance cache and a package and returns
-# an anon hash of known inheritances and anon array of
-# inheritances which consequences have not been figured
-# for.
-sub get_status {
- my $cache = shift;
- my $pkg = shift;
- $cache->{$pkg} ||= [ { $pkg => $pkg }, [ trusts_directly($pkg) ] ];
- return @{ $cache->{$pkg} };
-}
-
-# Takes the info from caller() and figures out the name of
-# the sub/require/eval
-sub get_subname {
- my $info = shift;
- if ( defined( $info->{evaltext} ) ) {
- my $eval = $info->{evaltext};
- if ( $info->{is_require} ) {
- return "require $eval";
- }
- else {
- $eval =~ s/([\\\'])/\\$1/g;
- return "eval '" . str_len_trim( $eval, $MaxEvalLen ) . "'";
- }
- }
-
- # this can happen on older perls when the sub (or the stash containing it)
- # has been deleted
- if ( !defined( $info->{sub} ) ) {
- return '__ANON__::__ANON__';
- }
-
- return ( $info->{sub} eq '(eval)' ) ? 'eval {...}' : $info->{sub};
-}
-
-# Figures out what call (from the point of view of the caller)
-# the long error backtrace should start at.
-sub long_error_loc {
- my $i;
- my $lvl = $CarpLevel;
- {
- ++$i;
- my $cgc = _cgc();
- my @caller = $cgc ? $cgc->($i) : caller($i);
- my $pkg = $caller[0];
- unless ( defined($pkg) ) {
-
- # This *shouldn't* happen.
- if (%Internal) {
- local %Internal;
- $i = long_error_loc();
- last;
- }
- elsif (defined $caller[2]) {
- # this can happen when the stash has been deleted
- # in that case, just assume that it's a reasonable place to
- # stop (the file and line data will still be intact in any
- # case) - the only issue is that we can't detect if the
- # deleted package was internal (so don't do that then)
- # -doy
- redo unless 0 > --$lvl;
- last;
- }
- else {
- return 2;
- }
- }
- redo if $CarpInternal{$pkg};
- redo unless 0 > --$lvl;
- redo if $Internal{$pkg};
- }
- return $i - 1;
-}
-
-sub longmess_heavy {
- if ( ref( $_[0] ) ) { # don't break references as exceptions
- return wantarray ? @_ : $_[0];
- }
- my $i = long_error_loc();
- return ret_backtrace( $i, @_ );
-}
-
-# Returns a full stack backtrace starting from where it is
-# told.
-sub ret_backtrace {
- my ( $i, @error ) = @_;
- my $mess;
- my $err = join '', @error;
- $i++;
-
- my $tid_msg = '';
- if ( defined &threads::tid ) {
- my $tid = threads->tid;
- $tid_msg = " thread $tid" if $tid;
- }
-
- my %i = caller_info($i);
- $mess = "$err at $i{file} line $i{line}$tid_msg";
- if( defined $. ) {
- local $@ = '';
- local $SIG{__DIE__};
- eval {
- CORE::die;
- };
- if($@ =~ /^Died at .*(, <.*?> line \d+).$/ ) {
- $mess .= $1;
- }
- }
- $mess .= "\.\n";
-
- while ( my %i = caller_info( ++$i ) ) {
- $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
- }
-
- return $mess;
-}
-
-sub ret_summary {
- my ( $i, @error ) = @_;
- my $err = join '', @error;
- $i++;
-
- my $tid_msg = '';
- if ( defined &threads::tid ) {
- my $tid = threads->tid;
- $tid_msg = " thread $tid" if $tid;
- }
-
- my %i = caller_info($i);
- return "$err at $i{file} line $i{line}$tid_msg\.\n";
-}
-
-sub short_error_loc {
- # You have to create your (hash)ref out here, rather than defaulting it
- # inside trusts *on a lexical*, as you want it to persist across calls.
- # (You can default it on $_[2], but that gets messy)
- my $cache = {};
- my $i = 1;
- my $lvl = $CarpLevel;
- {
- my $cgc = _cgc();
- my $called = $cgc ? $cgc->($i) : caller($i);
- $i++;
- my $caller = $cgc ? $cgc->($i) : caller($i);
-
- if (!defined($caller)) {
- my @caller = $cgc ? $cgc->($i) : caller($i);
- if (@caller) {
- # if there's no package but there is other caller info, then
- # the package has been deleted - treat this as a valid package
- # in this case
- redo if defined($called) && $CarpInternal{$called};
- redo unless 0 > --$lvl;
- last;
- }
- else {
- return 0;
- }
- }
- redo if $Internal{$caller};
- redo if $CarpInternal{$caller};
- redo if $CarpInternal{$called};
- redo if trusts( $called, $caller, $cache );
- redo if trusts( $caller, $called, $cache );
- redo unless 0 > --$lvl;
- }
- return $i - 1;
-}
-
-sub shortmess_heavy {
- return longmess_heavy(@_) if $Verbose;
- return @_ if ref( $_[0] ); # don't break references as exceptions
- my $i = short_error_loc();
- if ($i) {
- ret_summary( $i, @_ );
- }
- else {
- longmess_heavy(@_);
- }
-}
-
-# If a string is too long, trims it with ...
-sub str_len_trim {
- my $str = shift;
- my $max = shift || 0;
- if ( 2 < $max and $max < length($str) ) {
- substr( $str, $max - 3 ) = '...';
- }
- return $str;
-}
-
-# Takes two packages and an optional cache. Says whether the
-# first inherits from the second.
-#
-# Recursive versions of this have to work to avoid certain
-# possible endless loops, and when following long chains of
-# inheritance are less efficient.
-sub trusts {
- my $child = shift;
- my $parent = shift;
- my $cache = shift;
- my ( $known, $partial ) = get_status( $cache, $child );
-
- # Figure out consequences until we have an answer
- while ( @$partial and not exists $known->{$parent} ) {
- my $anc = shift @$partial;
- next if exists $known->{$anc};
- $known->{$anc}++;
- my ( $anc_knows, $anc_partial ) = get_status( $cache, $anc );
- my @found = keys %$anc_knows;
- @$known{@found} = ();
- push @$partial, @$anc_partial;
- }
- return exists $known->{$parent};
-}
-
-# Takes a package and gives a list of those trusted directly
-sub trusts_directly {
- my $class = shift;
- no strict 'refs';
- my $stash = \%{"$class\::"};
- for my $var (qw/ CARP_NOT ISA /) {
- # Don't try using the variable until we know it exists,
- # to avoid polluting the caller's namespace.
- if ( $stash->{$var} && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
- return @{$stash->{$var}}
- }
- }
- return;
-}
-
-if(!defined($warnings::VERSION) ||
- do { no warnings "numeric"; $warnings::VERSION < 1.03 }) {
- # Very old versions of warnings.pm import from Carp. This can go
- # wrong due to the circular dependency. If Carp is invoked before
- # warnings, then Carp starts by loading warnings, then warnings
- # tries to import from Carp, and gets nothing because Carp is in
- # the process of loading and hasn't defined its import method yet.
- # So we work around that by manually exporting to warnings here.
- no strict "refs";
- *{"warnings::$_"} = \&$_ foreach @EXPORT;
-}
-
-1;
-
-__END__
-
-#line 934
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/Carp/Heavy.pm b/software/Slic3r-1.3.0.64bit/lib/Carp/Heavy.pm
deleted file mode 100644
index 34e31fae..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Carp/Heavy.pm
+++ /dev/null
@@ -1,22 +0,0 @@
-#line 1 "Carp/Heavy.pm"
-package Carp::Heavy;
-
-use Carp ();
-
-our $VERSION = '1.40';
-$VERSION =~ tr/_//d;
-
-# Carp::Heavy was merged into Carp in version 1.12. Any mismatched versions
-# after this point are not significant and can be ignored.
-if(($Carp::VERSION || 0) < 1.12) {
- my $cv = defined($Carp::VERSION) ? $Carp::VERSION : "undef";
- die "Version mismatch between Carp $cv ($INC{q(Carp.pm)}) and Carp::Heavy $VERSION ($INC{q(Carp/Heavy.pm)}). Did you alter \@INC after Carp was loaded?\n";
-}
-
-1;
-
-# Most of the machinery of Carp used to be here.
-# It has been moved in Carp.pm now, but this placeholder remains for
-# the benefit of modules that like to preload Carp::Heavy directly.
-# This must load Carp, because some modules rely on the historical
-# behaviour of Carp::Heavy loading Carp.
diff --git a/software/Slic3r-1.3.0.64bit/lib/Class/Accessor.pm b/software/Slic3r-1.3.0.64bit/lib/Class/Accessor.pm
deleted file mode 100644
index e2e4078b..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Class/Accessor.pm
+++ /dev/null
@@ -1,237 +0,0 @@
-#line 1 "Class/Accessor.pm"
-package Class::Accessor;
-require 5.00502;
-use strict;
-$Class::Accessor::VERSION = '0.34';
-
-sub new {
- my($proto, $fields) = @_;
- my($class) = ref $proto || $proto;
-
- $fields = {} unless defined $fields;
-
- # make a copy of $fields.
- bless {%$fields}, $class;
-}
-
-sub mk_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('rw', @fields);
-}
-
-if (eval { require Sub::Name }) {
- Sub::Name->import;
-}
-
-{
- no strict 'refs';
-
- sub import {
- my ($class, @what) = @_;
- my $caller = caller;
- for (@what) {
- if (/^(?:antlers|moose-?like)$/i) {
- *{"${caller}::has"} = sub {
- my ($f, %args) = @_;
- $caller->_mk_accessors(($args{is}||"rw"), $f);
- };
- *{"${caller}::extends"} = sub {
- @{"${caller}::ISA"} = @_;
- unless (grep $_->can("_mk_accessors"), @_) {
- push @{"${caller}::ISA"}, $class;
- }
- };
- # we'll use their @ISA as a default, in case it happens to be
- # set already
- &{"${caller}::extends"}(@{"${caller}::ISA"});
- }
- }
- }
-
- sub follow_best_practice {
- my($self) = @_;
- my $class = ref $self || $self;
- *{"${class}::accessor_name_for"} = \&best_practice_accessor_name_for;
- *{"${class}::mutator_name_for"} = \&best_practice_mutator_name_for;
- }
-
- sub _mk_accessors {
- my($self, $access, @fields) = @_;
- my $class = ref $self || $self;
- my $ra = $access eq 'rw' || $access eq 'ro';
- my $wa = $access eq 'rw' || $access eq 'wo';
-
- foreach my $field (@fields) {
- my $accessor_name = $self->accessor_name_for($field);
- my $mutator_name = $self->mutator_name_for($field);
- if( $accessor_name eq 'DESTROY' or $mutator_name eq 'DESTROY' ) {
- $self->_carp("Having a data accessor named DESTROY in '$class' is unwise.");
- }
- if ($accessor_name eq $mutator_name) {
- my $accessor;
- if ($ra && $wa) {
- $accessor = $self->make_accessor($field);
- } elsif ($ra) {
- $accessor = $self->make_ro_accessor($field);
- } else {
- $accessor = $self->make_wo_accessor($field);
- }
- my $fullname = "${class}::$accessor_name";
- my $subnamed = 0;
- unless (defined &{$fullname}) {
- subname($fullname, $accessor) if defined &subname;
- $subnamed = 1;
- *{$fullname} = $accessor;
- }
- if ($accessor_name eq $field) {
- # the old behaviour
- my $alias = "${class}::_${field}_accessor";
- subname($alias, $accessor) if defined &subname and not $subnamed;
- *{$alias} = $accessor unless defined &{$alias};
- }
- } else {
- my $fullaccname = "${class}::$accessor_name";
- my $fullmutname = "${class}::$mutator_name";
- if ($ra and not defined &{$fullaccname}) {
- my $accessor = $self->make_ro_accessor($field);
- subname($fullaccname, $accessor) if defined &subname;
- *{$fullaccname} = $accessor;
- }
- if ($wa and not defined &{$fullmutname}) {
- my $mutator = $self->make_wo_accessor($field);
- subname($fullmutname, $mutator) if defined &subname;
- *{$fullmutname} = $mutator;
- }
- }
- }
- }
-
-}
-
-sub mk_ro_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('ro', @fields);
-}
-
-sub mk_wo_accessors {
- my($self, @fields) = @_;
-
- $self->_mk_accessors('wo', @fields);
-}
-
-sub best_practice_accessor_name_for {
- my ($class, $field) = @_;
- return "get_$field";
-}
-
-sub best_practice_mutator_name_for {
- my ($class, $field) = @_;
- return "set_$field";
-}
-
-sub accessor_name_for {
- my ($class, $field) = @_;
- return $field;
-}
-
-sub mutator_name_for {
- my ($class, $field) = @_;
- return $field;
-}
-
-sub set {
- my($self, $key) = splice(@_, 0, 2);
-
- if(@_ == 1) {
- $self->{$key} = $_[0];
- }
- elsif(@_ > 1) {
- $self->{$key} = [@_];
- }
- else {
- $self->_croak("Wrong number of arguments received");
- }
-}
-
-sub get {
- my $self = shift;
-
- if(@_ == 1) {
- return $self->{$_[0]};
- }
- elsif( @_ > 1 ) {
- return @{$self}{@_};
- }
- else {
- $self->_croak("Wrong number of arguments received");
- }
-}
-
-sub make_accessor {
- my ($class, $field) = @_;
-
- return sub {
- my $self = shift;
-
- if(@_) {
- return $self->set($field, @_);
- } else {
- return $self->get($field);
- }
- };
-}
-
-sub make_ro_accessor {
- my($class, $field) = @_;
-
- return sub {
- my $self = shift;
-
- if (@_) {
- my $caller = caller;
- $self->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
- }
- else {
- return $self->get($field);
- }
- };
-}
-
-sub make_wo_accessor {
- my($class, $field) = @_;
-
- return sub {
- my $self = shift;
-
- unless (@_) {
- my $caller = caller;
- $self->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
- }
- else {
- return $self->set($field, @_);
- }
- };
-}
-
-
-use Carp ();
-
-sub _carp {
- my ($self, $msg) = @_;
- Carp::carp($msg || $self);
- return;
-}
-
-sub _croak {
- my ($self, $msg) = @_;
- Carp::croak($msg || $self);
- return;
-}
-
-1;
-
-__END__
-
-#line 745
diff --git a/software/Slic3r-1.3.0.64bit/lib/Class/Method/Modifiers.pm b/software/Slic3r-1.3.0.64bit/lib/Class/Method/Modifiers.pm
deleted file mode 100644
index 7278ddad..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Class/Method/Modifiers.pm
+++ /dev/null
@@ -1,226 +0,0 @@
-#line 1 "Class/Method/Modifiers.pm"
-use strict;
-use warnings;
-package Class::Method::Modifiers; # git description: v2.11-20-g6902f76
-# ABSTRACT: Provides Moose-like method modifiers
-# KEYWORDS: method wrap modification patch
-# vim: set ts=8 sts=4 sw=4 tw=115 et :
-
-our $VERSION = '2.12';
-
-use base 'Exporter';
-
-our @EXPORT = qw(before after around);
-our @EXPORT_OK = (@EXPORT, qw(fresh install_modifier));
-our %EXPORT_TAGS = (
- moose => [qw(before after around)],
- all => \@EXPORT_OK,
-);
-
-BEGIN {
- *_HAS_READONLY = $] >= 5.008 ? sub(){1} : sub(){0};
-}
-
-our %MODIFIER_CACHE;
-
-# for backward compatibility
-sub _install_modifier; # -w
-*_install_modifier = \&install_modifier;
-
-sub install_modifier {
- my $into = shift;
- my $type = shift;
- my $code = pop;
- my @names = @_;
-
- @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
-
- return _fresh($into, $code, @names) if $type eq 'fresh';
-
- for my $name (@names) {
- my $hit = $into->can($name) or do {
- require Carp;
- Carp::confess("The method '$name' is not found in the inheritance hierarchy for class $into");
- };
-
- my $qualified = $into.'::'.$name;
- my $cache = $MODIFIER_CACHE{$into}{$name} ||= {
- before => [],
- after => [],
- around => [],
- };
-
- # this must be the first modifier we're installing
- if (!exists($cache->{"orig"})) {
- no strict 'refs';
-
- # grab the original method (or undef if the method is inherited)
- $cache->{"orig"} = *{$qualified}{CODE};
-
- # the "innermost" method, the one that "around" will ultimately wrap
- $cache->{"wrapped"} = $cache->{"orig"} || $hit; #sub {
- # # we can't cache this, because new methods or modifiers may be
- # # added between now and when this method is called
- # for my $package (@{ mro::get_linear_isa($into) }) {
- # next if $package eq $into;
- # my $code = *{$package.'::'.$name}{CODE};
- # goto $code if $code;
- # }
- # require Carp;
- # Carp::confess("$qualified\::$name disappeared?");
- #};
- }
-
- # keep these lists in the order the modifiers are called
- if ($type eq 'after') {
- push @{ $cache->{$type} }, $code;
- }
- else {
- unshift @{ $cache->{$type} }, $code;
- }
-
- # wrap the method with another layer of around. much simpler than
- # the Moose equivalent. :)
- if ($type eq 'around') {
- my $method = $cache->{wrapped};
- my $attrs = _sub_attrs($code);
- # a bare "sub :lvalue {...}" will be parsed as a label and an
- # indirect method call. force it to be treated as an expression
- # using +
- $cache->{wrapped} = eval "package $into; +sub $attrs { \$code->(\$method, \@_); };";
- }
-
- # install our new method which dispatches the modifiers, but only
- # if a new type was added
- if (@{ $cache->{$type} } == 1) {
-
- # avoid these hash lookups every method invocation
- my $before = $cache->{"before"};
- my $after = $cache->{"after"};
-
- # this is a coderef that changes every new "around". so we need
- # to take a reference to it. better a deref than a hash lookup
- my $wrapped = \$cache->{"wrapped"};
-
- my $attrs = _sub_attrs($cache->{wrapped});
-
- my $generated = "package $into;\n";
- $generated .= "sub $name $attrs {";
-
- # before is easy, it doesn't affect the return value(s)
- if (@$before) {
- $generated .= '
- for my $method (@$before) {
- $method->(@_);
- }
- ';
- }
-
- if (@$after) {
- $generated .= '
- my $ret;
- if (wantarray) {
- $ret = [$$wrapped->(@_)];
- '.(_HAS_READONLY ? 'Internals::SvREADONLY(@$ret, 1);' : '').'
- }
- elsif (defined wantarray) {
- $ret = \($$wrapped->(@_));
- }
- else {
- $$wrapped->(@_);
- }
-
- for my $method (@$after) {
- $method->(@_);
- }
-
- wantarray ? @$ret : $ret ? $$ret : ();
- '
- }
- else {
- $generated .= '$$wrapped->(@_);';
- }
-
- $generated .= '}';
-
- no strict 'refs';
- no warnings 'redefine';
- no warnings 'closure';
- eval $generated;
- };
- }
-}
-
-sub before {
- _install_modifier(scalar(caller), 'before', @_);
-}
-
-sub after {
- _install_modifier(scalar(caller), 'after', @_);
-}
-
-sub around {
- _install_modifier(scalar(caller), 'around', @_);
-}
-
-sub fresh {
- my $code = pop;
- my @names = @_;
-
- @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
-
- _fresh(scalar(caller), $code, @names);
-}
-
-sub _fresh {
- my ($into, $code, @names) = @_;
-
- for my $name (@names) {
- if ($name !~ /\A [a-zA-Z_] [a-zA-Z0-9_]* \z/xms) {
- require Carp;
- Carp::confess("Invalid method name '$name'");
- }
- if ($into->can($name)) {
- require Carp;
- Carp::confess("Class $into already has a method named '$name'");
- }
-
- # We need to make sure that the installed method has its CvNAME in
- # the appropriate package; otherwise, it would be subject to
- # deletion if callers use namespace::autoclean. If $code was
- # compiled in the target package, we can just install it directly;
- # otherwise, we'll need a different approach. Using Sub::Name would
- # be fine in all cases, at the cost of introducing a dependency on
- # an XS-using, non-core module. So instead we'll use string-eval to
- # create a new subroutine that wraps $code.
- if (_is_in_package($code, $into)) {
- no strict 'refs';
- *{"$into\::$name"} = $code;
- }
- else {
- no warnings 'closure'; # for 5.8.x
- my $attrs = _sub_attrs($code);
- eval "package $into; sub $name $attrs { \$code->(\@_) }";
- }
- }
-}
-
-sub _sub_attrs {
- my ($coderef) = @_;
- local *_sub = $coderef;
- local $@;
- (eval 'sub { _sub = 1 }') ? ':lvalue' : '';
-}
-
-sub _is_in_package {
- my ($coderef, $package) = @_;
- require B;
- my $cv = B::svref_2object($coderef);
- return $cv->GV->STASH->NAME eq $package;
-}
-
-1;
-
-__END__
-
-#line 566
diff --git a/software/Slic3r-1.3.0.64bit/lib/Class/Struct.pm b/software/Slic3r-1.3.0.64bit/lib/Class/Struct.pm
deleted file mode 100644
index 7d6d63e7..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Class/Struct.pm
+++ /dev/null
@@ -1,248 +0,0 @@
-#line 1 "Class/Struct.pm"
-package Class::Struct;
-
-## See POD after __END__
-
-use 5.006_001;
-
-use strict;
-use warnings::register;
-our(@ISA, @EXPORT, $VERSION);
-
-use Carp;
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(struct);
-
-$VERSION = '0.65';
-
-my $print = 0;
-sub printem {
- if (@_) { $print = shift }
- else { $print++ }
-}
-
-{
- package Class::Struct::Tie_ISA;
-
- sub TIEARRAY {
- my $class = shift;
- return bless [], $class;
- }
-
- sub STORE {
- my ($self, $index, $value) = @_;
- Class::Struct::_subclass_error();
- }
-
- sub FETCH {
- my ($self, $index) = @_;
- $self->[$index];
- }
-
- sub FETCHSIZE {
- my $self = shift;
- return scalar(@$self);
- }
-
- sub DESTROY { }
-}
-
-sub import {
- my $self = shift;
-
- if ( @_ == 0 ) {
- $self->export_to_level( 1, $self, @EXPORT );
- } elsif ( @_ == 1 ) {
- # This is admittedly a little bit silly:
- # do we ever export anything else than 'struct'...?
- $self->export_to_level( 1, $self, @_ );
- } else {
- goto &struct;
- }
-}
-
-sub struct {
-
- # Determine parameter list structure, one of:
- # struct( class => [ element-list ])
- # struct( class => { element-list })
- # struct( element-list )
- # Latter form assumes current package name as struct name.
-
- my ($class, @decls);
- my $base_type = ref $_[1];
- if ( $base_type eq 'HASH' ) {
- $class = shift;
- @decls = %{shift()};
- _usage_error() if @_;
- }
- elsif ( $base_type eq 'ARRAY' ) {
- $class = shift;
- @decls = @{shift()};
- _usage_error() if @_;
- }
- else {
- $base_type = 'ARRAY';
- $class = (caller())[0];
- @decls = @_;
- }
-
- _usage_error() if @decls % 2 == 1;
-
- # Ensure we are not, and will not be, a subclass.
-
- my $isa = do {
- no strict 'refs';
- \@{$class . '::ISA'};
- };
- _subclass_error() if @$isa;
- tie @$isa, 'Class::Struct::Tie_ISA';
-
- # Create constructor.
-
- croak "function 'new' already defined in package $class"
- if do { no strict 'refs'; defined &{$class . "::new"} };
-
- my @methods = ();
- my %refs = ();
- my %arrays = ();
- my %hashes = ();
- my %classes = ();
- my $got_class = 0;
- my $out = '';
-
- $out = "{\n package $class;\n use Carp;\n sub new {\n";
- $out .= " my (\$class, \%init) = \@_;\n";
- $out .= " \$class = __PACKAGE__ unless \@_;\n";
-
- my $cnt = 0;
- my $idx = 0;
- my( $cmt, $name, $type, $elem );
-
- if( $base_type eq 'HASH' ){
- $out .= " my(\$r) = {};\n";
- $cmt = '';
- }
- elsif( $base_type eq 'ARRAY' ){
- $out .= " my(\$r) = [];\n";
- }
-
- $out .= " bless \$r, \$class;\n\n";
-
- while( $idx < @decls ){
- $name = $decls[$idx];
- $type = $decls[$idx+1];
- push( @methods, $name );
- if( $base_type eq 'HASH' ){
- $elem = "{'${class}::$name'}";
- }
- elsif( $base_type eq 'ARRAY' ){
- $elem = "[$cnt]";
- ++$cnt;
- $cmt = " # $name";
- }
- if( $type =~ /^\*(.)/ ){
- $refs{$name}++;
- $type = $1;
- }
- my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
- if( $type eq '@' ){
- $out .= " croak 'Initializer for $name must be array reference'\n";
- $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
- $out .= " \$r->$name( $init [] );$cmt\n";
- $arrays{$name}++;
- }
- elsif( $type eq '%' ){
- $out .= " croak 'Initializer for $name must be hash reference'\n";
- $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
- $out .= " \$r->$name( $init {} );$cmt\n";
- $hashes{$name}++;
- }
- elsif ( $type eq '$') {
- $out .= " \$r->$name( $init undef );$cmt\n";
- }
- elsif( $type =~ /^\w+(?:::\w+)*$/ ){
- $out .= " if (defined(\$init{'$name'})) {\n";
- $out .= " if (ref \$init{'$name'} eq 'HASH')\n";
- $out .= " { \$r->$name( $type->new(\%{\$init{'$name'}}) ) } $cmt\n";
- $out .= " elsif (UNIVERSAL::isa(\$init{'$name'}, '$type'))\n";
- $out .= " { \$r->$name( \$init{'$name'} ) } $cmt\n";
- $out .= " else { croak 'Initializer for $name must be hash or $type reference' }\n";
- $out .= " }\n";
- $classes{$name} = $type;
- $got_class = 1;
- }
- else{
- croak "'$type' is not a valid struct element type";
- }
- $idx += 2;
- }
-
- $out .= "\n \$r;\n}\n";
-
- # Create accessor methods.
-
- my( $pre, $pst, $sel );
- $cnt = 0;
- foreach $name (@methods){
- if ( do { no strict 'refs'; defined &{$class . "::$name"} } ) {
- warnings::warnif("function '$name' already defined, overrides struct accessor method");
- }
- else {
- $pre = $pst = $cmt = $sel = '';
- if( defined $refs{$name} ){
- $pre = "\\(";
- $pst = ")";
- $cmt = " # returns ref";
- }
- $out .= " sub $name {$cmt\n my \$r = shift;\n";
- if( $base_type eq 'ARRAY' ){
- $elem = "[$cnt]";
- ++$cnt;
- }
- elsif( $base_type eq 'HASH' ){
- $elem = "{'${class}::$name'}";
- }
- if( defined $arrays{$name} ){
- $out .= " my \$i;\n";
- $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
- $out .= " if (ref(\$i) eq 'ARRAY' && !\@_) { \$r->$elem = \$i; return \$r }\n";
- $sel = "->[\$i]";
- }
- elsif( defined $hashes{$name} ){
- $out .= " my \$i;\n";
- $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
- $out .= " if (ref(\$i) eq 'HASH' && !\@_) { \$r->$elem = \$i; return \$r }\n";
- $sel = "->{\$i}";
- }
- elsif( defined $classes{$name} ){
- $out .= " croak '$name argument is wrong class' if \@_ && ! UNIVERSAL::isa(\$_[0], '$classes{$name}');\n";
- }
- $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
- $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
- $out .= " }\n";
- }
- }
- $out .= "}\n1;\n";
-
- print $out if $print;
- my $result = eval $out;
- carp $@ if $@;
-}
-
-sub _usage_error {
- confess "struct usage error";
-}
-
-sub _subclass_error {
- croak 'struct class cannot be a subclass (@ISA not allowed)';
-}
-
-1; # for require
-
-
-__END__
-
-#line 638
diff --git a/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Bzip2.pm b/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Bzip2.pm
deleted file mode 100644
index aba6f33a..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Bzip2.pm
+++ /dev/null
@@ -1,126 +0,0 @@
-#line 1 "Compress/Raw/Bzip2.pm"
-
-package Compress::Raw::Bzip2;
-
-use strict ;
-use warnings ;
-
-require 5.006 ;
-require Exporter;
-use Carp ;
-
-use bytes ;
-our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
-
-$VERSION = '2.074';
-$XS_VERSION = $VERSION;
-$VERSION = eval $VERSION;
-
-@ISA = qw(Exporter);
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-@EXPORT = qw(
- BZ_RUN
- BZ_FLUSH
- BZ_FINISH
-
- BZ_OK
- BZ_RUN_OK
- BZ_FLUSH_OK
- BZ_FINISH_OK
- BZ_STREAM_END
- BZ_SEQUENCE_ERROR
- BZ_PARAM_ERROR
- BZ_MEM_ERROR
- BZ_DATA_ERROR
- BZ_DATA_ERROR_MAGIC
- BZ_IO_ERROR
- BZ_UNEXPECTED_EOF
- BZ_OUTBUFF_FULL
- BZ_CONFIG_ERROR
-
- );
-
-sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my ($error, $val) = constant($constname);
- Carp::croak $error if $error;
- no strict 'refs';
- *{$AUTOLOAD} = sub { $val };
- goto &{$AUTOLOAD};
-
-}
-
-use constant FLAG_APPEND => 1 ;
-use constant FLAG_CRC => 2 ;
-use constant FLAG_ADLER => 4 ;
-use constant FLAG_CONSUME_INPUT => 8 ;
-
-eval {
- require XSLoader;
- XSLoader::load('Compress::Raw::Bzip2', $XS_VERSION);
- 1;
-}
-or do {
- require DynaLoader;
- local @ISA = qw(DynaLoader);
- bootstrap Compress::Raw::Bzip2 $XS_VERSION ;
-};
-
-#sub Compress::Raw::Bzip2::new
-#{
-# my $class = shift ;
-# my ($ptr, $status) = _new(@_);
-# return wantarray ? (undef, $status) : undef
-# unless $ptr ;
-# my $obj = bless [$ptr], $class ;
-# return wantarray ? ($obj, $status) : $obj;
-#}
-#
-#package Compress::Raw::Bunzip2 ;
-#
-#sub Compress::Raw::Bunzip2::new
-#{
-# my $class = shift ;
-# my ($ptr, $status) = _new(@_);
-# return wantarray ? (undef, $status) : undef
-# unless $ptr ;
-# my $obj = bless [$ptr], $class ;
-# return wantarray ? ($obj, $status) : $obj;
-#}
-
-sub Compress::Raw::Bzip2::STORABLE_freeze
-{
- my $type = ref shift;
- croak "Cannot freeze $type object\n";
-}
-
-sub Compress::Raw::Bzip2::STORABLE_thaw
-{
- my $type = ref shift;
- croak "Cannot thaw $type object\n";
-}
-
-sub Compress::Raw::Bunzip2::STORABLE_freeze
-{
- my $type = ref shift;
- croak "Cannot freeze $type object\n";
-}
-
-sub Compress::Raw::Bunzip2::STORABLE_thaw
-{
- my $type = ref shift;
- croak "Cannot thaw $type object\n";
-}
-
-
-package Compress::Raw::Bzip2;
-
-1;
-
-__END__
-
-
-#line 386
diff --git a/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Zlib.pm b/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Zlib.pm
deleted file mode 100644
index 7c9324d3..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Compress/Raw/Zlib.pm
+++ /dev/null
@@ -1,600 +0,0 @@
-#line 1 "Compress/Raw/Zlib.pm"
-
-package Compress::Raw::Zlib;
-
-require 5.006 ;
-require Exporter;
-use Carp ;
-
-use strict ;
-use warnings ;
-use bytes ;
-our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
-
-$VERSION = '2.074';
-$XS_VERSION = $VERSION;
-$VERSION = eval $VERSION;
-
-@ISA = qw(Exporter);
-%EXPORT_TAGS = ( flush => [qw{
- Z_NO_FLUSH
- Z_PARTIAL_FLUSH
- Z_SYNC_FLUSH
- Z_FULL_FLUSH
- Z_FINISH
- Z_BLOCK
- }],
- level => [qw{
- Z_NO_COMPRESSION
- Z_BEST_SPEED
- Z_BEST_COMPRESSION
- Z_DEFAULT_COMPRESSION
- }],
- strategy => [qw{
- Z_FILTERED
- Z_HUFFMAN_ONLY
- Z_RLE
- Z_FIXED
- Z_DEFAULT_STRATEGY
- }],
- status => [qw{
- Z_OK
- Z_STREAM_END
- Z_NEED_DICT
- Z_ERRNO
- Z_STREAM_ERROR
- Z_DATA_ERROR
- Z_MEM_ERROR
- Z_BUF_ERROR
- Z_VERSION_ERROR
- }],
- );
-
-%DEFLATE_CONSTANTS = %EXPORT_TAGS;
-
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-@DEFLATE_CONSTANTS =
-@EXPORT = qw(
- ZLIB_VERSION
- ZLIB_VERNUM
-
-
- OS_CODE
-
- MAX_MEM_LEVEL
- MAX_WBITS
-
- Z_ASCII
- Z_BEST_COMPRESSION
- Z_BEST_SPEED
- Z_BINARY
- Z_BLOCK
- Z_BUF_ERROR
- Z_DATA_ERROR
- Z_DEFAULT_COMPRESSION
- Z_DEFAULT_STRATEGY
- Z_DEFLATED
- Z_ERRNO
- Z_FILTERED
- Z_FIXED
- Z_FINISH
- Z_FULL_FLUSH
- Z_HUFFMAN_ONLY
- Z_MEM_ERROR
- Z_NEED_DICT
- Z_NO_COMPRESSION
- Z_NO_FLUSH
- Z_NULL
- Z_OK
- Z_PARTIAL_FLUSH
- Z_RLE
- Z_STREAM_END
- Z_STREAM_ERROR
- Z_SYNC_FLUSH
- Z_TREES
- Z_UNKNOWN
- Z_VERSION_ERROR
-
- WANT_GZIP
- WANT_GZIP_OR_ZLIB
-);
-
-push @EXPORT, qw(crc32 adler32 DEF_WBITS);
-
-use constant WANT_GZIP => 16;
-use constant WANT_GZIP_OR_ZLIB => 32;
-
-sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my ($error, $val) = constant($constname);
- Carp::croak $error if $error;
- no strict 'refs';
- *{$AUTOLOAD} = sub { $val };
- goto &{$AUTOLOAD};
-}
-
-use constant FLAG_APPEND => 1 ;
-use constant FLAG_CRC => 2 ;
-use constant FLAG_ADLER => 4 ;
-use constant FLAG_CONSUME_INPUT => 8 ;
-use constant FLAG_LIMIT_OUTPUT => 16 ;
-
-eval {
- require XSLoader;
- XSLoader::load('Compress::Raw::Zlib', $XS_VERSION);
- 1;
-}
-or do {
- require DynaLoader;
- local @ISA = qw(DynaLoader);
- bootstrap Compress::Raw::Zlib $XS_VERSION ;
-};
-
-
-use constant Parse_any => 0x01;
-use constant Parse_unsigned => 0x02;
-use constant Parse_signed => 0x04;
-use constant Parse_boolean => 0x08;
-#use constant Parse_string => 0x10;
-#use constant Parse_custom => 0x12;
-
-#use constant Parse_store_ref => 0x100 ;
-
-use constant OFF_PARSED => 0 ;
-use constant OFF_TYPE => 1 ;
-use constant OFF_DEFAULT => 2 ;
-use constant OFF_FIXED => 3 ;
-use constant OFF_FIRST_ONLY => 4 ;
-use constant OFF_STICKY => 5 ;
-
-
-
-sub ParseParameters
-{
- my $level = shift || 0 ;
-
- my $sub = (caller($level + 1))[3] ;
- #local $Carp::CarpLevel = 1 ;
- my $p = new Compress::Raw::Zlib::Parameters() ;
- $p->parse(@_)
- or croak "$sub: $p->{Error}" ;
-
- return $p;
-}
-
-
-sub Compress::Raw::Zlib::Parameters::new
-{
- my $class = shift ;
-
- my $obj = { Error => '',
- Got => {},
- } ;
-
- #return bless $obj, ref($class) || $class || __PACKAGE__ ;
- return bless $obj, 'Compress::Raw::Zlib::Parameters' ;
-}
-
-sub Compress::Raw::Zlib::Parameters::setError
-{
- my $self = shift ;
- my $error = shift ;
- my $retval = @_ ? shift : undef ;
-
- $self->{Error} = $error ;
- return $retval;
-}
-
-#sub getError
-#{
-# my $self = shift ;
-# return $self->{Error} ;
-#}
-
-sub Compress::Raw::Zlib::Parameters::parse
-{
- my $self = shift ;
-
- my $default = shift ;
-
- my $got = $self->{Got} ;
- my $firstTime = keys %{ $got } == 0 ;
-
- my (@Bad) ;
- my @entered = () ;
-
- # Allow the options to be passed as a hash reference or
- # as the complete hash.
- if (@_ == 0) {
- @entered = () ;
- }
- elsif (@_ == 1) {
- my $href = $_[0] ;
- return $self->setError("Expected even number of parameters, got 1")
- if ! defined $href or ! ref $href or ref $href ne "HASH" ;
-
- foreach my $key (keys %$href) {
- push @entered, $key ;
- push @entered, \$href->{$key} ;
- }
- }
- else {
- my $count = @_;
- return $self->setError("Expected even number of parameters, got $count")
- if $count % 2 != 0 ;
-
- for my $i (0.. $count / 2 - 1) {
- push @entered, $_[2* $i] ;
- push @entered, \$_[2* $i+1] ;
- }
- }
-
-
- while (my ($key, $v) = each %$default)
- {
- croak "need 4 params [@$v]"
- if @$v != 4 ;
-
- my ($first_only, $sticky, $type, $value) = @$v ;
- my $x ;
- $self->_checkType($key, \$value, $type, 0, \$x)
- or return undef ;
-
- $key = lc $key;
-
- if ($firstTime || ! $sticky) {
- $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ;
- }
-
- $got->{$key}[OFF_PARSED] = 0 ;
- }
-
- for my $i (0.. @entered / 2 - 1) {
- my $key = $entered[2* $i] ;
- my $value = $entered[2* $i+1] ;
-
- #print "Key [$key] Value [$value]" ;
- #print defined $$value ? "[$$value]\n" : "[undef]\n";
-
- $key =~ s/^-// ;
- my $canonkey = lc $key;
-
- if ($got->{$canonkey} && ($firstTime ||
- ! $got->{$canonkey}[OFF_FIRST_ONLY] ))
- {
- my $type = $got->{$canonkey}[OFF_TYPE] ;
- my $s ;
- $self->_checkType($key, $value, $type, 1, \$s)
- or return undef ;
- #$value = $$value unless $type & Parse_store_ref ;
- $value = $$value ;
- $got->{$canonkey} = [1, $type, $value, $s] ;
- }
- else
- { push (@Bad, $key) }
- }
-
- if (@Bad) {
- my ($bad) = join(", ", @Bad) ;
- return $self->setError("unknown key value(s) @Bad") ;
- }
-
- return 1;
-}
-
-sub Compress::Raw::Zlib::Parameters::_checkType
-{
- my $self = shift ;
-
- my $key = shift ;
- my $value = shift ;
- my $type = shift ;
- my $validate = shift ;
- my $output = shift;
-
- #local $Carp::CarpLevel = $level ;
- #print "PARSE $type $key $value $validate $sub\n" ;
-# if ( $type & Parse_store_ref)
-# {
-# #$value = $$value
-# # if ref ${ $value } ;
-#
-# $$output = $value ;
-# return 1;
-# }
-
- $value = $$value ;
-
- if ($type & Parse_any)
- {
- $$output = $value ;
- return 1;
- }
- elsif ($type & Parse_unsigned)
- {
- return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'")
- if $validate && ! defined $value ;
- return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
- if $validate && $value !~ /^\d+$/;
-
- $$output = defined $value ? $value : 0 ;
- return 1;
- }
- elsif ($type & Parse_signed)
- {
- return $self->setError("Parameter '$key' must be a signed int, got 'undef'")
- if $validate && ! defined $value ;
- return $self->setError("Parameter '$key' must be a signed int, got '$value'")
- if $validate && $value !~ /^-?\d+$/;
-
- $$output = defined $value ? $value : 0 ;
- return 1 ;
- }
- elsif ($type & Parse_boolean)
- {
- return $self->setError("Parameter '$key' must be an int, got '$value'")
- if $validate && defined $value && $value !~ /^\d*$/;
- $$output = defined $value ? $value != 0 : 0 ;
- return 1;
- }
-# elsif ($type & Parse_string)
-# {
-# $$output = defined $value ? $value : "" ;
-# return 1;
-# }
-
- $$output = $value ;
- return 1;
-}
-
-
-
-sub Compress::Raw::Zlib::Parameters::parsed
-{
- my $self = shift ;
- my $name = shift ;
-
- return $self->{Got}{lc $name}[OFF_PARSED] ;
-}
-
-sub Compress::Raw::Zlib::Parameters::value
-{
- my $self = shift ;
- my $name = shift ;
-
- if (@_)
- {
- $self->{Got}{lc $name}[OFF_PARSED] = 1;
- $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ;
- $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ;
- }
-
- return $self->{Got}{lc $name}[OFF_FIXED] ;
-}
-
-our $OPTIONS_deflate =
- {
- 'AppendOutput' => [1, 1, Parse_boolean, 0],
- 'CRC32' => [1, 1, Parse_boolean, 0],
- 'ADLER32' => [1, 1, Parse_boolean, 0],
- 'Bufsize' => [1, 1, Parse_unsigned, 4096],
-
- 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
- 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
- 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
- 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
- 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
- 'Dictionary' => [1, 1, Parse_any, ""],
- };
-
-sub Compress::Raw::Zlib::Deflate::new
-{
- my $pkg = shift ;
- my ($got) = ParseParameters(0, $OPTIONS_deflate, @_);
-
- croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " .
- $got->value('Bufsize')
- unless $got->value('Bufsize') >= 1;
-
- my $flags = 0 ;
- $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
- $flags |= FLAG_CRC if $got->value('CRC32') ;
- $flags |= FLAG_ADLER if $got->value('ADLER32') ;
-
- my $windowBits = $got->value('WindowBits');
- $windowBits += MAX_WBITS()
- if ($windowBits & MAX_WBITS()) == 0 ;
-
- _deflateInit($flags,
- $got->value('Level'),
- $got->value('Method'),
- $windowBits,
- $got->value('MemLevel'),
- $got->value('Strategy'),
- $got->value('Bufsize'),
- $got->value('Dictionary')) ;
-
-}
-
-sub Compress::Raw::Zlib::deflateStream::STORABLE_freeze
-{
- my $type = ref shift;
- croak "Cannot freeze $type object\n";
-}
-
-sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw
-{
- my $type = ref shift;
- croak "Cannot thaw $type object\n";
-}
-
-
-our $OPTIONS_inflate =
- {
- 'AppendOutput' => [1, 1, Parse_boolean, 0],
- 'LimitOutput' => [1, 1, Parse_boolean, 0],
- 'CRC32' => [1, 1, Parse_boolean, 0],
- 'ADLER32' => [1, 1, Parse_boolean, 0],
- 'ConsumeInput' => [1, 1, Parse_boolean, 1],
- 'Bufsize' => [1, 1, Parse_unsigned, 4096],
-
- 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
- 'Dictionary' => [1, 1, Parse_any, ""],
- } ;
-
-sub Compress::Raw::Zlib::Inflate::new
-{
- my $pkg = shift ;
- my ($got) = ParseParameters(0, $OPTIONS_inflate, @_);
-
- croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " .
- $got->value('Bufsize')
- unless $got->value('Bufsize') >= 1;
-
- my $flags = 0 ;
- $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
- $flags |= FLAG_CRC if $got->value('CRC32') ;
- $flags |= FLAG_ADLER if $got->value('ADLER32') ;
- $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
- $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ;
-
-
- my $windowBits = $got->value('WindowBits');
- $windowBits += MAX_WBITS()
- if ($windowBits & MAX_WBITS()) == 0 ;
-
- _inflateInit($flags, $windowBits, $got->value('Bufsize'),
- $got->value('Dictionary')) ;
-}
-
-sub Compress::Raw::Zlib::inflateStream::STORABLE_freeze
-{
- my $type = ref shift;
- croak "Cannot freeze $type object\n";
-}
-
-sub Compress::Raw::Zlib::inflateStream::STORABLE_thaw
-{
- my $type = ref shift;
- croak "Cannot thaw $type object\n";
-}
-
-sub Compress::Raw::Zlib::InflateScan::new
-{
- my $pkg = shift ;
- my ($got) = ParseParameters(0,
- {
- 'CRC32' => [1, 1, Parse_boolean, 0],
- 'ADLER32' => [1, 1, Parse_boolean, 0],
- 'Bufsize' => [1, 1, Parse_unsigned, 4096],
-
- 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()],
- 'Dictionary' => [1, 1, Parse_any, ""],
- }, @_) ;
-
-
- croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " .
- $got->value('Bufsize')
- unless $got->value('Bufsize') >= 1;
-
- my $flags = 0 ;
- #$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
- $flags |= FLAG_CRC if $got->value('CRC32') ;
- $flags |= FLAG_ADLER if $got->value('ADLER32') ;
- #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
-
- _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'),
- '') ;
-}
-
-sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream
-{
- my $pkg = shift ;
- my ($got) = ParseParameters(0,
- {
- 'AppendOutput' => [1, 1, Parse_boolean, 0],
- 'CRC32' => [1, 1, Parse_boolean, 0],
- 'ADLER32' => [1, 1, Parse_boolean, 0],
- 'Bufsize' => [1, 1, Parse_unsigned, 4096],
-
- 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
- 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
- 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()],
- 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
- 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
- }, @_) ;
-
- croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " .
- $got->value('Bufsize')
- unless $got->value('Bufsize') >= 1;
-
- my $flags = 0 ;
- $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
- $flags |= FLAG_CRC if $got->value('CRC32') ;
- $flags |= FLAG_ADLER if $got->value('ADLER32') ;
-
- $pkg->_createDeflateStream($flags,
- $got->value('Level'),
- $got->value('Method'),
- $got->value('WindowBits'),
- $got->value('MemLevel'),
- $got->value('Strategy'),
- $got->value('Bufsize'),
- ) ;
-
-}
-
-sub Compress::Raw::Zlib::inflateScanStream::inflate
-{
- my $self = shift ;
- my $buffer = $_[1];
- my $eof = $_[2];
-
- my $status = $self->scan(@_);
-
- if ($status == Z_OK() && $_[2]) {
- my $byte = ' ';
-
- $status = $self->scan(\$byte, $_[1]) ;
- }
-
- return $status ;
-}
-
-sub Compress::Raw::Zlib::deflateStream::deflateParams
-{
- my $self = shift ;
- my ($got) = ParseParameters(0, {
- 'Level' => [1, 1, Parse_signed, undef],
- 'Strategy' => [1, 1, Parse_unsigned, undef],
- 'Bufsize' => [1, 1, Parse_unsigned, undef],
- },
- @_) ;
-
- croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy"
- unless $got->parsed('Level') + $got->parsed('Strategy') +
- $got->parsed('Bufsize');
-
- croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " .
- $got->value('Bufsize')
- if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1;
-
- my $flags = 0;
- $flags |= 1 if $got->parsed('Level') ;
- $flags |= 2 if $got->parsed('Strategy') ;
- $flags |= 4 if $got->parsed('Bufsize') ;
-
- $self->_deflateParams($flags, $got->value('Level'),
- $got->value('Strategy'), $got->value('Bufsize'));
-
-}
-
-
-1;
-__END__
-
-
-#line 1598
diff --git a/software/Slic3r-1.3.0.64bit/lib/Config.pm b/software/Slic3r-1.3.0.64bit/lib/Config.pm
deleted file mode 100644
index ceb4b938..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Config.pm
+++ /dev/null
@@ -1,112 +0,0 @@
-#line 1 "Config.pm"
-# This file was created by configpm when Perl was built. Any changes
-# made to this file will be lost the next time perl is built.
-
-# for a description of the variables, please have a look at the
-# Glossary file, as written in the Porting folder, or use the url:
-# http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary
-
-package Config;
-use strict;
-use warnings;
-use vars '%Config', '$VERSION';
-
-$VERSION = "5.024001";
-
-# Skip @Config::EXPORT because it only contains %Config, which we special
-# case below as it's not a function. @Config::EXPORT won't change in the
-# lifetime of Perl 5.
-my %Export_Cache = (myconfig => 1, config_sh => 1, config_vars => 1,
- config_re => 1, compile_date => 1, local_patches => 1,
- bincompat_options => 1, non_bincompat_options => 1,
- header_files => 1);
-
-@Config::EXPORT = qw(%Config);
-@Config::EXPORT_OK = keys %Export_Cache;
-
-# Need to stub all the functions to make code such as print Config::config_sh
-# keep working
-
-sub bincompat_options;
-sub compile_date;
-sub config_re;
-sub config_sh;
-sub config_vars;
-sub header_files;
-sub local_patches;
-sub myconfig;
-sub non_bincompat_options;
-
-# Define our own import method to avoid pulling in the full Exporter:
-sub import {
- shift;
- @_ = @Config::EXPORT unless @_;
-
- my @funcs = grep $_ ne '%Config', @_;
- my $export_Config = @funcs < @_ ? 1 : 0;
-
- no strict 'refs';
- my $callpkg = caller(0);
- foreach my $func (@funcs) {
- die qq{"$func" is not exported by the Config module\n}
- unless $Export_Cache{$func};
- *{$callpkg.'::'.$func} = \&{$func};
- }
-
- *{"$callpkg\::Config"} = \%Config if $export_Config;
- return;
-}
-
-die "$0: Perl lib version (5.24.1) doesn't match executable '$^X' version ($])"
- unless $^V;
-
-$^V eq 5.24.1
- or die sprintf "%s: Perl lib version (5.24.1) doesn't match executable '$^X' version (%vd)", $0, $^V;
-
-
-sub FETCH {
- my($self, $key) = @_;
-
- # check for cached value (which may be undef so we use exists not defined)
- return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
-}
-
-sub TIEHASH {
- bless $_[1], $_[0];
-}
-
-sub DESTROY { }
-
-sub AUTOLOAD {
- require 'Config_heavy.pl';
- goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
- die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
-}
-
-# tie returns the object, so the value returned to require will be true.
-tie %Config, 'Config', {
- archlibexp => 'C:\\STRAWB~1\\perl\\lib',
- archname => 'MSWin32-x64-multi-thread',
- cc => 'gcc',
- d_readlink => undef,
- d_symlink => undef,
- dlext => 'xs.dll',
- dlsrc => 'dl_win32.xs',
- dont_use_nlink => undef,
- exe_ext => '.exe',
- inc_version_list => '',
- intsize => '4',
- ldlibpthname => '',
- libpth => 'C:\\STRAWB~1\\c\\lib C:\\STRAWB~1\\c\\x86_64-w64-mingw32\\lib C:\\STRAWB~1\\c\\lib\\gcc\\x86_64-w64-mingw32\\6.3.0',
- osname => 'MSWin32',
- osvers => '10.0',
- path_sep => ';',
- privlibexp => 'C:\\STRAWB~1\\perl\\lib',
- scriptdir => 'C:\\STRAWB~1\\perl\\bin',
- sitearchexp => 'C:\\STRAWB~1\\perl\\site\\lib',
- sitelibexp => 'C:\\STRAWB~1\\perl\\site\\lib',
- so => 'dll',
- useithreads => 'define',
- usevendorprefix => 'define',
- version => '5.24.1',
-};
diff --git a/software/Slic3r-1.3.0.64bit/lib/Config_git.pl b/software/Slic3r-1.3.0.64bit/lib/Config_git.pl
deleted file mode 100644
index ab35396d..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Config_git.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-######################################################################
-# WARNING: 'lib/Config_git.pl' is generated by make_patchnum.pl
-# DO NOT EDIT DIRECTLY - edit make_patchnum.pl instead
-######################################################################
-$Config::Git_Data=<<'ENDOFGIT';
-git_commit_id=''
-git_describe=''
-git_branch=''
-git_uncommitted_changes=''
-git_commit_id_title=''
-
-ENDOFGIT
diff --git a/software/Slic3r-1.3.0.64bit/lib/Config_heavy.pl b/software/Slic3r-1.3.0.64bit/lib/Config_heavy.pl
deleted file mode 100644
index 4e9611c1..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Config_heavy.pl
+++ /dev/null
@@ -1,1420 +0,0 @@
-# This file was created by configpm when Perl was built. Any changes
-# made to this file will be lost the next time perl is built.
-
-package Config;
-use strict;
-use warnings;
-use vars '%Config';
-
-sub bincompat_options {
- return split ' ', (Internals::V())[0];
-}
-
-sub non_bincompat_options {
- return split ' ', (Internals::V())[1];
-}
-
-sub compile_date {
- return (Internals::V())[2]
-}
-
-sub local_patches {
- my (undef, undef, undef, @patches) = Internals::V();
- return @patches;
-}
-
-sub _V {
- die "Perl lib was built for 'MSWin32' but is being run on '$^O'"
- unless "MSWin32" eq $^O;
-
- my ($bincompat, $non_bincompat, $date, @patches) = Internals::V();
-
- my $opts = join ' ', sort split ' ', "$bincompat $non_bincompat";
-
- # wrap at 76 columns.
-
- $opts =~ s/(?=.{53})(.{1,53}) /$1\n /mg;
-
- print Config::myconfig();
- print "\nCharacteristics of this binary (from libperl): \n";
-
- print " Compile-time options: $opts\n";
-
- if (@patches) {
- print " Locally applied patches:\n";
- print "\t$_\n" foreach @patches;
- }
-
- print " Built under MSWin32\n";
-
- print " $date\n" if defined $date;
-
- my @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV;
-
- if (@env) {
- print " \%ENV:\n";
- print " $_\n" foreach @env;
- }
- print " \@INC:\n";
- print " $_\n" foreach @INC;
-}
-
-sub header_files {
- return qw(EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h
- dosish.h embed.h embedvar.h form.h gv.h handy.h hv.h hv_func.h
- intrpvar.h iperlsys.h keywords.h mg.h nostdio.h op.h opcode.h
- pad.h parser.h patchlevel.h perl.h perlio.h perliol.h perlsdio.h
- perlvars.h perly.h pp.h pp_proto.h proto.h regcomp.h regexp.h
- regnodes.h scope.h sv.h thread.h time64.h unixish.h utf8.h
- util.h);
-}
-
-### Configured by: strawberry-perl@project
-### Target system: WIN32
-
-our $summary = <<'!END!';
-Summary of my $package (revision $revision $version_patchlevel_string) configuration:
- $git_commit_id_title $git_commit_id$git_ancestor_line
- Platform:
- osname=$osname, osvers=$osvers, archname=$archname
- uname='$myuname'
- config_args='$config_args'
- hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction
- useithreads=$useithreads, usemultiplicity=$usemultiplicity
- use64bitint=$use64bitint, use64bitall=$use64bitall, uselongdouble=$uselongdouble
- usemymalloc=$usemymalloc, bincompat5005=undef
- Compiler:
- cc='$cc', ccflags ='$ccflags',
- optimize='$optimize',
- cppflags='$cppflags'
- ccversion='$ccversion', gccversion='$gccversion', gccosandvers='$gccosandvers'
- intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize, byteorder=$byteorder, doublekind=$doublekind
- d_longlong=$d_longlong, longlongsize=$longlongsize, d_longdbl=$d_longdbl, longdblsize=$longdblsize, longdblkind=$longdblkind
- ivtype='$ivtype', ivsize=$ivsize, nvtype='$nvtype', nvsize=$nvsize, Off_t='$lseektype', lseeksize=$lseeksize
- alignbytes=$alignbytes, prototype=$prototype
- Linker and Libraries:
- ld='$ld', ldflags ='$ldflags'
- libpth=$libpth
- libs=$libs
- perllibs=$perllibs
- libc=$libc, so=$so, useshrplib=$useshrplib, libperl=$libperl
- gnulibc_version='$gnulibc_version'
- Dynamic Linking:
- dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun, ccdlflags='$ccdlflags'
- cccdlflags='$cccdlflags', lddlflags='$lddlflags'
-
-!END!
-my $summary_expanded;
-
-sub myconfig {
- return $summary_expanded if $summary_expanded;
- ($summary_expanded = $summary) =~ s{\$(\w+)}
- {
- my $c;
- if ($1 eq 'git_ancestor_line') {
- if ($Config::Config{git_ancestor}) {
- $c= "\n Ancestor: $Config::Config{git_ancestor}";
- } else {
- $c= "";
- }
- } else {
- $c = $Config::Config{$1};
- }
- defined($c) ? $c : 'undef'
- }ge;
- $summary_expanded;
-}
-
-local *_ = \my $a;
-$_ = <<'!END!';
-Author=''
-CONFIG='true'
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-PATCHLEVEL='24'
-PERL_API_REVISION='5'
-PERL_API_SUBVERSION='0'
-PERL_API_VERSION='24'
-PERL_CONFIG_SH='true'
-PERL_PATCHLEVEL=''
-PERL_REVISION='5'
-PERL_SUBVERSION='1'
-PERL_VERSION='24'
-RCSfile='$RCSfile'
-Revision='$Revision'
-SUBVERSION='1'
-Source=''
-State=''
-_a='.a'
-_exe='.exe'
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='5'
-api_subversion='0'
-api_version='24'
-api_versionstring='5.24.0'
-ar='ar'
-archlib='C:\STRAWB~1\perl\lib'
-archlibexp='C:\STRAWB~1\perl\lib'
-archname64=''
-archname='MSWin32-x64-multi-thread'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='C:\STRAWB~1\perl\bin'
-binexp='C:\STRAWB~1\perl\bin'
-bison=''
-bootstrap_charset='undef'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='gcc'
-cccdlflags=' '
-ccdlflags=' '
-ccflags=' -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields'
-ccflags_uselargefiles=''
-ccname='gcc'
-ccsymbols=''
-ccversion=''
-cf_by='strawberry-perl'
-cf_email='strawberry-perl@project'
-cf_time='Sun Mar 26 22:26:01 2017'
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='gcc -E'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-cppsymbols=''
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='undef'
-d_PRIFUldbl='undef'
-d_PRIGUldbl='undef'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_acosh='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_asinh='undef'
-d_atanh='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_backtrace='undef'
-d_bcmp='undef'
-d_bcopy='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_bzero='undef'
-d_c99_variadic_macros='undef'
-d_casti32='define'
-d_castneg='define'
-d_cbrt='undef'
-d_charvspr='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_const='define'
-d_copysign='undef'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dladdr='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_erf='undef'
-d_erfc='undef'
-d_eunice='undef'
-d_exp2='undef'
-d_expm1='undef'
-d_faststdio='define'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchown='undef'
-d_fcntl='undef'
-d_fcntl_can_lock='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fdclose='undef'
-d_fdim='undef'
-d_fds_bits='define'
-d_fegetround='undef'
-d_fgetpos='define'
-d_finite='undef'
-d_finitel='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fma='undef'
-d_fmax='undef'
-d_fmin='undef'
-d_fork='undef'
-d_fp_class='undef'
-d_fp_classify='undef'
-d_fp_classl='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpgetround='undef'
-d_fpos64_t='undef'
-d_freelocale='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_hypot='undef'
-d_ilogb='undef'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_ip_mreq='undef'
-d_ip_mreq_source='undef'
-d_ipv6_mreq='undef'
-d_ipv6_mreq_source='undef'
-d_isascii='define'
-d_isblank='undef'
-d_isfinite='undef'
-d_isfinitel='undef'
-d_isinf='undef'
-d_isinfl='undef'
-d_isless='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_isnormal='undef'
-d_j0='undef'
-d_j0l='undef'
-d_killpg='define'
-d_lc_monetary_2008='undef'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_ldexpl='undef'
-d_lgamma='undef'
-d_lgamma_r='undef'
-d_libm_lib_version='undef'
-d_link='define'
-d_llrint='undef'
-d_llrintl='undef'
-d_llround='undef'
-d_llroundl='undef'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='undef'
-d_log1p='undef'
-d_log2='undef'
-d_logb='undef'
-d_longdbl='define'
-d_longlong='define'
-d_lrint='undef'
-d_lrintl='undef'
-d_lround='undef'
-d_lroundl='undef'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmem='undef'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msg='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgctl='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='undef'
-d_nan='undef'
-d_ndbm='define'
-d_ndbm_h_uses_prototypes='undef'
-d_nearbyint='undef'
-d_newlocale='undef'
-d_nextafter='undef'
-d_nexttoward='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='undef'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='define'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_ptrdiff_t='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_regcomp='undef'
-d_remainder='undef'
-d_remquo='undef'
-d_rename='define'
-d_rewinddir='define'
-d_rint='undef'
-d_rmdir='define'
-d_round='undef'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='undef'
-d_scalbn='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_siginfo_si_addr='undef'
-d_siginfo_si_band='undef'
-d_siginfo_si_errno='undef'
-d_siginfo_si_pid='undef'
-d_siginfo_si_status='undef'
-d_siginfo_si_uid='undef'
-d_siginfo_si_value='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockaddr_in6='undef'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_stat='define'
-d_statblks='undef'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_static_inline='define'
-d_statvfs='undef'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='define'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_tgamma='undef'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_trunc='undef'
-d_truncate='undef'
-d_truncl='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='undef'
-d_uselocale='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='define'
-d_vendorbin='define'
-d_vendorlib='define'
-d_vendorscript='define'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='undef'
-d_waitpid='define'
-d_wcscmp='define'
-d_wcstombs='define'
-d_wcsxfrm='define'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-direntrytype='struct direct'
-dlext='xs.dll'
-dlltool='dlltool'
-dlsrc='dl_win32.xs'
-doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
-doublekind='3'
-doublemantbits='52'
-doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
-doublesize='8'
-drand01='Perl_drand48()'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call Hash/Util Hash/Util/FieldHash IO List/Util MIME/Base64 Math/BigInt/FastCalc Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize Win32 Win32API/File XS/APItest XS/Typemap arybase attributes mro re threads threads/shared'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='Archive/Tar Attribute/Handlers AutoLoader B B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Compress/Raw/Bzip2 Compress/Raw/Zlib Config/Perl/V Cwd Data/Dumper Devel/PPPort Devel/Peek Devel/SelfStubber Digest Digest/MD5 Digest/SHA Dumpvalue Encode Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS Fcntl File/DosGlob File/Fetch File/Find File/Glob File/Path File/Temp FileCache Filter/Simple Filter/Util/Call Getopt/Long HTTP/Tiny Hash/Util Hash/Util/FieldHash I18N/Collate I18N/LangTags IO IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP List/Util Locale/Codes Locale/Maketext Locale/Maketext/Simple MIME/Base64 Math/BigInt Math/BigInt/FastCalc Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NEXT Net/Ping Opcode POSIX Params/Check Parse/CPAN/Meta Perl/OSType PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage SDBM_File Safe Search/Dict SelfLoader Socket Storable Sys/Hostname Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/HiRes Time/Local Time/Piece Unicode/Collate Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap XSLoader arybase attributes autodie autouse base bignum constant encoding/warnings experimental if lib libnet mro parent perlfaq podlators re threads threads/shared version'
-extern_C='extern'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar=''
-full_csh=''
-full_sed=''
-gccansipedantic=''
-gccosandvers=''
-gccversion='6.3.0'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"ld"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_assert='define'
-i_bfd='undef'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='define'
-i_dbm='define'
-i_dirent='define'
-i_dlfcn='undef'
-i_execinfo='undef'
-i_fcntl='define'
-i_fenv='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='define'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='define'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_quadmath='undef'
-i_rpcsvcdbm='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stdbool='define'
-i_stddef='define'
-i_stdint='undef'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='define'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='define'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='varargs.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath='C:\STRAWB~1\c\include'
-inews=''
-initialinstalllocation=''
-installarchlib='C:\STRAWB~1\perl\lib'
-installbin='C:\STRAWB~1\perl\bin'
-installhtml1dir=''
-installhtml3dir=''
-installhtmldir=''
-installhtmlhelpdir=''
-installman1dir=''
-installman3dir=''
-installprefix='C:\STRAWB~1\perl'
-installprefixexp='C:\STRAWB~1\perl'
-installprivlib='C:\STRAWB~1\perl\lib'
-installscript='C:\STRAWB~1\perl\bin'
-installsitearch='C:\STRAWB~1\perl\site\lib'
-installsitebin='C:\STRAWB~1\perl\site\bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='C:\STRAWB~1\perl\site\lib'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript='C:\STRAWB~1\perl\site\bin'
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch='C:\STRAWB~1\perl\vendor\lib'
-installvendorbin='C:\STRAWB~1\perl\bin'
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib='C:\STRAWB~1\perl\vendor\lib'
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript='C:\STRAWB~1\perl\bin'
-intsize='4'
-issymlink=''
-ivdformat='"I64d"'
-ivsize='8'
-ivtype='long long'
-known_extensions='Amiga/ARexx Amiga/Exec Archive/Tar Attribute/Handlers AutoLoader B B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Compress/Raw/Bzip2 Compress/Raw/Zlib Config/Perl/V Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Devel/SelfStubber Digest Digest/MD5 Digest/SHA Dumpvalue Encode Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS Fcntl File/DosGlob File/Fetch File/Find File/Glob File/Path File/Temp FileCache Filter/Simple Filter/Util/Call GDBM_File Getopt/Long HTTP/Tiny Hash/Util Hash/Util/FieldHash I18N/Collate I18N/LangTags I18N/Langinfo IO IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 IPC/SysV JSON/PP List/Util Locale/Codes Locale/Maketext Locale/Maketext/Simple MIME/Base64 Math/BigInt Math/BigInt/FastCalc Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NDBM_File NEXT Net/Ping ODBM_File Opcode POSIX Params/Check Parse/CPAN/Meta Perl/OSType PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage SDBM_File Safe Search/Dict SelfLoader Socket Storable Sys/Hostname Sys/Syslog Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/HiRes Time/Local Time/Piece Unicode/Collate Unicode/Normalize VMS/DCLsym VMS/Filespec VMS/Stdio Win32 Win32API/File Win32CORE XS/APItest XS/Typemap XSLoader arybase attributes autodie autouse base bignum constant encoding/warnings experimental if lib libnet mro parent perlfaq podlators re threads threads/shared version'
-ksh=''
-ld='g++'
-lddlflags='-mdll -s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib"'
-ldflags='-s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib"'
-ldflags_uselargefiles=''
-ldlibpthname=''
-less='less'
-lib_ext='.a'
-libc=''
-libperl='libperl524.a'
-libpth='C:\STRAWB~1\c\lib C:\STRAWB~1\c\x86_64-w64-mingw32\lib C:\STRAWB~1\c\lib\gcc\x86_64-w64-mingw32\6.3.0'
-libs='-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32'
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-libswanted_uselargefiles='net socket inet nsl nm ndbm gdbm dbm db malloc dl ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='C:\STRAWB~1\c\include /usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblkind='3'
-longdblmantbits='64'
-longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
-longdblsize='16'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='8'
-lseektype='long long'
-mad='undef'
-mail=''
-mailx=''
-make='dmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir=''
-man1direxp=''
-man1ext='1'
-man3dir=''
-man3direxp=''
-man3ext='3'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='MSWin32'
-mydomain=''
-myhostname=''
-myuname='Win32 strawberry-perl 5.24.1.4 #1 Sun Mar 26 22:24:56 2017 x64'
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm='nm'
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Archive/Tar Attribute/Handlers AutoLoader B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Config/Perl/V Devel/SelfStubber Digest Dumpvalue Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS File/Fetch File/Find File/Path File/Temp FileCache Filter/Simple Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP Locale/Codes Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NEXT Net/Ping Params/Check Parse/CPAN/Meta Perl/OSType PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Memoize Tie/RefHash Time/Local XSLoader autodie autouse base bignum constant encoding/warnings experimental if lib libnet parent perlfaq podlators version'
-nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='53'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvmantbits='52'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-s -O2'
-orderlib='false'
-osname='MSWin32'
-osvers='10.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='24'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel=''
-perl_static_inline='static __inline__'
-perladmin=''
-perllibs='-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32'
-perlpath='C:\STRAWB~1\perl\bin\perl.exe'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='C:\STRAWB~1\perl'
-prefixexp='C:\STRAWB~1\perl'
-privlib='C:\STRAWB~1\perl\lib'
-privlibexp='C:\STRAWB~1\perl\lib'
-procselfexe=''
-prototype='define'
-ptrsize='8'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='Perl_drand48'
-random_r_proto='0'
-randseedtype='U32'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rm_try=''
-rmail=''
-run=''
-runnm='true'
-sGMTIME_max="2147483647"
-sGMTIME_min="0"
-sLOCALTIME_max="2147483647"
-sLOCALTIME_min="0"
-sPRIEUldbl='"LE"'
-sPRIFUldbl='"LF"'
-sPRIGUldbl='"LG"'
-sPRIXU64='"I64X"'
-sPRId64='"I64d"'
-sPRIeldbl='"Le"'
-sPRIfldbl='"Lf"'
-sPRIgldbl='"Lg"'
-sPRIi64='"I64i"'
-sPRIo64='"I64o"'
-sPRIu64='"I64u"'
-sPRIx64='"I64x"'
-sSCNfldbl='"Lf"'
-sched_yield=''
-scriptdir='C:\STRAWB~1\perl\bin'
-scriptdirexp='C:\STRAWB~1\perl\bin'
-sed='sed'
-seedfunc='Perl_drand48_init'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO HUP INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 21 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20'
-sig_num_init='0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
-sig_size='27'
-signal_t='void'
-sitearch='C:\STRAWB~1\perl\site\lib'
-sitearchexp='C:\STRAWB~1\perl\site\lib'
-sitebin='C:\STRAWB~1\perl\site\bin'
-sitebinexp='C:\STRAWB~1\perl\site\bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='C:\STRAWB~1\perl\site\lib'
-sitelib_stem=''
-sitelibexp='C:\STRAWB~1\perl\site\lib'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='C:\STRAWB~1\perl\site'
-siteprefixexp='C:\STRAWB~1\perl\site'
-sitescript='C:\STRAWB~1\perl\site\bin'
-sitescriptexp='C:\STRAWB~1\perl\site\bin'
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='long long'
-st_ino_sign='1'
-st_ino_size='8'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext='Win32CORE'
-stdchar='char'
-stdio_base='((fp)->_base)'
-stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
-stdio_cnt='((fp)->_cnt)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_ptr)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='1'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-targetsh='cmd /x /c'
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"ld"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='define'
-usecbacktrace='undef'
-usecrosscompile='undef'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='define'
-usekernprocpathname='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='define'
-usemymalloc='n'
-usenm='false'
-usensgetexecutablepath='undef'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usequadmath='undef'
-usereentrant='undef'
-userelocatableinc='undef'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='define'
-usevendorprefix='define'
-usevfork='false'
-usrinc='C:\STRAWB~1\c\include'
-uuname=''
-uvXUformat='"I64X"'
-uvoformat='"I64o"'
-uvsize='8'
-uvtype='unsigned long long'
-uvuformat='"I64u"'
-uvxformat='"I64x"'
-vaproto='undef'
-vendorarch='C:\STRAWB~1\perl\vendor\lib'
-vendorarchexp='C:\STRAWB~1\perl\vendor\lib'
-vendorbin='C:\STRAWB~1\perl\bin'
-vendorbinexp='C:\STRAWB~1\perl\bin'
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib='C:\STRAWB~1\perl\vendor\lib'
-vendorlib_stem=''
-vendorlibexp='C:\STRAWB~1\perl\vendor\lib'
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix='C:\STRAWB~1\perl\vendor'
-vendorprefixexp='C:\STRAWB~1\perl\vendor'
-vendorscript='C:\STRAWB~1\perl\bin'
-vendorscriptexp='C:\STRAWB~1\perl\bin'
-version='5.24.1'
-version_patchlevel_string='version 24 subversion 1'
-versiononly='undef'
-vi=''
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-!END!
-
-my $i = ord(8);
-foreach my $c (7,6,5,4,3,2,1) { $i <<= 8; $i |= ord($c); }
-our $byteorder = join('', unpack('aaaaaaaa', pack('Q', $i)));
-s/(byteorder=)(['"]).*?\2/$1$2$Config::byteorder$2/m;
-
-my $config_sh_len = length $_;
-
-our $Config_SH_expanded = "\n$_" . << 'EOVIRTUAL';
-ccflags_nolargefiles=' -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields'
-ldflags_nolargefiles='-s -L"C:\STRAWB~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib"'
-libs_nolargefiles='-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32'
-libswanted_nolargefiles=''
-EOVIRTUAL
-eval {
- # do not have hairy conniptions if this isnt available
- require 'Config_git.pl';
- $Config_SH_expanded .= $Config::Git_Data;
- 1;
-} or warn "Warning: failed to load Config_git.pl, something strange about this perl...\n";
-
-# Search for it in the big string
-sub fetch_string {
- my($self, $key) = @_;
-
- return undef unless my ($quote_type, $value) = $Config_SH_expanded =~ /\n$key=(['"])(.*?)\1\n/s;
-
- # If we had a double-quote, we'd better eval it so escape
- # sequences and such can be interpolated. Since the incoming
- # value is supposed to follow shell rules and not perl rules,
- # we escape any perl variable markers
-
- # Historically, since " 'support' was added in change 1409, the
- # interpolation was done before the undef. Stick to this arguably buggy
- # behaviour as we're refactoring.
- if ($quote_type eq '"') {
- $value =~ s/\$/\\\$/g;
- $value =~ s/\@/\\\@/g;
- eval "\$value = \"$value\"";
- }
-
- # So we can say "if $Config{'foo'}".
- $self->{$key} = $value eq 'undef' ? undef : $value; # cache it
-}
-
-my $prevpos = 0;
-
-sub FIRSTKEY {
- $prevpos = 0;
- substr($Config_SH_expanded, 1, index($Config_SH_expanded, '=') - 1 );
-}
-
-sub NEXTKEY {
- # Find out how the current key's quoted so we can skip to its end.
- my $quote = substr($Config_SH_expanded,
- index($Config_SH_expanded, "=", $prevpos)+1, 1);
- my $pos = index($Config_SH_expanded, qq($quote\n), $prevpos) + 2;
- my $len = index($Config_SH_expanded, "=", $pos) - $pos;
- $prevpos = $pos;
- $len > 0 ? substr($Config_SH_expanded, $pos, $len) : undef;
-}
-
-sub EXISTS {
- return 1 if exists($_[0]->{$_[1]});
-
- return(index($Config_SH_expanded, "\n$_[1]='") != -1
- or index($Config_SH_expanded, "\n$_[1]=\"") != -1
- );
-}
-
-sub STORE { die "\%Config::Config is read-only\n" }
-*DELETE = *CLEAR = \*STORE; # Typeglob aliasing uses less space
-
-sub config_sh {
- substr $Config_SH_expanded, 1, $config_sh_len;
-}
-
-sub config_re {
- my $re = shift;
- return map { chomp; $_ } grep eval{ /^(?:$re)=/ }, split /^/,
- $Config_SH_expanded;
-}
-
-sub config_vars {
- # implements -V:cfgvar option (see perlrun -V:)
- foreach (@_) {
- # find optional leading, trailing colons; and query-spec
- my ($notag,$qry,$lncont) = m/^(:)?(.*?)(:)?$/; # flags fore and aft,
- # map colon-flags to print decorations
- my $prfx = $notag ? '': "$qry="; # tag-prefix for print
- my $lnend = $lncont ? ' ' : ";\n"; # line ending for print
-
- # all config-vars are by definition \w only, any \W means regex
- if ($qry =~ /\W/) {
- my @matches = config_re($qry);
- print map "$_$lnend", @matches ? @matches : "$qry: not found" if !$notag;
- print map { s/\w+=//; "$_$lnend" } @matches ? @matches : "$qry: not found" if $notag;
- } else {
- my $v = (exists $Config::Config{$qry}) ? $Config::Config{$qry}
- : 'UNKNOWN';
- $v = 'undef' unless defined $v;
- print "${prfx}'${v}'$lnend";
- }
- }
-}
-
-# Called by the real AUTOLOAD
-sub launcher {
- undef &AUTOLOAD;
- goto \&$Config::AUTOLOAD;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Crypt/CBC.pm b/software/Slic3r-1.3.0.64bit/lib/Crypt/CBC.pm
deleted file mode 100644
index d59f7cd0..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Crypt/CBC.pm
+++ /dev/null
@@ -1,590 +0,0 @@
-#line 1 "Crypt/CBC.pm"
-package Crypt::CBC;
-
-use Digest::MD5 'md5';
-use Carp;
-use strict;
-use bytes;
-use vars qw($VERSION);
-$VERSION = '2.33';
-
-use constant RANDOM_DEVICE => '/dev/urandom';
-
-sub new {
- my $class = shift;
-
- my $options = {};
-
- # hashref arguments
- if (ref $_[0] eq 'HASH') {
- $options = shift;
- }
-
- # CGI style arguments
- elsif ($_[0] =~ /^-[a-zA-Z_]{1,20}$/) {
- my %tmp = @_;
- while ( my($key,$value) = each %tmp) {
- $key =~ s/^-//;
- $options->{lc $key} = $value;
- }
- }
-
- else {
- $options->{key} = shift;
- $options->{cipher} = shift;
- }
-
- my $cipher_object_provided = $options->{cipher} && ref $options->{cipher};
-
- # "key" is a misnomer here, because it is actually usually a passphrase that is used
- # to derive the true key
- my $pass = $options->{key};
-
- if ($cipher_object_provided) {
- carp "Both a key and a pre-initialized Crypt::* object were passed. The key will be ignored"
- if defined $pass;
- $pass ||= '';
- }
- elsif (!defined $pass) {
- croak "Please provide an encryption/decryption passphrase or key using -key"
- }
-
- # header mode
- my %valid_modes = map {$_=>1} qw(none salt randomiv);
- my $header_mode = $options->{header};
- $header_mode ||= 'none' if exists $options->{prepend_iv} && !$options->{prepend_iv};
- $header_mode ||= 'none' if exists $options->{add_header} && !$options->{add_header};
- $header_mode ||= 'salt'; # default
- croak "Invalid -header mode '$header_mode'" unless $valid_modes{$header_mode};
-
- croak "The -salt argument is incompatible with a -header mode of $header_mode"
- if exists $options->{salt} && $header_mode ne 'salt';
-
- my $cipher = $options->{cipher};
- $cipher = 'Crypt::DES' unless $cipher;
- my $cipherclass = ref $cipher || $cipher;
-
- unless (ref $cipher) { # munge the class name if no object passed
- $cipher = $cipher=~/^Crypt::/ ? $cipher : "Crypt::$cipher";
- $cipher->can('encrypt') or eval "require $cipher; 1" or croak "Couldn't load $cipher: $@";
- # some crypt modules use the class Crypt::, and others don't
- $cipher =~ s/^Crypt::// unless $cipher->can('keysize');
- }
-
- # allow user to override these values
- my $ks = $options->{keysize};
- my $bs = $options->{blocksize};
-
- # otherwise we get the values from the cipher
- $ks ||= eval {$cipher->keysize};
- $bs ||= eval {$cipher->blocksize};
-
- # Some of the cipher modules are busted and don't report the
- # keysize (well, Crypt::Blowfish in any case). If we detect
- # this, and find the blowfish module in use, then assume 56.
- # Otherwise assume the least common denominator of 8.
- $ks ||= $cipherclass =~ /blowfish/i ? 56 : 8;
- $bs ||= $ks;
-
- my $pcbc = $options->{'pcbc'};
-
- # Default behavior is to treat -key as a passphrase.
- # But if the literal_key option is true, then use key as is
- croak "The options -literal_key and -regenerate_key are incompatible with each other"
- if exists $options->{literal_key} && exists $options->{regenerate_key};
- my $key;
- $key = $pass if $options->{literal_key};
- $key = $pass if exists $options->{regenerate_key} && !$options->{regenerate_key};
-
- # Get the salt.
- my $salt = $options->{salt};
- my $random_salt = 1 unless defined $salt && $salt ne '1';
- croak "Argument to -salt must be exactly 8 bytes long" if defined $salt && length $salt != 8 && $salt ne '1';
-
- # note: iv will be autogenerated by start() if not specified in options
- my $iv = $options->{iv};
- my $random_iv = 1 unless defined $iv;
- croak "Initialization vector must be exactly $bs bytes long when using the $cipherclass cipher" if defined $iv and length($iv) != $bs;
-
- my $literal_key = $options->{literal_key} || (exists $options->{regenerate_key} && !$options->{regenerate_key});
- my $legacy_hack = $options->{insecure_legacy_decrypt};
- my $padding = $options->{padding} || 'standard';
-
- if ($padding && ref($padding) eq 'CODE') {
- # check to see that this code does its padding correctly
- for my $i (1..$bs-1) {
- my $rbs = length($padding->(" "x$i,$bs,'e'));
- croak "padding method callback does not behave properly: expected $bs bytes back, got $rbs bytes back."
- unless ($rbs == $bs);
- }
- } else {
- $padding = $padding eq 'none' ? \&_no_padding
- :$padding eq 'null' ? \&_null_padding
- :$padding eq 'space' ? \&_space_padding
- :$padding eq 'oneandzeroes' ? \&_oneandzeroes_padding
- :$padding eq 'rijndael_compat'? \&_rijndael_compat
- :$padding eq 'standard' ? \&_standard_padding
- :croak "'$padding' padding not supported. See perldoc Crypt::CBC for instructions on creating your own.";
- }
-
- # CONSISTENCY CHECKS
- # HEADER consistency
- if ($header_mode eq 'salt') {
- croak "Cannot use salt-based key generation if literal key is specified"
- if $options->{literal_key};
- croak "Cannot use salt-based IV generation if literal IV is specified"
- if exists $options->{iv};
- }
- elsif ($header_mode eq 'randomiv') {
- croak "Cannot encrypt using a non-8 byte blocksize cipher when using randomiv header mode"
- unless $bs == 8 || $legacy_hack;
- }
- elsif ($header_mode eq 'none') {
- croak "You must provide an initialization vector using -iv when using -header=>'none'"
- unless exists $options->{iv};
- }
-
- # KEYSIZE consistency
- if (defined $key && length($key) != $ks) {
- croak "If specified by -literal_key, then the key length must be equal to the chosen cipher's key length of $ks bytes";
- }
-
- # IV consistency
- if (defined $iv && length($iv) != $bs) {
- croak "If specified by -iv, then the initialization vector length must be equal to the chosen cipher's blocksize of $bs bytes";
- }
-
-
- return bless {'cipher' => $cipher,
- 'passphrase' => $pass,
- 'key' => $key,
- 'iv' => $iv,
- 'salt' => $salt,
- 'padding' => $padding,
- 'blocksize' => $bs,
- 'keysize' => $ks,
- 'header_mode' => $header_mode,
- 'legacy_hack' => $legacy_hack,
- 'literal_key' => $literal_key,
- 'pcbc' => $pcbc,
- 'make_random_salt' => $random_salt,
- 'make_random_iv' => $random_iv,
- },$class;
-}
-
-sub encrypt (\$$) {
- my ($self,$data) = @_;
- $self->start('encrypting');
- my $result = $self->crypt($data);
- $result .= $self->finish;
- $result;
-}
-
-sub decrypt (\$$){
- my ($self,$data) = @_;
- $self->start('decrypting');
- my $result = $self->crypt($data);
- $result .= $self->finish;
- $result;
-}
-
-sub encrypt_hex (\$$) {
- my ($self,$data) = @_;
- return join('',unpack 'H*',$self->encrypt($data));
-}
-
-sub decrypt_hex (\$$) {
- my ($self,$data) = @_;
- return $self->decrypt(pack'H*',$data);
-}
-
-# call to start a series of encryption/decryption operations
-sub start (\$$) {
- my $self = shift;
- my $operation = shift;
- croak "Specify ncryption or ecryption" unless $operation=~/^[ed]/i;
-
- $self->{'buffer'} = '';
- $self->{'decrypt'} = $operation=~/^d/i;
-}
-
-# call to encrypt/decrypt a bit of data
-sub crypt (\$$){
- my $self = shift;
- my $data = shift;
-
- my $result;
-
- croak "crypt() called without a preceding start()"
- unless exists $self->{'buffer'};
-
- my $d = $self->{'decrypt'};
-
- unless ($self->{civ}) { # block cipher has not yet been initialized
- $result = $self->_generate_iv_and_cipher_from_datastream(\$data) if $d;
- $result = $self->_generate_iv_and_cipher_from_options() unless $d;
- }
-
- my $iv = $self->{'civ'};
- $self->{'buffer'} .= $data;
-
- my $bs = $self->{'blocksize'};
-
- croak "When using no padding, plaintext size must be a multiple of $bs"
- if $self->{'padding'} eq \&_no_padding
- and length($data) % $bs;
-
- croak "When using rijndael_compat padding, plaintext size must be a multiple of $bs"
- if $self->{'padding'} eq \&_rijndael_compat
- and length($data) % $bs;
-
- return $result unless (length($self->{'buffer'}) >= $bs);
-
- my @blocks = unpack("a$bs "x(int(length($self->{'buffer'})/$bs)) . "a*", $self->{'buffer'});
- $self->{'buffer'} = '';
-
- if ($d) { # when decrypting, always leave a free block at the end
- $self->{'buffer'} = length($blocks[-1]) < $bs ? join '',splice(@blocks,-2) : pop(@blocks);
- } else {
- $self->{'buffer'} = pop @blocks if length($blocks[-1]) < $bs; # what's left over
- }
-
- foreach my $block (@blocks) {
- if ($d) { # decrypting
- $result .= $iv = $iv ^ $self->{'crypt'}->decrypt($block);
- $iv = $block unless $self->{pcbc};
- } else { # encrypting
- $result .= $iv = $self->{'crypt'}->encrypt($iv ^ $block);
- }
- $iv = $iv ^ $block if $self->{pcbc};
- }
- $self->{'civ'} = $iv; # remember the iv
- return $result;
-}
-
-# this is called at the end to flush whatever's left
-sub finish (\$) {
- my $self = shift;
- my $bs = $self->{'blocksize'};
- my $block = defined $self->{'buffer'} ? $self->{'buffer'} : '';
-
- $self->{civ} ||= '';
-
- my $result;
- if ($self->{'decrypt'}) { #decrypting
- $block = length $block ? pack("a$bs",$block) : ''; # pad and truncate to block size
-
- if (length($block)) {
- $result = $self->{'civ'} ^ $self->{'crypt'}->decrypt($block);
- $result = $self->{'padding'}->($result, $bs, 'd');
- } else {
- $result = '';
- }
-
- } else { # encrypting
- $block = $self->{'padding'}->($block,$bs,'e') || '';
- $result = length $block ? $self->{'crypt'}->encrypt($self->{'civ'} ^ $block) : '';
- }
- delete $self->{'civ'};
- delete $self->{'buffer'};
- return $result;
-}
-
-# this subroutine will generate the actual {en,de}cryption key, the iv
-# and the block cipher object. This is called when reading from a datastream
-# and so it uses previous values of salt or iv if they are encoded in datastream
-# header
-sub _generate_iv_and_cipher_from_datastream {
- my $self = shift;
- my $input_stream = shift;
- my $bs = $self->blocksize;
-
- # use our header mode to figure out what to do with the data stream
- my $header_mode = $self->header_mode;
-
- if ($header_mode eq 'none') {
- croak "You must specify a $bs byte initialization vector by passing the -iv option to new() when using -header_mode=>'none'"
- unless exists $self->{iv};
- $self->{civ} = $self->{iv}; # current IV equals saved IV
- $self->{key} ||= $self->_key_from_key($self->{passphrase});
- }
-
- elsif ($header_mode eq 'salt') {
- my ($salt) = $$input_stream =~ /^Salted__(.{8})/s;
- croak "Ciphertext does not begin with a valid header for 'salt' header mode" unless defined $salt;
- $self->{salt} = $salt; # new salt
- substr($$input_stream,0,16) = '';
- my ($key,$iv) = $self->_salted_key_and_iv($self->{passphrase},$salt);
- $self->{iv} = $self->{civ} = $iv;
- $self->{key} = $key;
- }
-
- elsif ($header_mode eq 'randomiv') {
- my ($iv) = $$input_stream =~ /^RandomIV(.{8})/s;
- croak "Ciphertext does not begin with a valid header for 'randomiv' header mode" unless defined $iv;
- croak "randomiv header mode cannot be used securely when decrypting with a >8 byte block cipher.\nUse the -insecure_legacy_decrypt flag if you are sure you want to do this" unless $self->blocksize == 8 || $self->legacy_hack;
- $self->{iv} = $self->{civ} = $iv;
- $self->{key} = $self->_key_from_key($self->{passphrase});
- undef $self->{salt}; # paranoia
- substr($$input_stream,0,16) = ''; # truncate
- }
-
- else {
- croak "Invalid header mode '$header_mode'";
- }
-
- # we should have the key and iv now, or we are dead in the water
- croak "Cipher stream did not contain IV or salt, and you did not specify these values in new()"
- unless $self->{key} && $self->{civ};
-
- # now we can generate the crypt object itself
- $self->{crypt} = ref $self->{cipher} ? $self->{cipher}
- : $self->{cipher}->new($self->{key})
- or croak "Could not create $self->{cipher} object: $@";
- return '';
-}
-
-sub _generate_iv_and_cipher_from_options {
- my $self = shift;
- my $blocksize = $self->blocksize;
-
- my $result = '';
-
- my $header_mode = $self->header_mode;
- if ($header_mode eq 'none') {
- croak "You must specify a $blocksize byte initialization vector by passing the -iv option to new() when using -header_mode=>'none'"
- unless exists $self->{iv};
- $self->{civ} = $self->{iv};
- $self->{key} ||= $self->_key_from_key($self->{passphrase});
- }
-
- elsif ($header_mode eq 'salt') {
- $self->{salt} = $self->_get_random_bytes(8) if $self->{make_random_salt};
- defined (my $salt = $self->{salt}) or croak "No header_mode of 'salt' specified, but no salt value provided"; # shouldn't happen
- length($salt) == 8 or croak "Salt must be exactly 8 bytes long";
- my ($key,$iv) = $self->_salted_key_and_iv($self->{passphrase},$salt);
- $self->{key} = $key;
- $self->{civ} = $self->{iv} = $iv;
- $result = "Salted__${salt}";
- }
-
- elsif ($header_mode eq 'randomiv') {
- croak "randomiv header mode cannot be used when encrypting with a >8 byte block cipher. There is no option to allow this"
- unless $blocksize == 8;
- $self->{key} ||= $self->_key_from_key($self->{passphrase});
- $self->{iv} = $self->_get_random_bytes(8) if $self->{make_random_iv};
- length($self->{iv}) == 8 or croak "IV must be exactly 8 bytes long when used with header mode of 'randomiv'";
- $self->{civ} = $self->{iv};
- $result = "RandomIV$self->{iv}";
- }
-
- croak "key and/or iv are missing" unless defined $self->{key} && defined $self->{civ};
-
- $self->_taintcheck($self->{key});
- $self->{crypt} = ref $self->{cipher} ? $self->{cipher}
- : $self->{cipher}->new($self->{key})
- or croak "Could not create $self->{cipher} object: $@";
- return $result;
-}
-
-sub _taintcheck {
- my $self = shift;
- my $key = shift;
- return unless ${^TAINT};
-
- my $has_scalar_util = eval "require Scalar::Util; 1";
- my $tainted;
-
-
- if ($has_scalar_util) {
- $tainted = Scalar::Util::tainted($key);
- } else {
- local($@, $SIG{__DIE__}, $SIG{__WARN__});
- local $^W = 0;
- eval { kill 0 * $key };
- $tainted = $@ =~ /^Insecure/;
- }
-
- croak "Taint checks are turned on and your key is tainted. Please untaint the key and try again"
- if $tainted;
-}
-
-sub _key_from_key {
- my $self = shift;
- my $pass = shift;
- my $ks = $self->{keysize};
-
- return $pass if $self->{literal_key};
-
- my $material = md5($pass);
- while (length($material) < $ks) {
- $material .= md5($material);
- }
- return substr($material,0,$ks);
-}
-
-sub _salted_key_and_iv {
- my $self = shift;
- my ($pass,$salt) = @_;
-
- croak "Salt must be 8 bytes long" unless length $salt == 8;
-
- my $key_len = $self->{keysize};
- my $iv_len = $self->{blocksize};
-
- my $desired_len = $key_len+$iv_len;
-
- my $data = '';
- my $d = '';
-
- while (length $data < $desired_len) {
- $d = md5($d . $pass . $salt);
- $data .= $d;
- }
- return (substr($data,0,$key_len),substr($data,$key_len,$iv_len));
-}
-
-sub random_bytes {
- my $self = shift;
- my $bytes = shift or croak "usage: random_bytes(\$byte_length)";
- $self->_get_random_bytes($bytes);
-}
-
-sub _get_random_bytes {
- my $self = shift;
- my $length = shift;
- my $result;
-
- if (-r RANDOM_DEVICE && open(F,RANDOM_DEVICE)) {
- read(F,$result,$length);
- close F;
- } else {
- $result = pack("C*",map {rand(256)} 1..$length);
- }
- # Clear taint and check length
- $result =~ /^(.+)$/s;
- length($1) == $length or croak "Invalid length while gathering $length random bytes";
- return $1;
-}
-
-sub _standard_padding ($$$) {
- my ($b,$bs,$decrypt) = @_;
- $b = length $b ? $b : '';
- if ($decrypt eq 'd') {
- my $pad_length = unpack("C",substr($b,-1));
-
- # sanity check for implementations that don't pad correctly
- return $b unless $pad_length >= 0 && $pad_length <= $bs;
- my @pad_chars = unpack("C*",substr($b,-$pad_length));
- return $b if grep {$pad_length != $_} @pad_chars;
-
- return substr($b,0,$bs-$pad_length);
- }
- my $pad = $bs - length($b) % $bs;
- return $b . pack("C*",($pad)x$pad);
-}
-
-sub _space_padding ($$$) {
- my ($b,$bs,$decrypt) = @_;
- return unless length $b;
- $b = length $b ? $b : '';
- if ($decrypt eq 'd') {
- $b=~ s/ *\z//s;
- return $b;
- }
- return $b . pack("C*", (32) x ($bs - length($b) % $bs));
-}
-
-sub _no_padding ($$$) {
- my ($b,$bs,$decrypt) = @_;
- return $b;
-}
-
-sub _null_padding ($$$) {
- my ($b,$bs,$decrypt) = @_;
- return unless length $b;
- $b = length $b ? $b : '';
- if ($decrypt eq 'd') {
- $b=~ s/\0*\z//s;
- return $b;
- }
- return $b . pack("C*", (0) x ($bs - length($b) % $bs));
-}
-
-sub _oneandzeroes_padding ($$$) {
- my ($b,$bs,$decrypt) = @_;
- $b = length $b ? $b : '';
- if ($decrypt eq 'd') {
- $b=~ s/\x80\0*\z//s;
- return $b;
- }
- return $b . pack("C*", 128, (0) x ($bs - length($b) % $bs - 1) );
-}
-
-sub _rijndael_compat ($$$) {
- my ($b,$bs,$decrypt) = @_;
- return unless length $b;
- if ($decrypt eq 'd') {
- $b=~ s/\x80\0*\z//s;
- return $b;
- }
- return $b . pack("C*", 128, (0) x ($bs - length($b) % $bs - 1) );
-}
-
-sub get_initialization_vector (\$) {
- my $self = shift;
- $self->iv();
-}
-
-sub set_initialization_vector (\$$) {
- my $self = shift;
- my $iv = shift;
- my $bs = $self->blocksize;
- croak "Initialization vector must be $bs bytes in length" unless length($iv) == $bs;
- $self->iv($iv);
-}
-
-sub salt {
- my $self = shift;
- my $d = $self->{salt};
- $self->{salt} = shift if @_;
- $d;
-}
-
-sub iv {
- my $self = shift;
- my $d = $self->{iv};
- $self->{iv} = shift if @_;
- $d;
-}
-
-sub key {
- my $self = shift;
- my $d = $self->{key};
- $self->{key} = shift if @_;
- $d;
-}
-
-sub passphrase {
- my $self = shift;
- my $d = $self->{passphrase};
- if (@_) {
- undef $self->{key};
- undef $self->{iv};
- $self->{passphrase} = shift;
- }
- $d;
-}
-
-sub cipher { shift->{cipher} }
-sub padding { shift->{padding} }
-sub keysize { shift->{keysize} }
-sub blocksize { shift->{blocksize} }
-sub pcbc { shift->{pcbc} }
-sub header_mode {shift->{header_mode} }
-sub legacy_hack { shift->{legacy_hack} }
-
-1;
-__END__
-
-#line 1065
diff --git a/software/Slic3r-1.3.0.64bit/lib/Cwd.pm b/software/Slic3r-1.3.0.64bit/lib/Cwd.pm
deleted file mode 100644
index e228f510..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Cwd.pm
+++ /dev/null
@@ -1,708 +0,0 @@
-#line 1 "Cwd.pm"
-package Cwd;
-use strict;
-use Exporter;
-use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
-
-$VERSION = '3.63_01';
-my $xs_version = $VERSION;
-$VERSION =~ tr/_//d;
-
-@ISA = qw/ Exporter /;
-@EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
-push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32';
-@EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
-
-# sys_cwd may keep the builtin command
-
-# All the functionality of this module may provided by builtins,
-# there is no sense to process the rest of the file.
-# The best choice may be to have this in BEGIN, but how to return from BEGIN?
-
-if ($^O eq 'os2') {
- local $^W = 0;
-
- *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd;
- *getcwd = \&cwd;
- *fastgetcwd = \&cwd;
- *fastcwd = \&cwd;
-
- *fast_abs_path = \&sys_abspath if defined &sys_abspath;
- *abs_path = \&fast_abs_path;
- *realpath = \&fast_abs_path;
- *fast_realpath = \&fast_abs_path;
-
- return 1;
-}
-
-# Need to look up the feature settings on VMS. The preferred way is to use the
-# VMS::Feature module, but that may not be available to dual life modules.
-
-my $use_vms_feature;
-BEGIN {
- if ($^O eq 'VMS') {
- if (eval { local $SIG{__DIE__};
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- require VMS::Feature; }) {
- $use_vms_feature = 1;
- }
- }
-}
-
-# Need to look up the UNIX report mode. This may become a dynamic mode
-# in the future.
-sub _vms_unix_rpt {
- my $unix_rpt;
- if ($use_vms_feature) {
- $unix_rpt = VMS::Feature::current("filename_unix_report");
- } else {
- my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || '';
- $unix_rpt = $env_unix_rpt =~ /^[ET1]/i;
- }
- return $unix_rpt;
-}
-
-# Need to look up the EFS character set mode. This may become a dynamic
-# mode in the future.
-sub _vms_efs {
- my $efs;
- if ($use_vms_feature) {
- $efs = VMS::Feature::current("efs_charset");
- } else {
- my $env_efs = $ENV{'DECC$EFS_CHARSET'} || '';
- $efs = $env_efs =~ /^[ET1]/i;
- }
- return $efs;
-}
-
-
-# If loading the XS stuff doesn't work, we can fall back to pure perl
-if(! defined &getcwd && defined &DynaLoader::boot_DynaLoader) {
- eval {#eval is questionable since we are handling potential errors like
- #"Cwd object version 3.48 does not match bootstrap parameter 3.50
- #at lib/DynaLoader.pm line 216." by having this eval
- if ( $] >= 5.006 ) {
- require XSLoader;
- XSLoader::load( __PACKAGE__, $xs_version);
- } else {
- require DynaLoader;
- push @ISA, 'DynaLoader';
- __PACKAGE__->bootstrap( $xs_version );
- }
- };
-}
-
-# Big nasty table of function aliases
-my %METHOD_MAP =
- (
- VMS =>
- {
- cwd => '_vms_cwd',
- getcwd => '_vms_cwd',
- fastcwd => '_vms_cwd',
- fastgetcwd => '_vms_cwd',
- abs_path => '_vms_abs_path',
- fast_abs_path => '_vms_abs_path',
- },
-
- MSWin32 =>
- {
- # We assume that &_NT_cwd is defined as an XSUB or in the core.
- cwd => '_NT_cwd',
- getcwd => '_NT_cwd',
- fastcwd => '_NT_cwd',
- fastgetcwd => '_NT_cwd',
- abs_path => 'fast_abs_path',
- realpath => 'fast_abs_path',
- },
-
- dos =>
- {
- cwd => '_dos_cwd',
- getcwd => '_dos_cwd',
- fastgetcwd => '_dos_cwd',
- fastcwd => '_dos_cwd',
- abs_path => 'fast_abs_path',
- },
-
- # QNX4. QNX6 has a $os of 'nto'.
- qnx =>
- {
- cwd => '_qnx_cwd',
- getcwd => '_qnx_cwd',
- fastgetcwd => '_qnx_cwd',
- fastcwd => '_qnx_cwd',
- abs_path => '_qnx_abs_path',
- fast_abs_path => '_qnx_abs_path',
- },
-
- cygwin =>
- {
- getcwd => 'cwd',
- fastgetcwd => 'cwd',
- fastcwd => 'cwd',
- abs_path => 'fast_abs_path',
- realpath => 'fast_abs_path',
- },
-
- epoc =>
- {
- cwd => '_epoc_cwd',
- getcwd => '_epoc_cwd',
- fastgetcwd => '_epoc_cwd',
- fastcwd => '_epoc_cwd',
- abs_path => 'fast_abs_path',
- },
-
- MacOS =>
- {
- getcwd => 'cwd',
- fastgetcwd => 'cwd',
- fastcwd => 'cwd',
- abs_path => 'fast_abs_path',
- },
-
- amigaos =>
- {
- getcwd => '_backtick_pwd',
- fastgetcwd => '_backtick_pwd',
- fastcwd => '_backtick_pwd',
- abs_path => 'fast_abs_path',
- }
- );
-
-$METHOD_MAP{NT} = $METHOD_MAP{MSWin32};
-
-
-# Find the pwd command in the expected locations. We assume these
-# are safe. This prevents _backtick_pwd() consulting $ENV{PATH}
-# so everything works under taint mode.
-my $pwd_cmd;
-if($^O ne 'MSWin32') {
- foreach my $try ('/bin/pwd',
- '/usr/bin/pwd',
- '/QOpenSys/bin/pwd', # OS/400 PASE.
- ) {
- if( -x $try ) {
- $pwd_cmd = $try;
- last;
- }
- }
-}
-
-# Android has a built-in pwd. Using $pwd_cmd will DTRT if
-# this perl was compiled with -Dd_useshellcmds, which is the
-# default for Android, but the block below is needed for the
-# miniperl running on the host when cross-compiling, and
-# potentially for native builds with -Ud_useshellcmds.
-if ($^O =~ /android/) {
- # If targetsh is executable, then we're either a full
- # perl, or a miniperl for a native build.
- if (-x $Config::Config{targetsh}) {
- $pwd_cmd = "$Config::Config{targetsh} -c pwd"
- }
- else {
- my $sh = $Config::Config{sh} || (-x '/system/bin/sh' ? '/system/bin/sh' : 'sh');
- $pwd_cmd = "$sh -c pwd"
- }
-}
-
-my $found_pwd_cmd = defined($pwd_cmd);
-unless ($pwd_cmd) {
- # Isn't this wrong? _backtick_pwd() will fail if someone has
- # pwd in their path but it is not /bin/pwd or /usr/bin/pwd?
- # See [perl #16774]. --jhi
- $pwd_cmd = 'pwd';
-}
-
-# Lazy-load Carp
-sub _carp { require Carp; Carp::carp(@_) }
-sub _croak { require Carp; Carp::croak(@_) }
-
-# The 'natural and safe form' for UNIX (pwd may be setuid root)
-sub _backtick_pwd {
-
- # Localize %ENV entries in a way that won't create new hash keys.
- # Under AmigaOS we don't want to localize as it stops perl from
- # finding 'sh' in the PATH.
- my @localize = grep exists $ENV{$_}, qw(PATH IFS CDPATH ENV BASH_ENV) if $^O ne "amigaos";
- local @ENV{@localize} if @localize;
-
- my $cwd = `$pwd_cmd`;
- # Belt-and-suspenders in case someone said "undef $/".
- local $/ = "\n";
- # `pwd` may fail e.g. if the disk is full
- chomp($cwd) if defined $cwd;
- $cwd;
-}
-
-# Since some ports may predefine cwd internally (e.g., NT)
-# we take care not to override an existing definition for cwd().
-
-unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
- # The pwd command is not available in some chroot(2)'ed environments
- my $sep = $Config::Config{path_sep} || ':';
- my $os = $^O; # Protect $^O from tainting
-
-
- # Try again to find a pwd, this time searching the whole PATH.
- if (defined $ENV{PATH} and $os ne 'MSWin32') { # no pwd on Windows
- my @candidates = split($sep, $ENV{PATH});
- while (!$found_pwd_cmd and @candidates) {
- my $candidate = shift @candidates;
- $found_pwd_cmd = 1 if -x "$candidate/pwd";
- }
- }
-
- # MacOS has some special magic to make `pwd` work.
- if( $os eq 'MacOS' || $found_pwd_cmd )
- {
- *cwd = \&_backtick_pwd;
- }
- else {
- *cwd = \&getcwd;
- }
-}
-
-if ($^O eq 'cygwin') {
- # We need to make sure cwd() is called with no args, because it's
- # got an arg-less prototype and will die if args are present.
- local $^W = 0;
- my $orig_cwd = \&cwd;
- *cwd = sub { &$orig_cwd() }
-}
-
-
-# set a reasonable (and very safe) default for fastgetcwd, in case it
-# isn't redefined later (20001212 rspier)
-*fastgetcwd = \&cwd;
-
-# A non-XS version of getcwd() - also used to bootstrap the perl build
-# process, when miniperl is running and no XS loading happens.
-sub _perl_getcwd
-{
- abs_path('.');
-}
-
-# By John Bazik
-#
-# Usage: $cwd = &fastcwd;
-#
-# This is a faster version of getcwd. It's also more dangerous because
-# you might chdir out of a directory that you can't chdir back into.
-
-sub fastcwd_ {
- my($odev, $oino, $cdev, $cino, $tdev, $tino);
- my(@path, $path);
- local(*DIR);
-
- my($orig_cdev, $orig_cino) = stat('.');
- ($cdev, $cino) = ($orig_cdev, $orig_cino);
- for (;;) {
- my $direntry;
- ($odev, $oino) = ($cdev, $cino);
- CORE::chdir('..') || return undef;
- ($cdev, $cino) = stat('.');
- last if $odev == $cdev && $oino == $cino;
- opendir(DIR, '.') || return undef;
- for (;;) {
- $direntry = readdir(DIR);
- last unless defined $direntry;
- next if $direntry eq '.';
- next if $direntry eq '..';
-
- ($tdev, $tino) = lstat($direntry);
- last unless $tdev != $odev || $tino != $oino;
- }
- closedir(DIR);
- return undef unless defined $direntry; # should never happen
- unshift(@path, $direntry);
- }
- $path = '/' . join('/', @path);
- if ($^O eq 'apollo') { $path = "/".$path; }
- # At this point $path may be tainted (if tainting) and chdir would fail.
- # Untaint it then check that we landed where we started.
- $path =~ /^(.*)\z/s # untaint
- && CORE::chdir($1) or return undef;
- ($cdev, $cino) = stat('.');
- die "Unstable directory path, current directory changed unexpectedly"
- if $cdev != $orig_cdev || $cino != $orig_cino;
- $path;
-}
-if (not defined &fastcwd) { *fastcwd = \&fastcwd_ }
-
-
-# Keeps track of current working directory in PWD environment var
-# Usage:
-# use Cwd 'chdir';
-# chdir $newdir;
-
-my $chdir_init = 0;
-
-sub chdir_init {
- if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') {
- my($dd,$di) = stat('.');
- my($pd,$pi) = stat($ENV{'PWD'});
- if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
- $ENV{'PWD'} = cwd();
- }
- }
- else {
- my $wd = cwd();
- $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32';
- $ENV{'PWD'} = $wd;
- }
- # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar)
- if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) {
- my($pd,$pi) = stat($2);
- my($dd,$di) = stat($1);
- if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
- $ENV{'PWD'}="$2$3";
- }
- }
- $chdir_init = 1;
-}
-
-sub chdir {
- my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir)
- if ($^O eq "cygwin") {
- $newdir =~ s|\A///+|//|;
- $newdir =~ s|(?<=[^/])//+|/|g;
- }
- elsif ($^O ne 'MSWin32') {
- $newdir =~ s|///*|/|g;
- }
- chdir_init() unless $chdir_init;
- my $newpwd;
- if ($^O eq 'MSWin32') {
- # get the full path name *before* the chdir()
- $newpwd = Win32::GetFullPathName($newdir);
- }
-
- return 0 unless CORE::chdir $newdir;
-
- if ($^O eq 'VMS') {
- return $ENV{'PWD'} = $ENV{'DEFAULT'}
- }
- elsif ($^O eq 'MacOS') {
- return $ENV{'PWD'} = cwd();
- }
- elsif ($^O eq 'MSWin32') {
- $ENV{'PWD'} = $newpwd;
- return 1;
- }
-
- if (ref $newdir eq 'GLOB') { # in case a file/dir handle is passed in
- $ENV{'PWD'} = cwd();
- } elsif ($newdir =~ m#^/#s) {
- $ENV{'PWD'} = $newdir;
- } else {
- my @curdir = split(m#/#,$ENV{'PWD'});
- @curdir = ('') unless @curdir;
- my $component;
- foreach $component (split(m#/#, $newdir)) {
- next if $component eq '.';
- pop(@curdir),next if $component eq '..';
- push(@curdir,$component);
- }
- $ENV{'PWD'} = join('/',@curdir) || '/';
- }
- 1;
-}
-
-
-sub _perl_abs_path
-{
- my $start = @_ ? shift : '.';
- my($dotdots, $cwd, @pst, @cst, $dir, @tst);
-
- unless (@cst = stat( $start ))
- {
- _carp("stat($start): $!");
- return '';
- }
-
- unless (-d _) {
- # Make sure we can be invoked on plain files, not just directories.
- # NOTE that this routine assumes that '/' is the only directory separator.
-
- my ($dir, $file) = $start =~ m{^(.*)/(.+)$}
- or return cwd() . '/' . $start;
-
- # Can't use "-l _" here, because the previous stat was a stat(), not an lstat().
- if (-l $start) {
- my $link_target = readlink($start);
- die "Can't resolve link $start: $!" unless defined $link_target;
-
- require File::Spec;
- $link_target = $dir . '/' . $link_target
- unless File::Spec->file_name_is_absolute($link_target);
-
- return abs_path($link_target);
- }
-
- return $dir ? abs_path($dir) . "/$file" : "/$file";
- }
-
- $cwd = '';
- $dotdots = $start;
- do
- {
- $dotdots .= '/..';
- @pst = @cst;
- local *PARENT;
- unless (opendir(PARENT, $dotdots))
- {
- # probably a permissions issue. Try the native command.
- require File::Spec;
- return File::Spec->rel2abs( $start, _backtick_pwd() );
- }
- unless (@cst = stat($dotdots))
- {
- _carp("stat($dotdots): $!");
- closedir(PARENT);
- return '';
- }
- if ($pst[0] == $cst[0] && $pst[1] == $cst[1])
- {
- $dir = undef;
- }
- else
- {
- do
- {
- unless (defined ($dir = readdir(PARENT)))
- {
- _carp("readdir($dotdots): $!");
- closedir(PARENT);
- return '';
- }
- $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
- }
- while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
- $tst[1] != $pst[1]);
- }
- $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ;
- closedir(PARENT);
- } while (defined $dir);
- chop($cwd) unless $cwd eq '/'; # drop the trailing /
- $cwd;
-}
-
-
-my $Curdir;
-sub fast_abs_path {
- local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage
- my $cwd = getcwd();
- require File::Spec;
- my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir);
-
- # Detaint else we'll explode in taint mode. This is safe because
- # we're not doing anything dangerous with it.
- ($path) = $path =~ /(.*)/s;
- ($cwd) = $cwd =~ /(.*)/s;
-
- unless (-e $path) {
- _croak("$path: No such file or directory");
- }
-
- unless (-d _) {
- # Make sure we can be invoked on plain files, not just directories.
-
- my ($vol, $dir, $file) = File::Spec->splitpath($path);
- return File::Spec->catfile($cwd, $path) unless length $dir;
-
- if (-l $path) {
- my $link_target = readlink($path);
- die "Can't resolve link $path: $!" unless defined $link_target;
-
- $link_target = File::Spec->catpath($vol, $dir, $link_target)
- unless File::Spec->file_name_is_absolute($link_target);
-
- return fast_abs_path($link_target);
- }
-
- return $dir eq File::Spec->rootdir
- ? File::Spec->catpath($vol, $dir, $file)
- : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file;
- }
-
- if (!CORE::chdir($path)) {
- _croak("Cannot chdir to $path: $!");
- }
- my $realpath = getcwd();
- if (! ((-d $cwd) && (CORE::chdir($cwd)))) {
- _croak("Cannot chdir back to $cwd: $!");
- }
- $realpath;
-}
-
-# added function alias to follow principle of least surprise
-# based on previous aliasing. --tchrist 27-Jan-00
-*fast_realpath = \&fast_abs_path;
-
-
-# --- PORTING SECTION ---
-
-# VMS: $ENV{'DEFAULT'} points to default directory at all times
-# 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu
-# Note: Use of Cwd::chdir() causes the logical name PWD to be defined
-# in the process logical name table as the default device and directory
-# seen by Perl. This may not be the same as the default device
-# and directory seen by DCL after Perl exits, since the effects
-# the CRTL chdir() function persist only until Perl exits.
-
-sub _vms_cwd {
- return $ENV{'DEFAULT'};
-}
-
-sub _vms_abs_path {
- return $ENV{'DEFAULT'} unless @_;
- my $path = shift;
-
- my $efs = _vms_efs;
- my $unix_rpt = _vms_unix_rpt;
-
- if (defined &VMS::Filespec::vmsrealpath) {
- my $path_unix = 0;
- my $path_vms = 0;
-
- $path_unix = 1 if ($path =~ m#(?<=\^)/#);
- $path_unix = 1 if ($path =~ /^\.\.?$/);
- $path_vms = 1 if ($path =~ m#[\[<\]]#);
- $path_vms = 1 if ($path =~ /^--?$/);
-
- my $unix_mode = $path_unix;
- if ($efs) {
- # In case of a tie, the Unix report mode decides.
- if ($path_vms == $path_unix) {
- $unix_mode = $unix_rpt;
- } else {
- $unix_mode = 0 if $path_vms;
- }
- }
-
- if ($unix_mode) {
- # Unix format
- return VMS::Filespec::unixrealpath($path);
- }
-
- # VMS format
-
- my $new_path = VMS::Filespec::vmsrealpath($path);
-
- # Perl expects directories to be in directory format
- $new_path = VMS::Filespec::pathify($new_path) if -d $path;
- return $new_path;
- }
-
- # Fallback to older algorithm if correct ones are not
- # available.
-
- if (-l $path) {
- my $link_target = readlink($path);
- die "Can't resolve link $path: $!" unless defined $link_target;
-
- return _vms_abs_path($link_target);
- }
-
- # may need to turn foo.dir into [.foo]
- my $pathified = VMS::Filespec::pathify($path);
- $path = $pathified if defined $pathified;
-
- return VMS::Filespec::rmsexpand($path);
-}
-
-sub _os2_cwd {
- my $pwd = `cmd /c cd`;
- chomp $pwd;
- $pwd =~ s:\\:/:g ;
- $ENV{'PWD'} = $pwd;
- return $pwd;
-}
-
-sub _win32_cwd_simple {
- my $pwd = `cd`;
- chomp $pwd;
- $pwd =~ s:\\:/:g ;
- $ENV{'PWD'} = $pwd;
- return $pwd;
-}
-
-sub _win32_cwd {
- my $pwd;
- $pwd = Win32::GetCwd();
- $pwd =~ s:\\:/:g ;
- $ENV{'PWD'} = $pwd;
- return $pwd;
-}
-
-*_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_win32_cwd_simple;
-
-sub _dos_cwd {
- my $pwd;
- if (!defined &Dos::GetCwd) {
- chomp($pwd = `command /c cd`);
- $pwd =~ s:\\:/:g ;
- } else {
- $pwd = Dos::GetCwd();
- }
- $ENV{'PWD'} = $pwd;
- return $pwd;
-}
-
-sub _qnx_cwd {
- local $ENV{PATH} = '';
- local $ENV{CDPATH} = '';
- local $ENV{ENV} = '';
- my $pwd = `/usr/bin/fullpath -t`;
- chomp $pwd;
- $ENV{'PWD'} = $pwd;
- return $pwd;
-}
-
-sub _qnx_abs_path {
- local $ENV{PATH} = '';
- local $ENV{CDPATH} = '';
- local $ENV{ENV} = '';
- my $path = @_ ? shift : '.';
- local *REALPATH;
-
- defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or
- die "Can't open /usr/bin/fullpath: $!";
- my $realpath = ;
- close REALPATH;
- chomp $realpath;
- return $realpath;
-}
-
-sub _epoc_cwd {
- return $ENV{'PWD'} = EPOC::getcwd();
-}
-
-
-# Now that all the base-level functions are set up, alias the
-# user-level functions to the right places
-
-if (exists $METHOD_MAP{$^O}) {
- my $map = $METHOD_MAP{$^O};
- foreach my $name (keys %$map) {
- local $^W = 0; # assignments trigger 'subroutine redefined' warning
- no strict 'refs';
- *{$name} = \&{$map->{$name}};
- }
-}
-
-# In case the XS version doesn't load.
-*abs_path = \&_perl_abs_path unless defined &abs_path;
-*getcwd = \&_perl_getcwd unless defined &getcwd;
-
-# added function alias for those of us more
-# used to the libc function. --tchrist 27-Jan-00
-*realpath = \&abs_path;
-
-1;
-__END__
-
-#line 873
diff --git a/software/Slic3r-1.3.0.64bit/lib/Data/Dumper.pm b/software/Slic3r-1.3.0.64bit/lib/Data/Dumper.pm
deleted file mode 100644
index a4857290..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Data/Dumper.pm
+++ /dev/null
@@ -1,857 +0,0 @@
-#line 1 "Data/Dumper.pm"
-#
-# Data/Dumper.pm
-#
-# convert perl data structures into perl syntax suitable for both printing
-# and eval
-#
-# Documentation at the __END__
-#
-
-package Data::Dumper;
-
-BEGIN {
- $VERSION = '2.161'; # Don't forget to set version and release
-} # date in POD below!
-
-#$| = 1;
-
-use 5.006_001;
-require Exporter;
-require overload;
-
-use Carp;
-
-BEGIN {
- @ISA = qw(Exporter);
- @EXPORT = qw(Dumper);
- @EXPORT_OK = qw(DumperX);
-
- # if run under miniperl, or otherwise lacking dynamic loading,
- # XSLoader should be attempted to load, or the pure perl flag
- # toggled on load failure.
- eval {
- require XSLoader;
- XSLoader::load( 'Data::Dumper' );
- 1
- }
- or $Useperl = 1;
-}
-
-my $IS_ASCII = ord 'A' == 65;
-
-# module vars and their defaults
-$Indent = 2 unless defined $Indent;
-$Trailingcomma = 0 unless defined $Trailingcomma;
-$Purity = 0 unless defined $Purity;
-$Pad = "" unless defined $Pad;
-$Varname = "VAR" unless defined $Varname;
-$Useqq = 0 unless defined $Useqq;
-$Terse = 0 unless defined $Terse;
-$Freezer = "" unless defined $Freezer;
-$Toaster = "" unless defined $Toaster;
-$Deepcopy = 0 unless defined $Deepcopy;
-$Quotekeys = 1 unless defined $Quotekeys;
-$Bless = "bless" unless defined $Bless;
-#$Expdepth = 0 unless defined $Expdepth;
-$Maxdepth = 0 unless defined $Maxdepth;
-$Pair = ' => ' unless defined $Pair;
-$Useperl = 0 unless defined $Useperl;
-$Sortkeys = 0 unless defined $Sortkeys;
-$Deparse = 0 unless defined $Deparse;
-$Sparseseen = 0 unless defined $Sparseseen;
-$Maxrecurse = 1000 unless defined $Maxrecurse;
-
-#
-# expects an arrayref of values to be dumped.
-# can optionally pass an arrayref of names for the values.
-# names must have leading $ sign stripped. begin the name with *
-# to cause output of arrays and hashes rather than refs.
-#
-sub new {
- my($c, $v, $n) = @_;
-
- croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
- unless (defined($v) && (ref($v) eq 'ARRAY'));
- $n = [] unless (defined($n) && (ref($n) eq 'ARRAY'));
-
- my($s) = {
- level => 0, # current recursive depth
- indent => $Indent, # various styles of indenting
- trailingcomma => $Trailingcomma, # whether to add comma after last elem
- pad => $Pad, # all lines prefixed by this string
- xpad => "", # padding-per-level
- apad => "", # added padding for hash keys n such
- sep => "", # list separator
- pair => $Pair, # hash key/value separator: defaults to ' => '
- seen => {}, # local (nested) refs (id => [name, val])
- todump => $v, # values to dump []
- names => $n, # optional names for values []
- varname => $Varname, # prefix to use for tagging nameless ones
- purity => $Purity, # degree to which output is evalable
- useqq => $Useqq, # use "" for strings (backslashitis ensues)
- terse => $Terse, # avoid name output (where feasible)
- freezer => $Freezer, # name of Freezer method for objects
- toaster => $Toaster, # name of method to revive objects
- deepcopy => $Deepcopy, # do not cross-ref, except to stop recursion
- quotekeys => $Quotekeys, # quote hash keys
- 'bless' => $Bless, # keyword to use for "bless"
-# expdepth => $Expdepth, # cutoff depth for explicit dumping
- maxdepth => $Maxdepth, # depth beyond which we give up
- maxrecurse => $Maxrecurse, # depth beyond which we abort
- useperl => $Useperl, # use the pure Perl implementation
- sortkeys => $Sortkeys, # flag or filter for sorting hash keys
- deparse => $Deparse, # use B::Deparse for coderefs
- noseen => $Sparseseen, # do not populate the seen hash unless necessary
- };
-
- if ($Indent > 0) {
- $s->{xpad} = " ";
- $s->{sep} = "\n";
- }
- return bless($s, $c);
-}
-
-# Packed numeric addresses take less memory. Plus pack is faster than sprintf
-
-# Most users of current versions of Data::Dumper will be 5.008 or later.
-# Anyone on 5.6.1 and 5.6.2 upgrading will be rare (particularly judging by
-# the bug reports from users on those platforms), so for the common case avoid
-# complexity, and avoid even compiling the unneeded code.
-
-sub init_refaddr_format {
-}
-
-sub format_refaddr {
- require Scalar::Util;
- pack "J", Scalar::Util::refaddr(shift);
-};
-
-if ($] < 5.008) {
- eval <<'EOC' or die;
- no warnings 'redefine';
- my $refaddr_format;
- sub init_refaddr_format {
- require Config;
- my $f = $Config::Config{uvxformat};
- $f =~ tr/"//d;
- $refaddr_format = "0x%" . $f;
- }
-
- sub format_refaddr {
- require Scalar::Util;
- sprintf $refaddr_format, Scalar::Util::refaddr(shift);
- }
-
- 1
-EOC
-}
-
-#
-# add-to or query the table of already seen references
-#
-sub Seen {
- my($s, $g) = @_;
- if (defined($g) && (ref($g) eq 'HASH')) {
- init_refaddr_format();
- my($k, $v, $id);
- while (($k, $v) = each %$g) {
- if (defined $v) {
- if (ref $v) {
- $id = format_refaddr($v);
- if ($k =~ /^[*](.*)$/) {
- $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) :
- (ref $v eq 'HASH') ? ( "\\\%" . $1 ) :
- (ref $v eq 'CODE') ? ( "\\\&" . $1 ) :
- ( "\$" . $1 ) ;
- }
- elsif ($k !~ /^\$/) {
- $k = "\$" . $k;
- }
- $s->{seen}{$id} = [$k, $v];
- }
- else {
- carp "Only refs supported, ignoring non-ref item \$$k";
- }
- }
- else {
- carp "Value of ref must be defined; ignoring undefined item \$$k";
- }
- }
- return $s;
- }
- else {
- return map { @$_ } values %{$s->{seen}};
- }
-}
-
-#
-# set or query the values to be dumped
-#
-sub Values {
- my($s, $v) = @_;
- if (defined($v)) {
- if (ref($v) eq 'ARRAY') {
- $s->{todump} = [@$v]; # make a copy
- return $s;
- }
- else {
- croak "Argument to Values, if provided, must be array ref";
- }
- }
- else {
- return @{$s->{todump}};
- }
-}
-
-#
-# set or query the names of the values to be dumped
-#
-sub Names {
- my($s, $n) = @_;
- if (defined($n)) {
- if (ref($n) eq 'ARRAY') {
- $s->{names} = [@$n]; # make a copy
- return $s;
- }
- else {
- croak "Argument to Names, if provided, must be array ref";
- }
- }
- else {
- return @{$s->{names}};
- }
-}
-
-sub DESTROY {}
-
-sub Dump {
- return &Dumpxs
- unless $Data::Dumper::Useperl || (ref($_[0]) && $_[0]->{useperl})
- || $Data::Dumper::Deparse || (ref($_[0]) && $_[0]->{deparse})
-
- # Use pure perl version on earlier releases on EBCDIC platforms
- || (! $IS_ASCII && $] lt 5.021_010);
- return &Dumpperl;
-}
-
-#
-# dump the refs in the current dumper object.
-# expects same args as new() if called via package name.
-#
-sub Dumpperl {
- my($s) = shift;
- my(@out, $val, $name);
- my($i) = 0;
- local(@post);
- init_refaddr_format();
-
- $s = $s->new(@_) unless ref $s;
-
- for $val (@{$s->{todump}}) {
- @post = ();
- $name = $s->{names}[$i++];
- $name = $s->_refine_name($name, $val, $i);
-
- my $valstr;
- {
- local($s->{apad}) = $s->{apad};
- $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2 and !$s->{terse};
- $valstr = $s->_dump($val, $name);
- }
-
- $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse};
- my $out = $s->_compose_out($valstr, \@post);
-
- push @out, $out;
- }
- return wantarray ? @out : join('', @out);
-}
-
-# wrap string in single quotes (escaping if needed)
-sub _quote {
- my $val = shift;
- $val =~ s/([\\\'])/\\$1/g;
- return "'" . $val . "'";
-}
-
-# Old Perls (5.14-) have trouble resetting vstring magic when it is no
-# longer valid.
-use constant _bad_vsmg => defined &_vstring && (_vstring(~v0)||'') eq "v0";
-
-#
-# twist, toil and turn;
-# and recurse, of course.
-# sometimes sordidly;
-# and curse if no recourse.
-#
-sub _dump {
- my($s, $val, $name) = @_;
- my($out, $type, $id, $sname);
-
- $type = ref $val;
- $out = "";
-
- if ($type) {
-
- # Call the freezer method if it's specified and the object has the
- # method. Trap errors and warn() instead of die()ing, like the XS
- # implementation.
- my $freezer = $s->{freezer};
- if ($freezer and UNIVERSAL::can($val, $freezer)) {
- eval { $val->$freezer() };
- warn "WARNING(Freezer method call failed): $@" if $@;
- }
-
- require Scalar::Util;
- my $realpack = Scalar::Util::blessed($val);
- my $realtype = $realpack ? Scalar::Util::reftype($val) : ref $val;
- $id = format_refaddr($val);
-
- # Note: By this point $name is always defined and of non-zero length.
- # Keep a tab on it so that we do not fall into recursive pit.
- if (exists $s->{seen}{$id}) {
- if ($s->{purity} and $s->{level} > 0) {
- $out = ($realtype eq 'HASH') ? '{}' :
- ($realtype eq 'ARRAY') ? '[]' :
- 'do{my $o}' ;
- push @post, $name . " = " . $s->{seen}{$id}[0];
- }
- else {
- $out = $s->{seen}{$id}[0];
- if ($name =~ /^([\@\%])/) {
- my $start = $1;
- if ($out =~ /^\\$start/) {
- $out = substr($out, 1);
- }
- else {
- $out = $start . '{' . $out . '}';
- }
- }
- }
- return $out;
- }
- else {
- # store our name
- $s->{seen}{$id} = [ (
- ($name =~ /^[@%]/)
- ? ('\\' . $name )
- : ($realtype eq 'CODE' and $name =~ /^[*](.*)$/)
- ? ('\\&' . $1 )
- : $name
- ), $val ];
- }
- my $no_bless = 0;
- my $is_regex = 0;
- if ( $realpack and ($] >= 5.009005 ? re::is_regexp($val) : $realpack eq 'Regexp') ) {
- $is_regex = 1;
- $no_bless = $realpack eq 'Regexp';
- }
-
- # If purity is not set and maxdepth is set, then check depth:
- # if we have reached maximum depth, return the string
- # representation of the thing we are currently examining
- # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)').
- if (!$s->{purity}
- and defined($s->{maxdepth})
- and $s->{maxdepth} > 0
- and $s->{level} >= $s->{maxdepth})
- {
- return qq['$val'];
- }
-
- # avoid recursing infinitely [perl #122111]
- if ($s->{maxrecurse} > 0
- and $s->{level} >= $s->{maxrecurse}) {
- die "Recursion limit of $s->{maxrecurse} exceeded";
- }
-
- # we have a blessed ref
- my ($blesspad);
- if ($realpack and !$no_bless) {
- $out = $s->{'bless'} . '( ';
- $blesspad = $s->{apad};
- $s->{apad} .= ' ' if ($s->{indent} >= 2);
- }
-
- $s->{level}++;
- my $ipad = $s->{xpad} x $s->{level};
-
- if ($is_regex) {
- my $pat;
- my $flags = "";
- if (defined(*re::regexp_pattern{CODE})) {
- ($pat, $flags) = re::regexp_pattern($val);
- }
- else {
- $pat = "$val";
- }
- $pat =~ s <(\\.)|/> { $1 || '\\/' }ge;
- $out .= "qr/$pat/$flags";
- }
- elsif ($realtype eq 'SCALAR' || $realtype eq 'REF'
- || $realtype eq 'VSTRING') {
- if ($realpack) {
- $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
- }
- else {
- $out .= '\\' . $s->_dump($$val, "\${$name}");
- }
- }
- elsif ($realtype eq 'GLOB') {
- $out .= '\\' . $s->_dump($$val, "*{$name}");
- }
- elsif ($realtype eq 'ARRAY') {
- my($pad, $mname);
- my($i) = 0;
- $out .= ($name =~ /^\@/) ? '(' : '[';
- $pad = $s->{sep} . $s->{pad} . $s->{apad};
- ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) :
- # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
- ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
- ($mname = $name . '->');
- $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
- for my $v (@$val) {
- $sname = $mname . '[' . $i . ']';
- $out .= $pad . $ipad . '#' . $i
- if $s->{indent} >= 3;
- $out .= $pad . $ipad . $s->_dump($v, $sname);
- $out .= ","
- if $i++ < $#$val
- || ($s->{trailingcomma} && $s->{indent} >= 1);
- }
- $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i;
- $out .= ($name =~ /^\@/) ? ')' : ']';
- }
- elsif ($realtype eq 'HASH') {
- my ($k, $v, $pad, $lpad, $mname, $pair);
- $out .= ($name =~ /^\%/) ? '(' : '{';
- $pad = $s->{sep} . $s->{pad} . $s->{apad};
- $lpad = $s->{apad};
- $pair = $s->{pair};
- ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
- # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
- ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
- ($mname = $name . '->');
- $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
- my $sortkeys = defined($s->{sortkeys}) ? $s->{sortkeys} : '';
- my $keys = [];
- if ($sortkeys) {
- if (ref($s->{sortkeys}) eq 'CODE') {
- $keys = $s->{sortkeys}($val);
- unless (ref($keys) eq 'ARRAY') {
- carp "Sortkeys subroutine did not return ARRAYREF";
- $keys = [];
- }
- }
- else {
- $keys = [ sort keys %$val ];
- }
- }
-
- # Ensure hash iterator is reset
- keys(%$val);
-
- my $key;
- while (($k, $v) = ! $sortkeys ? (each %$val) :
- @$keys ? ($key = shift(@$keys), $val->{$key}) :
- () )
- {
- my $nk = $s->_dump($k, "");
-
- # _dump doesn't quote numbers of this form
- if ($s->{quotekeys} && $nk =~ /^(?:0|-?[1-9][0-9]{0,8})\z/) {
- $nk = $s->{useqq} ? qq("$nk") : qq('$nk');
- }
- elsif (!$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/) {
- $nk = $1
- }
-
- $sname = $mname . '{' . $nk . '}';
- $out .= $pad . $ipad . $nk . $pair;
-
- # temporarily alter apad
- $s->{apad} .= (" " x (length($nk) + 4))
- if $s->{indent} >= 2;
- $out .= $s->_dump($val->{$k}, $sname) . ",";
- $s->{apad} = $lpad
- if $s->{indent} >= 2;
- }
- if (substr($out, -1) eq ',') {
- chop $out if !$s->{trailingcomma} || !$s->{indent};
- $out .= $pad . ($s->{xpad} x ($s->{level} - 1));
- }
- $out .= ($name =~ /^\%/) ? ')' : '}';
- }
- elsif ($realtype eq 'CODE') {
- if ($s->{deparse}) {
- require B::Deparse;
- my $sub = 'sub ' . (B::Deparse->new)->coderef2text($val);
- $pad = $s->{sep} . $s->{pad} . $s->{apad} . $s->{xpad} x ($s->{level} - 1);
- $sub =~ s/\n/$pad/gse;
- $out .= $sub;
- }
- else {
- $out .= 'sub { "DUMMY" }';
- carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
- }
- }
- else {
- croak "Can't handle '$realtype' type";
- }
-
- if ($realpack and !$no_bless) { # we have a blessed ref
- $out .= ', ' . _quote($realpack) . ' )';
- $out .= '->' . $s->{toaster} . '()'
- if $s->{toaster} ne '';
- $s->{apad} = $blesspad;
- }
- $s->{level}--;
- }
- else { # simple scalar
-
- my $ref = \$_[1];
- my $v;
- # first, catalog the scalar
- if ($name ne '') {
- $id = format_refaddr($ref);
- if (exists $s->{seen}{$id}) {
- if ($s->{seen}{$id}[2]) {
- $out = $s->{seen}{$id}[0];
- #warn "[<$out]\n";
- return "\${$out}";
- }
- }
- else {
- #warn "[>\\$name]\n";
- $s->{seen}{$id} = ["\\$name", $ref];
- }
- }
- $ref = \$val;
- if (ref($ref) eq 'GLOB') { # glob
- my $name = substr($val, 1);
- if ($name =~ /^[A-Za-z_][\w:]*$/ && $name ne 'main::') {
- $name =~ s/^main::/::/;
- $sname = $name;
- }
- else {
- $sname = $s->_dump(
- $name eq 'main::' || $] < 5.007 && $name eq "main::\0"
- ? ''
- : $name,
- "",
- );
- $sname = '{' . $sname . '}';
- }
- if ($s->{purity}) {
- my $k;
- local ($s->{level}) = 0;
- for $k (qw(SCALAR ARRAY HASH)) {
- my $gval = *$val{$k};
- next unless defined $gval;
- next if $k eq "SCALAR" && ! defined $$gval; # always there
-
- # _dump can push into @post, so we hold our place using $postlen
- my $postlen = scalar @post;
- $post[$postlen] = "\*$sname = ";
- local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
- $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
- }
- }
- $out .= '*' . $sname;
- }
- elsif (!defined($val)) {
- $out .= "undef";
- }
- elsif (defined &_vstring and $v = _vstring($val)
- and !_bad_vsmg || eval $v eq $val) {
- $out .= $v;
- }
- elsif (!defined &_vstring
- and ref $ref eq 'VSTRING' || eval{Scalar::Util::isvstring($val)}) {
- $out .= sprintf "%vd", $val;
- }
- # \d here would treat "1\x{660}" as a safe decimal number
- elsif ($val =~ /^(?:0|-?[1-9][0-9]{0,8})\z/) { # safe decimal number
- $out .= $val;
- }
- else { # string
- if ($s->{useqq} or $val =~ tr/\0-\377//c) {
- # Fall back to qq if there's Unicode
- $out .= qquote($val, $s->{useqq});
- }
- else {
- $out .= _quote($val);
- }
- }
- }
- if ($id) {
- # if we made it this far, $id was added to seen list at current
- # level, so remove it to get deep copies
- if ($s->{deepcopy}) {
- delete($s->{seen}{$id});
- }
- elsif ($name) {
- $s->{seen}{$id}[2] = 1;
- }
- }
- return $out;
-}
-
-#
-# non-OO style of earlier version
-#
-sub Dumper {
- return Data::Dumper->Dump([@_]);
-}
-
-# compat stub
-sub DumperX {
- return Data::Dumper->Dumpxs([@_], []);
-}
-
-#
-# reset the "seen" cache
-#
-sub Reset {
- my($s) = shift;
- $s->{seen} = {};
- return $s;
-}
-
-sub Indent {
- my($s, $v) = @_;
- if (defined($v)) {
- if ($v == 0) {
- $s->{xpad} = "";
- $s->{sep} = "";
- }
- else {
- $s->{xpad} = " ";
- $s->{sep} = "\n";
- }
- $s->{indent} = $v;
- return $s;
- }
- else {
- return $s->{indent};
- }
-}
-
-sub Trailingcomma {
- my($s, $v) = @_;
- defined($v) ? (($s->{trailingcomma} = $v), return $s) : $s->{trailingcomma};
-}
-
-sub Pair {
- my($s, $v) = @_;
- defined($v) ? (($s->{pair} = $v), return $s) : $s->{pair};
-}
-
-sub Pad {
- my($s, $v) = @_;
- defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
-}
-
-sub Varname {
- my($s, $v) = @_;
- defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
-}
-
-sub Purity {
- my($s, $v) = @_;
- defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
-}
-
-sub Useqq {
- my($s, $v) = @_;
- defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
-}
-
-sub Terse {
- my($s, $v) = @_;
- defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
-}
-
-sub Freezer {
- my($s, $v) = @_;
- defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
-}
-
-sub Toaster {
- my($s, $v) = @_;
- defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
-}
-
-sub Deepcopy {
- my($s, $v) = @_;
- defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
-}
-
-sub Quotekeys {
- my($s, $v) = @_;
- defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
-}
-
-sub Bless {
- my($s, $v) = @_;
- defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
-}
-
-sub Maxdepth {
- my($s, $v) = @_;
- defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'};
-}
-
-sub Maxrecurse {
- my($s, $v) = @_;
- defined($v) ? (($s->{'maxrecurse'} = $v), return $s) : $s->{'maxrecurse'};
-}
-
-sub Useperl {
- my($s, $v) = @_;
- defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
-}
-
-sub Sortkeys {
- my($s, $v) = @_;
- defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
-}
-
-sub Deparse {
- my($s, $v) = @_;
- defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
-}
-
-sub Sparseseen {
- my($s, $v) = @_;
- defined($v) ? (($s->{'noseen'} = $v), return $s) : $s->{'noseen'};
-}
-
-# used by qquote below
-my %esc = (
- "\a" => "\\a",
- "\b" => "\\b",
- "\t" => "\\t",
- "\n" => "\\n",
- "\f" => "\\f",
- "\r" => "\\r",
- "\e" => "\\e",
-);
-
-my $low_controls = ($IS_ASCII)
-
- # This includes \177, because traditionally it has been
- # output as octal, even though it isn't really a "low"
- # control
- ? qr/[\0-\x1f\177]/
-
- # EBCDIC low controls.
- : qr/[\0-\x3f]/;
-
-# put a string value in double quotes
-sub qquote {
- local($_) = shift;
- s/([\\\"\@\$])/\\$1/g;
-
- # This efficiently changes the high ordinal characters to \x{} if the utf8
- # flag is on. On ASCII platforms, the high ordinals are all the
- # non-ASCII's. On EBCDIC platforms, we don't include in these the non-ASCII
- # controls whose ordinals are less than SPACE, excluded below by the range
- # \0-\x3f. On ASCII platforms this range just compiles as part of :ascii:.
- # On EBCDIC platforms, there is just one outlier high ordinal control, and
- # it gets output as \x{}.
- my $bytes; { use bytes; $bytes = length }
- s/([^[:ascii:]\0-\x3f])/sprintf("\\x{%x}",ord($1))/ge
- if $bytes > length
-
- # The above doesn't get the EBCDIC outlier high ordinal control when
- # the string is UTF-8 but there are no UTF-8 variant characters in it.
- # We want that to come out as \x{} anyway. We need is_utf8() to do
- # this.
- || (! $IS_ASCII && $] ge 5.008_001 && utf8::is_utf8($_));
-
- return qq("$_") unless /[[:^print:]]/; # fast exit if only printables
-
- # Here, there is at least one non-printable to output. First, translate the
- # escapes.
- s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
-
- # no need for 3 digits in escape for octals not followed by a digit.
- s/($low_controls)(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
-
- # But otherwise use 3 digits
- s/($low_controls)/'\\'.sprintf('%03o',ord($1))/eg;
-
- # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE--
- my $high = shift || "";
- if ($high eq "iso8859") { # Doesn't escape the Latin1 printables
- if ($IS_ASCII) {
- s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
- }
- elsif ($] ge 5.007_003) {
- my $high_control = utf8::unicode_to_native(0x9F);
- s/$high_control/sprintf('\\%o',ord($1))/eg;
- }
- } elsif ($high eq "utf8") {
-# Some discussion of what to do here is in
-# https://rt.perl.org/Ticket/Display.html?id=113088
-# use utf8;
-# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
- } elsif ($high eq "8bit") {
- # leave it as it is
- } else {
- s/([[:^ascii:]])/'\\'.sprintf('%03o',ord($1))/eg;
- #s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
- }
-
- return qq("$_");
-}
-
-# helper sub to sort hash keys in Perl < 5.8.0 where we don't have
-# access to sortsv() from XS
-sub _sortkeys { [ sort keys %{$_[0]} ] }
-
-sub _refine_name {
- my $s = shift;
- my ($name, $val, $i) = @_;
- if (defined $name) {
- if ($name =~ /^[*](.*)$/) {
- if (defined $val) {
- $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) :
- (ref $val eq 'HASH') ? ( "\%" . $1 ) :
- (ref $val eq 'CODE') ? ( "\*" . $1 ) :
- ( "\$" . $1 ) ;
- }
- else {
- $name = "\$" . $1;
- }
- }
- elsif ($name !~ /^\$/) {
- $name = "\$" . $name;
- }
- }
- else { # no names provided
- $name = "\$" . $s->{varname} . $i;
- }
- return $name;
-}
-
-sub _compose_out {
- my $s = shift;
- my ($valstr, $postref) = @_;
- my $out = "";
- $out .= $s->{pad} . $valstr . $s->{sep};
- if (@{$postref}) {
- $out .= $s->{pad} .
- join(';' . $s->{sep} . $s->{pad}, @{$postref}) .
- ';' .
- $s->{sep};
- }
- return $out;
-}
-
-1;
-__END__
-
-#line 1482
diff --git a/software/Slic3r-1.3.0.64bit/lib/Data/OptList.pm b/software/Slic3r-1.3.0.64bit/lib/Data/OptList.pm
deleted file mode 100644
index d2c43d52..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Data/OptList.pm
+++ /dev/null
@@ -1,243 +0,0 @@
-#line 1 "Data/OptList.pm"
-use strict;
-use warnings;
-package Data::OptList;
-# ABSTRACT: parse and validate simple name/value option pairs
-$Data::OptList::VERSION = '0.110';
-use List::Util ();
-use Params::Util ();
-use Sub::Install 0.921 ();
-
-#pod =head1 SYNOPSIS
-#pod
-#pod use Data::OptList;
-#pod
-#pod my $options = Data::OptList::mkopt([
-#pod qw(key1 key2 key3 key4),
-#pod key5 => { ... },
-#pod key6 => [ ... ],
-#pod key7 => sub { ... },
-#pod key8 => { ... },
-#pod key8 => [ ... ],
-#pod ]);
-#pod
-#pod ...is the same thing, more or less, as:
-#pod
-#pod my $options = [
-#pod [ key1 => undef, ],
-#pod [ key2 => undef, ],
-#pod [ key3 => undef, ],
-#pod [ key4 => undef, ],
-#pod [ key5 => { ... }, ],
-#pod [ key6 => [ ... ], ],
-#pod [ key7 => sub { ... }, ],
-#pod [ key8 => { ... }, ],
-#pod [ key8 => [ ... ], ],
-#pod ]);
-#pod
-#pod =head1 DESCRIPTION
-#pod
-#pod Hashes are great for storing named data, but if you want more than one entry
-#pod for a name, you have to use a list of pairs. Even then, this is really boring
-#pod to write:
-#pod
-#pod $values = [
-#pod foo => undef,
-#pod bar => undef,
-#pod baz => undef,
-#pod xyz => { ... },
-#pod ];
-#pod
-#pod Just look at all those undefs! Don't worry, we can get rid of those:
-#pod
-#pod $values = [
-#pod map { $_ => undef } qw(foo bar baz),
-#pod xyz => { ... },
-#pod ];
-#pod
-#pod Aaaauuugh! We've saved a little typing, but now it requires thought to read,
-#pod and thinking is even worse than typing... and it's got a bug! It looked right,
-#pod didn't it? Well, the C<< xyz => { ... } >> gets consumed by the map, and we
-#pod don't get the data we wanted.
-#pod
-#pod With Data::OptList, you can do this instead:
-#pod
-#pod $values = Data::OptList::mkopt([
-#pod qw(foo bar baz),
-#pod xyz => { ... },
-#pod ]);
-#pod
-#pod This works by assuming that any defined scalar is a name and any reference
-#pod following a name is its value.
-#pod
-#pod =func mkopt
-#pod
-#pod my $opt_list = Data::OptList::mkopt($input, \%arg);
-#pod
-#pod Valid arguments are:
-#pod
-#pod moniker - a word used in errors to describe the opt list; encouraged
-#pod require_unique - if true, no name may appear more than once
-#pod must_be - types to which opt list values are limited (described below)
-#pod name_test - a coderef used to test whether a value can be a name
-#pod (described below, but you probably don't want this)
-#pod
-#pod This produces an array of arrays; the inner arrays are name/value pairs.
-#pod Values will be either "undef" or a reference.
-#pod
-#pod Positional parameters may be used for compatibility with the old C
-#pod interface:
-#pod
-#pod my $opt_list = Data::OptList::mkopt($input, $moniker, $req_uni, $must_be);
-#pod
-#pod Valid values for C<$input>:
-#pod
-#pod undef -> []
-#pod hashref -> [ [ key1 => value1 ] ... ] # non-ref values become undef
-#pod arrayref -> every name followed by a non-name becomes a pair: [ name => ref ]
-#pod every name followed by undef becomes a pair: [ name => undef ]
-#pod otherwise, it becomes [ name => undef ] like so:
-#pod [ "a", "b", [ 1, 2 ] ] -> [ [ a => undef ], [ b => [ 1, 2 ] ] ]
-#pod
-#pod By default, a I is any defined non-reference. The C parameter
-#pod can be a code ref that tests whether the argument passed it is a name or not.
-#pod This should be used rarely. Interactions between C and
-#pod C are not yet particularly elegant, as C just tests
-#pod string equality. B
-#pod
-#pod The C parameter is either a scalar or array of scalars; it defines
-#pod what kind(s) of refs may be values. If an invalid value is found, an exception
-#pod is thrown. If no value is passed for this argument, any reference is valid.
-#pod If C specifies that values must be CODE, HASH, ARRAY, or SCALAR, then
-#pod Params::Util is used to check whether the given value can provide that
-#pod interface. Otherwise, it checks that the given value is an object of the kind.
-#pod
-#pod In other words:
-#pod
-#pod [ qw(SCALAR HASH Object::Known) ]
-#pod
-#pod Means:
-#pod
-#pod _SCALAR0($value) or _HASH($value) or _INSTANCE($value, 'Object::Known')
-#pod
-#pod =cut
-
-my %test_for;
-BEGIN {
- %test_for = (
- CODE => \&Params::Util::_CODELIKE, ## no critic
- HASH => \&Params::Util::_HASHLIKE, ## no critic
- ARRAY => \&Params::Util::_ARRAYLIKE, ## no critic
- SCALAR => \&Params::Util::_SCALAR0, ## no critic
- );
-}
-
-sub mkopt {
- my ($opt_list) = shift;
-
- my ($moniker, $require_unique, $must_be); # the old positional args
- my ($name_test, $is_a);
-
- if (@_) {
- if (@_ == 1 and Params::Util::_HASHLIKE($_[0])) {
- ($moniker, $require_unique, $must_be, $name_test)
- = @{$_[0]}{ qw(moniker require_unique must_be name_test) };
- } else {
- ($moniker, $require_unique, $must_be) = @_;
- }
-
- # Transform the $must_be specification into a closure $is_a
- # that will check if a value matches the spec
-
- if (defined $must_be) {
- $must_be = [ $must_be ] unless ref $must_be;
- my @checks = map {
- my $class = $_;
- $test_for{$_}
- || sub { $_[1] = $class; goto \&Params::Util::_INSTANCE }
- } @$must_be;
-
- $is_a = (@checks == 1)
- ? $checks[0]
- : sub {
- my $value = $_[0];
- List::Util::first { defined($_->($value)) } @checks
- };
-
- $moniker = 'unnamed' unless defined $moniker;
- }
- }
-
- return [] unless $opt_list;
-
- $name_test ||= sub { ! ref $_[0] };
-
- $opt_list = [
- map { $_ => (ref $opt_list->{$_} ? $opt_list->{$_} : ()) } keys %$opt_list
- ] if ref $opt_list eq 'HASH';
-
- my @return;
- my %seen;
-
- for (my $i = 0; $i < @$opt_list; $i++) { ## no critic
- my $name = $opt_list->[$i];
-
- if ($require_unique) {
- Carp::croak "multiple definitions provided for $name" if $seen{$name}++;
- }
-
- my $value;
-
- if ($i < $#$opt_list) {
- if (not defined $opt_list->[$i+1]) {
- $i++
- } elsif (! $name_test->($opt_list->[$i+1])) {
- $value = $opt_list->[++$i];
- if ($is_a && !$is_a->($value)) {
- my $ref = ref $value;
- Carp::croak "$ref-ref values are not valid in $moniker opt list";
- }
- }
- }
-
- push @return, [ $name => $value ];
- }
-
- return \@return;
-}
-
-#pod =func mkopt_hash
-#pod
-#pod my $opt_hash = Data::OptList::mkopt_hash($input, $moniker, $must_be);
-#pod
-#pod Given valid C> input, this routine returns a reference to a hash. It
-#pod will throw an exception if any name has more than one value.
-#pod
-#pod =cut
-
-sub mkopt_hash {
- my ($opt_list, $moniker, $must_be) = @_;
- return {} unless $opt_list;
-
- $opt_list = mkopt($opt_list, $moniker, 1, $must_be);
- my %hash = map { $_->[0] => $_->[1] } @$opt_list;
- return \%hash;
-}
-
-#pod =head1 EXPORTS
-#pod
-#pod Both C and C may be exported on request.
-#pod
-#pod =cut
-
-BEGIN {
- *import = Sub::Install::exporter {
- exports => [qw(mkopt mkopt_hash)],
- };
-}
-
-1;
-
-__END__
-
-#line 407
diff --git a/software/Slic3r-1.3.0.64bit/lib/Devel/GlobalDestruction.pm b/software/Slic3r-1.3.0.64bit/lib/Devel/GlobalDestruction.pm
deleted file mode 100644
index 95bcca11..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Devel/GlobalDestruction.pm
+++ /dev/null
@@ -1,44 +0,0 @@
-#line 1 "Devel/GlobalDestruction.pm"
-package Devel::GlobalDestruction;
-
-use strict;
-use warnings;
-
-our $VERSION = '0.14';
-
-use Sub::Exporter::Progressive -setup => {
- exports => [ qw(in_global_destruction) ],
- groups => { default => [ -all ] },
-};
-
-# we run 5.14+ - everything is in core
-#
-if (defined ${^GLOBAL_PHASE}) {
- eval 'sub in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }; 1'
- or die $@;
-}
-# try to load the xs version if it was compiled
-#
-elsif (eval {
- require Devel::GlobalDestruction::XS;
- no warnings 'once';
- *in_global_destruction = \&Devel::GlobalDestruction::XS::in_global_destruction;
- 1;
-}) {
- # the eval already installed everything, nothing to do
-}
-else {
- # internally, PL_main_cv is set to Nullcv immediately before entering
- # global destruction and we can use B to detect that. B::main_cv will
- # only ever be a B::CV or a B::SPECIAL that is a reference to 0
- require B;
- eval 'sub in_global_destruction () { ${B::main_cv()} == 0 }; 1'
- or die $@;
-}
-
-1; # keep require happy
-
-
-__END__
-
-#line 111
diff --git a/software/Slic3r-1.3.0.64bit/lib/Digest.pm b/software/Slic3r-1.3.0.64bit/lib/Digest.pm
deleted file mode 100644
index 59c2f40f..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Digest.pm
+++ /dev/null
@@ -1,68 +0,0 @@
-#line 1 "Digest.pm"
-package Digest;
-
-use strict;
-use vars qw($VERSION %MMAP $AUTOLOAD);
-
-$VERSION = "1.17_01";
-
-%MMAP = (
- "SHA-1" => [["Digest::SHA", 1], "Digest::SHA1", ["Digest::SHA2", 1]],
- "SHA-224" => [["Digest::SHA", 224]],
- "SHA-256" => [["Digest::SHA", 256], ["Digest::SHA2", 256]],
- "SHA-384" => [["Digest::SHA", 384], ["Digest::SHA2", 384]],
- "SHA-512" => [["Digest::SHA", 512], ["Digest::SHA2", 512]],
- "HMAC-MD5" => "Digest::HMAC_MD5",
- "HMAC-SHA-1" => "Digest::HMAC_SHA1",
- "CRC-16" => [["Digest::CRC", type => "crc16"]],
- "CRC-32" => [["Digest::CRC", type => "crc32"]],
- "CRC-CCITT" => [["Digest::CRC", type => "crcccitt"]],
- "RIPEMD-160" => "Crypt::RIPEMD160",
-);
-
-sub new
-{
- shift; # class ignored
- my $algorithm = shift;
- my $impl = $MMAP{$algorithm} || do {
- $algorithm =~ s/\W+//g;
- "Digest::$algorithm";
- };
- $impl = [$impl] unless ref($impl);
- local $@; # don't clobber it for our caller
- my $err;
- for (@$impl) {
- my $class = $_;
- my @args;
- ($class, @args) = @$class if ref($class);
- no strict 'refs';
- unless (exists ${"$class\::"}{"VERSION"}) {
- my $pm_file = $class . ".pm";
- $pm_file =~ s{::}{/}g;
- eval {
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- require $pm_file
- };
- if ($@) {
- $err ||= $@;
- next;
- }
- }
- return $class->new(@args, @_);
- }
- die $err;
-}
-
-sub AUTOLOAD
-{
- my $class = shift;
- my $algorithm = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
- $class->new($algorithm, @_);
-}
-
-1;
-
-__END__
-
-#line 324
diff --git a/software/Slic3r-1.3.0.64bit/lib/Digest/MD5.pm b/software/Slic3r-1.3.0.64bit/lib/Digest/MD5.pm
deleted file mode 100644
index ec9fe357..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Digest/MD5.pm
+++ /dev/null
@@ -1,48 +0,0 @@
-#line 1 "Digest/MD5.pm"
-package Digest::MD5;
-
-use strict;
-use vars qw($VERSION @ISA @EXPORT_OK);
-
-$VERSION = '2.55';
-
-require Exporter;
-*import = \&Exporter::import;
-@EXPORT_OK = qw(md5 md5_hex md5_base64);
-
-eval {
- require Digest::base;
- push(@ISA, 'Digest::base');
-};
-if ($@) {
- my $err = $@;
- *add_bits = sub { die $err };
-}
-
-
-eval {
- require XSLoader;
- XSLoader::load('Digest::MD5', $VERSION);
-};
-if ($@) {
- my $olderr = $@;
- eval {
- # Try to load the pure perl version
- require Digest::Perl::MD5;
-
- Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64));
- unshift(@ISA, "Digest::Perl::MD5"); # make OO interface work
- };
- if ($@) {
- # restore the original error
- die $olderr;
- }
-}
-else {
- *reset = \&new;
-}
-
-1;
-__END__
-
-#line 386
diff --git a/software/Slic3r-1.3.0.64bit/lib/Digest/SHA.pm b/software/Slic3r-1.3.0.64bit/lib/Digest/SHA.pm
deleted file mode 100644
index 79d55f86..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Digest/SHA.pm
+++ /dev/null
@@ -1,252 +0,0 @@
-#line 1 "Digest/SHA.pm"
-package Digest::SHA;
-
-require 5.003000;
-
-use strict;
-use warnings;
-use vars qw($VERSION @ISA @EXPORT_OK);
-use Fcntl qw(O_RDONLY);
-use integer;
-
-$VERSION = '5.96';
-
-require Exporter;
-require DynaLoader;
-@ISA = qw(Exporter DynaLoader);
-@EXPORT_OK = qw(
- hmac_sha1 hmac_sha1_base64 hmac_sha1_hex
- hmac_sha224 hmac_sha224_base64 hmac_sha224_hex
- hmac_sha256 hmac_sha256_base64 hmac_sha256_hex
- hmac_sha384 hmac_sha384_base64 hmac_sha384_hex
- hmac_sha512 hmac_sha512_base64 hmac_sha512_hex
- hmac_sha512224 hmac_sha512224_base64 hmac_sha512224_hex
- hmac_sha512256 hmac_sha512256_base64 hmac_sha512256_hex
- sha1 sha1_base64 sha1_hex
- sha224 sha224_base64 sha224_hex
- sha256 sha256_base64 sha256_hex
- sha384 sha384_base64 sha384_hex
- sha512 sha512_base64 sha512_hex
- sha512224 sha512224_base64 sha512224_hex
- sha512256 sha512256_base64 sha512256_hex);
-
-# Inherit from Digest::base if possible
-
-eval {
- require Digest::base;
- push(@ISA, 'Digest::base');
-};
-
-# The following routines aren't time-critical, so they can be left in Perl
-
-sub new {
- my($class, $alg) = @_;
- $alg =~ s/\D+//g if defined $alg;
- if (ref($class)) { # instance method
- if (!defined($alg) || ($alg == $class->algorithm)) {
- sharewind($class);
- return($class);
- }
- return shainit($class, $alg) ? $class : undef;
- }
- $alg = 1 unless defined $alg;
- return $class->newSHA($alg);
-}
-
-BEGIN { *reset = \&new }
-
-sub add_bits {
- my($self, $data, $nbits) = @_;
- unless (defined $nbits) {
- $nbits = length($data);
- $data = pack("B*", $data);
- }
- $nbits = length($data) * 8 if $nbits > length($data) * 8;
- shawrite($data, $nbits, $self);
- return($self);
-}
-
-sub _bail {
- my $msg = shift;
-
- $msg .= ": $!";
- require Carp;
- Carp::croak($msg);
-}
-
-{
- my $_can_T_filehandle;
-
- sub _istext {
- local *FH = shift;
- my $file = shift;
-
- if (! defined $_can_T_filehandle) {
- local $^W = 0;
- my $istext = eval { -T FH };
- $_can_T_filehandle = $@ ? 0 : 1;
- return $_can_T_filehandle ? $istext : -T $file;
- }
- return $_can_T_filehandle ? -T FH : -T $file;
- }
-}
-
-sub _addfile {
- my ($self, $handle) = @_;
-
- my $n;
- my $buf = "";
-
- while (($n = read($handle, $buf, 4096))) {
- $self->add($buf);
- }
- _bail("Read failed") unless defined $n;
-
- $self;
-}
-
-sub addfile {
- my ($self, $file, $mode) = @_;
-
- return(_addfile($self, $file)) unless ref(\$file) eq 'SCALAR';
-
- $mode = defined($mode) ? $mode : "";
- my ($binary, $UNIVERSAL, $BITS, $portable) =
- map { $_ eq $mode } ("b", "U", "0", "p");
-
- ## Always interpret "-" to mean STDIN; otherwise use
- ## sysopen to handle full range of POSIX file names
-
- local *FH;
- $file eq '-' and open(FH, '< -')
- or sysopen(FH, $file, O_RDONLY)
- or _bail('Open failed');
-
- if ($BITS) {
- my ($n, $buf) = (0, "");
- while (($n = read(FH, $buf, 4096))) {
- $buf =~ s/[^01]//g;
- $self->add_bits($buf);
- }
- _bail("Read failed") unless defined $n;
- close(FH);
- return($self);
- }
-
- binmode(FH) if $binary || $portable || $UNIVERSAL;
- if ($UNIVERSAL && _istext(*FH, $file)) {
- $self->_addfileuniv(*FH);
- }
- elsif ($portable && _istext(*FH, $file)) {
- while () {
- s/\015?\015\012/\012/g;
- s/\015/\012/g;
- $self->add($_);
- }
- }
- else { $self->_addfilebin(*FH) }
- close(FH);
-
- $self;
-}
-
-sub getstate {
- my $self = shift;
-
- my $alg = $self->algorithm or return;
- my $state = $self->_getstate or return;
- my $nD = $alg <= 256 ? 8 : 16;
- my $nH = $alg <= 256 ? 32 : 64;
- my $nB = $alg <= 256 ? 64 : 128;
- my($H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) =
- $state =~ /^(.{$nH})(.{$nB})(.{4})(.{4})(.{4})(.{4})(.{4})$/s;
- for ($alg, $H, $block, $blockcnt, $lenhh, $lenhl, $lenlh, $lenll) {
- return unless defined $_;
- }
-
- my @s = ();
- push(@s, "alg:" . $alg);
- push(@s, "H:" . join(":", unpack("H*", $H) =~ /.{$nD}/g));
- push(@s, "block:" . join(":", unpack("H*", $block) =~ /.{2}/g));
- push(@s, "blockcnt:" . unpack("N", $blockcnt));
- push(@s, "lenhh:" . unpack("N", $lenhh));
- push(@s, "lenhl:" . unpack("N", $lenhl));
- push(@s, "lenlh:" . unpack("N", $lenlh));
- push(@s, "lenll:" . unpack("N", $lenll));
- join("\n", @s) . "\n";
-}
-
-sub putstate {
- my($class, $state) = @_;
-
- my %s = ();
- for (split(/\n/, $state)) {
- s/^\s+//;
- s/\s+$//;
- next if (/^(#|$)/);
- my @f = split(/[:\s]+/);
- my $tag = shift(@f);
- $s{$tag} = join('', @f);
- }
-
- # H and block may contain arbitrary values, but check everything else
- grep { $_ == $s{'alg'} } (1,224,256,384,512,512224,512256) or return;
- length($s{'H'}) == ($s{'alg'} <= 256 ? 64 : 128) or return;
- length($s{'block'}) == ($s{'alg'} <= 256 ? 128 : 256) or return;
- {
- no integer;
- for (qw(blockcnt lenhh lenhl lenlh lenll)) {
- 0 <= $s{$_} or return;
- $s{$_} <= 4294967295 or return;
- }
- $s{'blockcnt'} < ($s{'alg'} <= 256 ? 512 : 1024) or return;
- }
-
- my $packed_state = (
- pack("H*", $s{'H'}) .
- pack("H*", $s{'block'}) .
- pack("N", $s{'blockcnt'}) .
- pack("N", $s{'lenhh'}) .
- pack("N", $s{'lenhl'}) .
- pack("N", $s{'lenlh'}) .
- pack("N", $s{'lenll'})
- );
-
- return $class->new($s{'alg'})->_putstate($packed_state);
-}
-
-sub dump {
- my $self = shift;
- my $file = shift;
-
- my $state = $self->getstate or return;
- $file = "-" if (!defined($file) || $file eq "");
-
- local *FH;
- open(FH, "> $file") or return;
- print FH $state;
- close(FH);
-
- return($self);
-}
-
-sub load {
- my $class = shift;
- my $file = shift;
-
- $file = "-" if (!defined($file) || $file eq "");
-
- local *FH;
- open(FH, "< $file") or return;
- my $str = join('', );
- close(FH);
-
- $class->putstate($str);
-}
-
-Digest::SHA->bootstrap($VERSION);
-
-1;
-__END__
-
-#line 824
diff --git a/software/Slic3r-1.3.0.64bit/lib/Digest/base.pm b/software/Slic3r-1.3.0.64bit/lib/Digest/base.pm
deleted file mode 100644
index 285ee03d..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Digest/base.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-#line 1 "Digest/base.pm"
-package Digest::base;
-
-use strict;
-use vars qw($VERSION);
-$VERSION = "1.16";
-
-# subclass is supposed to implement at least these
-sub new;
-sub clone;
-sub add;
-sub digest;
-
-sub reset {
- my $self = shift;
- $self->new(@_); # ugly
-}
-
-sub addfile {
- my ($self, $handle) = @_;
-
- my $n;
- my $buf = "";
-
- while (($n = read($handle, $buf, 4*1024))) {
- $self->add($buf);
- }
- unless (defined $n) {
- require Carp;
- Carp::croak("Read failed: $!");
- }
-
- $self;
-}
-
-sub add_bits {
- my $self = shift;
- my $bits;
- my $nbits;
- if (@_ == 1) {
- my $arg = shift;
- $bits = pack("B*", $arg);
- $nbits = length($arg);
- }
- else {
- ($bits, $nbits) = @_;
- }
- if (($nbits % 8) != 0) {
- require Carp;
- Carp::croak("Number of bits must be multiple of 8 for this algorithm");
- }
- return $self->add(substr($bits, 0, $nbits/8));
-}
-
-sub hexdigest {
- my $self = shift;
- return unpack("H*", $self->digest(@_));
-}
-
-sub b64digest {
- my $self = shift;
- require MIME::Base64;
- my $b64 = MIME::Base64::encode($self->digest(@_), "");
- $b64 =~ s/=+$//;
- return $b64;
-}
-
-1;
-
-__END__
-
-#line 101
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/DynaLoader.pm b/software/Slic3r-1.3.0.64bit/lib/DynaLoader.pm
deleted file mode 100644
index 216f70a1..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/DynaLoader.pm
+++ /dev/null
@@ -1,324 +0,0 @@
-#line 1 "DynaLoader.pm"
-
-# Generated from DynaLoader_pm.PL, this file is unique for every OS
-
-package DynaLoader;
-
-# And Gandalf said: 'Many folk like to know beforehand what is to
-# be set on the table; but those who have laboured to prepare the
-# feast like to keep their secret; for wonder makes the words of
-# praise louder.'
-
-# (Quote from Tolkien suggested by Anno Siegel.)
-#
-# See pod text at end of file for documentation.
-# See also ext/DynaLoader/README in source tree for other information.
-#
-# Tim.Bunce@ig.co.uk, August 1994
-
-BEGIN {
- $VERSION = '1.38';
-}
-
-use Config;
-
-# enable debug/trace messages from DynaLoader perl code
-$dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
-
-#
-# Flags to alter dl_load_file behaviour. Assigned bits:
-# 0x01 make symbols available for linking later dl_load_file's.
-# (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
-# (ignored under VMS; effect is built-in to image linking)
-# (ignored under Android; the linker always uses RTLD_LOCAL)
-#
-# This is called as a class method $module->dl_load_flags. The
-# definition here will be inherited and result on "default" loading
-# behaviour unless a sub-class of DynaLoader defines its own version.
-#
-
-sub dl_load_flags { 0x00 }
-
-($dl_dlext, $dl_so, $dlsrc) = @Config::Config{qw(dlext so dlsrc)};
-
-
-$do_expand = 0;
-
-@dl_require_symbols = (); # names of symbols we need
-@dl_library_path = (); # path to look for files
-
-#XSLoader.pm may have added elements before we were required
-#@dl_shared_objects = (); # shared objects for symbols we have
-#@dl_librefs = (); # things we have loaded
-#@dl_modules = (); # Modules we have loaded
-
-# Initialise @dl_library_path with the 'standard' library path
-# for this platform as determined by Configure.
-
-push(@dl_library_path, split(' ', $Config::Config{libpth}));
-
-
-my $ldlibpthname = $Config::Config{ldlibpthname};
-my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
-my $pthsep = $Config::Config{path_sep};
-
-# Add to @dl_library_path any extra directories we can gather from environment
-# during runtime.
-
-if ($ldlibpthname_defined &&
- exists $ENV{$ldlibpthname}) {
- push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
-}
-
-# E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
-
-if ($ldlibpthname_defined &&
- $ldlibpthname ne 'LD_LIBRARY_PATH' &&
- exists $ENV{LD_LIBRARY_PATH}) {
- push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
-}
-
-
-# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
-# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
-boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
- !defined(&dl_error);
-
-if ($dl_debug) {
- print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
- print STDERR "DynaLoader not linked into this perl\n"
- unless defined(&boot_DynaLoader);
-}
-
-1; # End of main code
-
-
-sub croak { require Carp; Carp::croak(@_) }
-
-sub bootstrap_inherit {
- my $module = $_[0];
- local *isa = *{"$module\::ISA"};
- local @isa = (@isa, 'DynaLoader');
- # Cannot goto due to delocalization. Will report errors on a wrong line?
- bootstrap(@_);
-}
-
-sub bootstrap {
- # use local vars to enable $module.bs script to edit values
- local(@args) = @_;
- local($module) = $args[0];
- local(@dirs, $file);
-
- unless ($module) {
- require Carp;
- Carp::confess("Usage: DynaLoader::bootstrap(module)");
- }
-
- # A common error on platforms which don't support dynamic loading.
- # Since it's fatal and potentially confusing we give a detailed message.
- croak("Can't load module $module, dynamic loading not available in this perl.\n".
- " (You may need to build a new perl executable which either supports\n".
- " dynamic loading or has the $module module statically linked into it.)\n")
- unless defined(&dl_load_file);
-
-
-
- my @modparts = split(/::/,$module);
- my $modfname = $modparts[-1];
- my $modfname_orig = $modfname; # For .bs file search
-
- # Some systems have restrictions on files names for DLL's etc.
- # mod2fname returns appropriate file base name (typically truncated)
- # It may also edit @modparts if required.
- $modfname = &mod2fname(\@modparts) if defined &mod2fname;
-
-
-
- my $modpname = join('/',@modparts);
-
- print STDERR "DynaLoader::bootstrap for $module ",
- "(auto/$modpname/$modfname.$dl_dlext)\n"
- if $dl_debug;
-
- my $dir;
- foreach (@INC) {
-
- $dir = "$_/auto/$modpname";
-
- next unless -d $dir; # skip over uninteresting directories
-
- # check for common cases to avoid autoload of dl_findfile
- my $try = "$dir/$modfname.$dl_dlext";
- last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try);
-
- # no luck here, save dir for possible later dl_findfile search
- push @dirs, $dir;
- }
- # last resort, let dl_findfile have a go in all known locations
- $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
-
- croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
- unless $file; # wording similar to error from 'require'
-
-
- my $bootname = "boot_$module";
- $bootname =~ s/\W/_/g;
- @dl_require_symbols = ($bootname);
-
- # Execute optional '.bootstrap' perl script for this module.
- # The .bs file can be used to configure @dl_resolve_using etc to
- # match the needs of the individual module on this architecture.
- # N.B. The .bs file does not following the naming convention used
- # by mod2fname.
- my $bs = "$dir/$modfname_orig";
- $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
- if (-s $bs) { # only read file if it's not empty
- print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
- eval { do $bs; };
- warn "$bs: $@\n" if $@;
- }
-
- my $boot_symbol_ref;
-
-
-
- # Many dynamic extension loading problems will appear to come from
- # this section of code: XYZ failed at line 123 of DynaLoader.pm.
- # Often these errors are actually occurring in the initialisation
- # C code of the extension XS file. Perl reports the error as being
- # in this perl code simply because this was the last perl code
- # it executed.
-
- my $flags = $module->dl_load_flags;
-
- my $libref = dl_load_file($file, $flags) or
- croak("Can't load '$file' for module $module: ".dl_error());
-
- push(@dl_librefs,$libref); # record loaded object
-
- $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
- croak("Can't find '$bootname' symbol in $file\n");
-
- push(@dl_modules, $module); # record loaded module
-
- boot:
- my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
-
- # See comment block above
-
- push(@dl_shared_objects, $file); # record files loaded
-
- &$xs(@args);
-}
-
-sub dl_findfile {
- # This function does not automatically consider the architecture
- # or the perl library auto directories.
- my (@args) = @_;
- my (@dirs, $dir); # which directories to search
- my (@found); # full paths to real files we have found
- #my $dl_ext= 'xs.dll'; # $Config::Config{'dlext'} suffix for perl extensions
- #my $dl_so = 'dll'; # $Config::Config{'so'} suffix for shared libraries
-
- print STDERR "dl_findfile(@args)\n" if $dl_debug;
-
- # accumulate directories but process files as they appear
- arg: foreach(@args) {
- # Special fast case: full filepath requires no search
-
-
- if (m:/: && -f $_) {
- push(@found,$_);
- last arg unless wantarray;
- next;
- }
-
-
- # Deal with directories first:
- # Using a -L prefix is the preferred option (faster and more robust)
- if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
-
- # Otherwise we try to try to spot directories by a heuristic
- # (this is a more complicated issue than it first appears)
- if (m:/: && -d $_) { push(@dirs, $_); next; }
-
-
-
- # Only files should get this far...
- my(@names, $name); # what filenames to look for
- if (m:-l: ) { # convert -lname to appropriate library name
- s/-l//;
- push(@names,"lib$_.$dl_so");
- push(@names,"lib$_.a");
- } else { # Umm, a bare name. Try various alternatives:
- # these should be ordered with the most likely first
- push(@names,"$_.$dl_dlext") unless m/\.$dl_dlext$/o;
- push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
-
- push(@names,"lib$_.$dl_so") unless m:/:;
- push(@names, $_);
- }
- my $dirsep = '/';
-
- foreach $dir (@dirs, @dl_library_path) {
- next unless -d $dir;
-
- foreach $name (@names) {
- my($file) = "$dir$dirsep$name";
- print STDERR " checking in $dir for $name\n" if $dl_debug;
- $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
- #$file = _check_file($file);
- if ($file) {
- push(@found, $file);
- next arg; # no need to look any further
- }
- }
- }
- }
- if ($dl_debug) {
- foreach(@dirs) {
- print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
- }
- print STDERR "dl_findfile found: @found\n";
- }
- return $found[0] unless wantarray;
- @found;
-}
-
-
-
-sub dl_expandspec {
- my($spec) = @_;
- # Optional function invoked if DynaLoader.pm sets $do_expand.
- # Most systems do not require or use this function.
- # Some systems may implement it in the dl_*.xs file in which case
- # this Perl version should be excluded at build time.
-
- # This function is designed to deal with systems which treat some
- # 'filenames' in a special way. For example VMS 'Logical Names'
- # (something like unix environment variables - but different).
- # This function should recognise such names and expand them into
- # full file paths.
- # Must return undef if $spec is invalid or file does not exist.
-
- my $file = $spec; # default output to input
-
- return undef unless -f $file;
- print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
- $file;
-}
-
-sub dl_find_symbol_anywhere
-{
- my $sym = shift;
- my $libref;
- foreach $libref (@dl_librefs) {
- my $symref = dl_find_symbol($libref,$sym,1);
- return $symref if $symref;
- }
- return undef;
-}
-
-__END__
-
-#line 761
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode.pm b/software/Slic3r-1.3.0.64bit/lib/Encode.pm
deleted file mode 100644
index dc62e5a6..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode.pm
+++ /dev/null
@@ -1,416 +0,0 @@
-#line 1 "Encode.pm"
-#
-# $Id: Encode.pm,v 2.88 2016/11/29 23:30:30 dankogai Exp dankogai $
-#
-package Encode;
-use strict;
-use warnings;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.88 $ =~ /(\d+)/g;
-use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
-use XSLoader ();
-XSLoader::load( __PACKAGE__, $VERSION );
-
-use Exporter 5.57 'import';
-
-# Public, encouraged API is exported by default
-
-our @EXPORT = qw(
- decode decode_utf8 encode encode_utf8 str2bytes bytes2str
- encodings find_encoding find_mime_encoding clone_encoding
-);
-our @FB_FLAGS = qw(
- DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC
- PERLQQ HTMLCREF XMLCREF STOP_AT_PARTIAL
-);
-our @FB_CONSTS = qw(
- FB_DEFAULT FB_CROAK FB_QUIET FB_WARN
- FB_PERLQQ FB_HTMLCREF FB_XMLCREF
-);
-our @EXPORT_OK = (
- qw(
- _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
- is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
- ),
- @FB_FLAGS, @FB_CONSTS,
-);
-
-our %EXPORT_TAGS = (
- all => [ @EXPORT, @EXPORT_OK ],
- default => [ @EXPORT ],
- fallbacks => [ @FB_CONSTS ],
- fallback_all => [ @FB_CONSTS, @FB_FLAGS ],
-);
-
-# Documentation moved after __END__ for speed - NI-S
-
-our $ON_EBCDIC = ( ord("A") == 193 );
-
-use Encode::Alias;
-
-# Make a %Encoding package variable to allow a certain amount of cheating
-our %Encoding;
-our %ExtModule;
-require Encode::Config;
-# See
-# https://bugzilla.redhat.com/show_bug.cgi?id=435505#c2
-# to find why sig handlers inside eval{} are disabled.
-eval {
- local $SIG{__DIE__};
- local $SIG{__WARN__};
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- require Encode::ConfigLocal;
-};
-
-sub encodings {
- my %enc;
- my $arg = $_[1] || '';
- if ( $arg eq ":all" ) {
- %enc = ( %Encoding, %ExtModule );
- }
- else {
- %enc = %Encoding;
- for my $mod ( map { m/::/ ? $_ : "Encode::$_" } @_ ) {
- DEBUG and warn $mod;
- for my $enc ( keys %ExtModule ) {
- $ExtModule{$enc} eq $mod and $enc{$enc} = $mod;
- }
- }
- }
- return sort { lc $a cmp lc $b }
- grep { !/^(?:Internal|Unicode|Guess)$/o } keys %enc;
-}
-
-sub perlio_ok {
- my $obj = ref( $_[0] ) ? $_[0] : find_encoding( $_[0] );
- $obj->can("perlio_ok") and return $obj->perlio_ok();
- return 0; # safety net
-}
-
-sub define_encoding {
- my $obj = shift;
- my $name = shift;
- $Encoding{$name} = $obj;
- my $lc = lc($name);
- define_alias( $lc => $obj ) unless $lc eq $name;
- while (@_) {
- my $alias = shift;
- define_alias( $alias, $obj );
- }
- return $obj;
-}
-
-sub getEncoding {
- my ( $class, $name, $skip_external ) = @_;
-
- defined($name) or return;
-
- $name =~ s/\s+//g; # https://rt.cpan.org/Ticket/Display.html?id=65796
-
- ref($name) && $name->can('renew') and return $name;
- exists $Encoding{$name} and return $Encoding{$name};
- my $lc = lc $name;
- exists $Encoding{$lc} and return $Encoding{$lc};
-
- my $oc = $class->find_alias($name);
- defined($oc) and return $oc;
- $lc ne $name and $oc = $class->find_alias($lc);
- defined($oc) and return $oc;
-
- unless ($skip_external) {
- if ( my $mod = $ExtModule{$name} || $ExtModule{$lc} ) {
- $mod =~ s,::,/,g;
- $mod .= '.pm';
- eval { require $mod; };
- exists $Encoding{$name} and return $Encoding{$name};
- }
- }
- return;
-}
-
-sub find_encoding($;$) {
- my ( $name, $skip_external ) = @_;
- return __PACKAGE__->getEncoding( $name, $skip_external );
-}
-
-sub find_mime_encoding($;$) {
- my ( $mime_name, $skip_external ) = @_;
- eval { require Encode::MIME::Name; };
- $@ and return;
- my $name = Encode::MIME::Name::get_encode_name( $mime_name );
- return find_encoding( $name, $skip_external );
-}
-
-sub resolve_alias($) {
- my $obj = find_encoding(shift);
- defined $obj and return $obj->name;
- return;
-}
-
-sub clone_encoding($) {
- my $obj = find_encoding(shift);
- ref $obj or return;
- eval { require Storable };
- $@ and return;
- return Storable::dclone($obj);
-}
-
-sub encode($$;$) {
- my ( $name, $string, $check ) = @_;
- return undef unless defined $string;
- $string .= ''; # stringify;
- $check ||= 0;
- unless ( defined $name ) {
- require Carp;
- Carp::croak("Encoding name should not be undef");
- }
- my $enc = find_encoding($name);
- unless ( defined $enc ) {
- require Carp;
- Carp::croak("Unknown encoding '$name'");
- }
- # For Unicode, warnings need to be caught and re-issued at this level
- # so that callers can disable utf8 warnings lexically.
- my $octets;
- if ( ref($enc) eq 'Encode::Unicode' ) {
- my $warn = '';
- {
- local $SIG{__WARN__} = sub { $warn = shift };
- $octets = $enc->encode( $string, $check );
- }
- warnings::warnif('utf8', $warn) if length $warn;
- }
- else {
- $octets = $enc->encode( $string, $check );
- }
- $_[1] = $string if $check and !ref $check and !( $check & LEAVE_SRC() );
- return $octets;
-}
-*str2bytes = \&encode;
-
-sub decode($$;$) {
- my ( $name, $octets, $check ) = @_;
- return undef unless defined $octets;
- $octets .= '';
- $check ||= 0;
- my $enc = find_encoding($name);
- unless ( defined $enc ) {
- require Carp;
- Carp::croak("Unknown encoding '$name'");
- }
- # For Unicode, warnings need to be caught and re-issued at this level
- # so that callers can disable utf8 warnings lexically.
- my $string;
- if ( ref($enc) eq 'Encode::Unicode' ) {
- my $warn = '';
- {
- local $SIG{__WARN__} = sub { $warn = shift };
- $string = $enc->decode( $octets, $check );
- }
- warnings::warnif('utf8', $warn) if length $warn;
- }
- else {
- $string = $enc->decode( $octets, $check );
- }
- $_[1] = $octets if $check and !ref $check and !( $check & LEAVE_SRC() );
- return $string;
-}
-*bytes2str = \&decode;
-
-sub from_to($$$;$) {
- my ( $string, $from, $to, $check ) = @_;
- return undef unless defined $string;
- $check ||= 0;
- my $f = find_encoding($from);
- unless ( defined $f ) {
- require Carp;
- Carp::croak("Unknown encoding '$from'");
- }
- my $t = find_encoding($to);
- unless ( defined $t ) {
- require Carp;
- Carp::croak("Unknown encoding '$to'");
- }
-
- # For Unicode, warnings need to be caught and re-issued at this level
- # so that callers can disable utf8 warnings lexically.
- my $uni;
- if ( ref($f) eq 'Encode::Unicode' ) {
- my $warn = '';
- {
- local $SIG{__WARN__} = sub { $warn = shift };
- $uni = $f->decode($string);
- }
- warnings::warnif('utf8', $warn) if length $warn;
- }
- else {
- $uni = $f->decode($string);
- }
-
- if ( ref($t) eq 'Encode::Unicode' ) {
- my $warn = '';
- {
- local $SIG{__WARN__} = sub { $warn = shift };
- $_[0] = $string = $t->encode( $uni, $check );
- }
- warnings::warnif('utf8', $warn) if length $warn;
- }
- else {
- $_[0] = $string = $t->encode( $uni, $check );
- }
-
- return undef if ( $check && length($uni) );
- return defined( $_[0] ) ? length($string) : undef;
-}
-
-sub encode_utf8($) {
- my ($str) = @_;
- return undef unless defined $str;
- utf8::encode($str);
- return $str;
-}
-
-my $utf8enc;
-
-sub decode_utf8($;$) {
- my ( $octets, $check ) = @_;
- return undef unless defined $octets;
- $octets .= '';
- $check ||= 0;
- $utf8enc ||= find_encoding('utf8');
- my $string = $utf8enc->decode( $octets, $check );
- $_[0] = $octets if $check and !ref $check and !( $check & LEAVE_SRC() );
- return $string;
-}
-
-# sub decode_utf8($;$) {
-# my ( $str, $check ) = @_;
-# return $str if is_utf8($str);
-# if ($check) {
-# return decode( "utf8", $str, $check );
-# }
-# else {
-# return decode( "utf8", $str );
-# return $str;
-# }
-# }
-
-predefine_encodings(1);
-
-#
-# This is to restore %Encoding if really needed;
-#
-
-sub predefine_encodings {
- require Encode::Encoding;
- no warnings 'redefine';
- my $use_xs = shift;
- if ($ON_EBCDIC) {
-
- # was in Encode::UTF_EBCDIC
- package Encode::UTF_EBCDIC;
- push @Encode::UTF_EBCDIC::ISA, 'Encode::Encoding';
- *decode = sub {
- my ( undef, $str, $chk ) = @_;
- my $res = '';
- for ( my $i = 0 ; $i < length($str) ; $i++ ) {
- $res .=
- chr(
- utf8::unicode_to_native( ord( substr( $str, $i, 1 ) ) )
- );
- }
- $_[1] = '' if $chk;
- return $res;
- };
- *encode = sub {
- my ( undef, $str, $chk ) = @_;
- my $res = '';
- for ( my $i = 0 ; $i < length($str) ; $i++ ) {
- $res .=
- chr(
- utf8::native_to_unicode( ord( substr( $str, $i, 1 ) ) )
- );
- }
- $_[1] = '' if $chk;
- return $res;
- };
- $Encode::Encoding{Unicode} =
- bless { Name => "UTF_EBCDIC" } => "Encode::UTF_EBCDIC";
- }
- else {
-
- package Encode::Internal;
- push @Encode::Internal::ISA, 'Encode::Encoding';
- *decode = sub {
- my ( undef, $str, $chk ) = @_;
- utf8::upgrade($str);
- $_[1] = '' if $chk;
- return $str;
- };
- *encode = \&decode;
- $Encode::Encoding{Unicode} =
- bless { Name => "Internal" } => "Encode::Internal";
- }
- {
- # https://rt.cpan.org/Public/Bug/Display.html?id=103253
- package Encode::XS;
- push @Encode::XS::ISA, 'Encode::Encoding';
- }
- {
-
- # was in Encode::utf8
- package Encode::utf8;
- push @Encode::utf8::ISA, 'Encode::Encoding';
-
- #
- if ($use_xs) {
- Encode::DEBUG and warn __PACKAGE__, " XS on";
- *decode = \&decode_xs;
- *encode = \&encode_xs;
- }
- else {
- Encode::DEBUG and warn __PACKAGE__, " XS off";
- *decode = sub {
- my ( undef, $octets, $chk ) = @_;
- my $str = Encode::decode_utf8($octets);
- if ( defined $str ) {
- $_[1] = '' if $chk;
- return $str;
- }
- return undef;
- };
- *encode = sub {
- my ( undef, $string, $chk ) = @_;
- my $octets = Encode::encode_utf8($string);
- $_[1] = '' if $chk;
- return $octets;
- };
- }
- *cat_decode = sub { # ($obj, $dst, $src, $pos, $trm, $chk)
- # currently ignores $chk
- my ( undef, undef, undef, $pos, $trm ) = @_;
- my ( $rdst, $rsrc, $rpos ) = \@_[ 1, 2, 3 ];
- use bytes;
- if ( ( my $npos = index( $$rsrc, $trm, $pos ) ) >= 0 ) {
- $$rdst .=
- substr( $$rsrc, $pos, $npos - $pos + length($trm) );
- $$rpos = $npos + length($trm);
- return 1;
- }
- $$rdst .= substr( $$rsrc, $pos );
- $$rpos = length($$rsrc);
- return '';
- };
- $Encode::Encoding{utf8} =
- bless { Name => "utf8" } => "Encode::utf8";
- $Encode::Encoding{"utf-8-strict"} =
- bless { Name => "utf-8-strict", strict_utf8 => 1 }
- => "Encode::utf8";
- }
-}
-
-1;
-
-__END__
-
-#line 1133
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/Alias.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/Alias.pm
deleted file mode 100644
index 0ffda44d..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/Alias.pm
+++ /dev/null
@@ -1,294 +0,0 @@
-#line 1 "Encode/Alias.pm"
-package Encode::Alias;
-use strict;
-use warnings;
-no warnings 'redefine';
-our $VERSION = do { my @r = ( q$Revision: 2.21 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
-
-use Exporter 'import';
-
-# Public, encouraged API is exported by default
-
-our @EXPORT =
- qw (
- define_alias
- find_alias
-);
-
-our @Alias; # ordered matching list
-our %Alias; # cached known aliases
-
-sub find_alias {
- require Encode;
- my $class = shift;
- my $find = shift;
- unless ( exists $Alias{$find} ) {
- $Alias{$find} = undef; # Recursion guard
- for ( my $i = 0 ; $i < @Alias ; $i += 2 ) {
- my $alias = $Alias[$i];
- my $val = $Alias[ $i + 1 ];
- my $new;
- if ( ref($alias) eq 'Regexp' && $find =~ $alias ) {
- DEBUG and warn "eval $val";
- $new = eval $val;
- DEBUG and $@ and warn "$val, $@";
- }
- elsif ( ref($alias) eq 'CODE' ) {
- DEBUG and warn "$alias", "->", "($find)";
- $new = $alias->($find);
- }
- elsif ( lc($find) eq lc($alias) ) {
- $new = $val;
- }
- if ( defined($new) ) {
- next if $new eq $find; # avoid (direct) recursion on bugs
- DEBUG and warn "$alias, $new";
- my $enc =
- ( ref($new) ) ? $new : Encode::find_encoding($new);
- if ($enc) {
- $Alias{$find} = $enc;
- last;
- }
- }
- }
-
- # case insensitive search when canonical is not in all lowercase
- # RT ticket #7835
- unless ( $Alias{$find} ) {
- my $lcfind = lc($find);
- for my $name ( keys %Encode::Encoding, keys %Encode::ExtModule )
- {
- $lcfind eq lc($name) or next;
- $Alias{$find} = Encode::find_encoding($name);
- DEBUG and warn "$find => $name";
- }
- }
- }
- if (DEBUG) {
- my $name;
- if ( my $e = $Alias{$find} ) {
- $name = $e->name;
- }
- else {
- $name = "";
- }
- warn "find_alias($class, $find)->name = $name";
- }
- return $Alias{$find};
-}
-
-sub define_alias {
- while (@_) {
- my $alias = shift;
- my $name = shift;
- unshift( @Alias, $alias => $name ) # newer one has precedence
- if defined $alias;
- if ( ref($alias) ) {
-
- # clear %Alias cache to allow overrides
- my @a = keys %Alias;
- for my $k (@a) {
- if ( ref($alias) eq 'Regexp' && $k =~ $alias ) {
- DEBUG and warn "delete \$Alias\{$k\}";
- delete $Alias{$k};
- }
- elsif ( ref($alias) eq 'CODE' && $alias->($k) ) {
- DEBUG and warn "delete \$Alias\{$k\}";
- delete $Alias{$k};
- }
- }
- }
- elsif (defined $alias) {
- DEBUG and warn "delete \$Alias\{$alias\}";
- delete $Alias{$alias};
- }
- elsif (DEBUG) {
- require Carp;
- Carp::croak("undef \$alias");
- }
- }
-}
-
-# Allow latin-1 style names as well
-# 0 1 2 3 4 5 6 7 8 9 10
-our @Latin2iso = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 );
-
-# Allow winlatin1 style names as well
-our %Winlatin2cp = (
- 'latin1' => 1252,
- 'latin2' => 1250,
- 'cyrillic' => 1251,
- 'greek' => 1253,
- 'turkish' => 1254,
- 'hebrew' => 1255,
- 'arabic' => 1256,
- 'baltic' => 1257,
- 'vietnamese' => 1258,
-);
-
-init_aliases();
-
-sub undef_aliases {
- @Alias = ();
- %Alias = ();
-}
-
-sub init_aliases {
- require Encode;
- undef_aliases();
-
- # Try all-lower-case version should all else fails
- define_alias( qr/^(.*)$/ => '"\L$1"' );
-
- # UTF/UCS stuff
- define_alias( qr/^(unicode-1-1-)?UTF-?7$/i => '"UTF-7"' );
- define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' );
- define_alias(
- qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"',
- qr/^UCS-?4-?(BE|LE|)?$/i => 'uc("UTF-32$1")',
- qr/^iso-10646-1$/i => '"UCS-2BE"'
- );
- define_alias(
- qr/^UTF-?(16|32)-?BE$/i => '"UTF-$1BE"',
- qr/^UTF-?(16|32)-?LE$/i => '"UTF-$1LE"',
- qr/^UTF-?(16|32)$/i => '"UTF-$1"',
- );
-
- # ASCII
- define_alias( qr/^(?:US-?)ascii$/i => '"ascii"' );
- define_alias( 'C' => 'ascii' );
- define_alias( qr/\b(?:ISO[-_]?)?646(?:[-_]?US)?$/i => '"ascii"' );
-
- # Allow variants of iso-8859-1 etc.
- define_alias( qr/\biso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' );
-
- # At least HP-UX has these.
- define_alias( qr/\biso8859(\d+)$/i => '"iso-8859-$1"' );
-
- # More HP stuff.
- define_alias(
- qr/\b(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i =>
- '"${1}8"' );
-
- # The Official name of ASCII.
- define_alias( qr/\bANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' );
-
- # This is a font issue, not an encoding issue.
- # (The currency symbol of the Latin 1 upper half
- # has been redefined as the euro symbol.)
- define_alias( qr/^(.+)\@euro$/i => '"$1"' );
-
- define_alias( qr/\b(?:iso[-_]?)?latin[-_]?(\d+)$/i =>
-'defined $Encode::Alias::Latin2iso[$1] ? "iso-8859-$Encode::Alias::Latin2iso[$1]" : undef'
- );
-
- define_alias(
- qr/\bwin(latin[12]|cyrillic|baltic|greek|turkish|
- hebrew|arabic|baltic|vietnamese)$/ix =>
- '"cp" . $Encode::Alias::Winlatin2cp{lc($1)}'
- );
-
- # Common names for non-latin preferred MIME names
- define_alias(
- 'ascii' => 'US-ascii',
- 'cyrillic' => 'iso-8859-5',
- 'arabic' => 'iso-8859-6',
- 'greek' => 'iso-8859-7',
- 'hebrew' => 'iso-8859-8',
- 'thai' => 'iso-8859-11',
- );
- # RT #20781
- define_alias(qr/\btis-?620\b/i => '"iso-8859-11"');
-
- # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN.
- # And Microsoft has their own naming (again, surprisingly).
- # And windows-* is registered in IANA!
- define_alias(
- qr/\b(?:cp|ibm|ms|windows)[-_ ]?(\d{2,4})$/i => '"cp$1"' );
-
- # Sometimes seen with a leading zero.
- # define_alias( qr/\bcp037\b/i => '"cp37"');
-
- # Mac Mappings
- # predefined in *.ucm; unneeded
- # define_alias( qr/\bmacIcelandic$/i => '"macIceland"');
- define_alias( qr/^(?:x[_-])?mac[_-](.*)$/i => '"mac$1"' );
- # http://rt.cpan.org/Ticket/Display.html?id=36326
- define_alias( qr/^macintosh$/i => '"MacRoman"' );
- # https://rt.cpan.org/Ticket/Display.html?id=78125
- define_alias( qr/^macce$/i => '"MacCentralEurRoman"' );
- # Ououououou. gone. They are different!
- # define_alias( qr/\bmacRomanian$/i => '"macRumanian"');
-
- # Standardize on the dashed versions.
- define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' );
-
- unless ($Encode::ON_EBCDIC) {
-
- # for Encode::CN
- define_alias( qr/\beuc.*cn$/i => '"euc-cn"' );
- define_alias( qr/\bcn.*euc$/i => '"euc-cn"' );
-
- # define_alias( qr/\bGB[- ]?(\d+)$/i => '"euc-cn"' )
- # CP936 doesn't have vendor-addon for GBK, so they're identical.
- define_alias( qr/^gbk$/i => '"cp936"' );
-
- # This fixes gb2312 vs. euc-cn confusion, practically
- define_alias( qr/\bGB[-_ ]?2312(?!-?raw)/i => '"euc-cn"' );
-
- # for Encode::JP
- define_alias( qr/\bjis$/i => '"7bit-jis"' );
- define_alias( qr/\beuc.*jp$/i => '"euc-jp"' );
- define_alias( qr/\bjp.*euc$/i => '"euc-jp"' );
- define_alias( qr/\bujis$/i => '"euc-jp"' );
- define_alias( qr/\bshift.*jis$/i => '"shiftjis"' );
- define_alias( qr/\bsjis$/i => '"shiftjis"' );
- define_alias( qr/\bwindows-31j$/i => '"cp932"' );
-
- # for Encode::KR
- define_alias( qr/\beuc.*kr$/i => '"euc-kr"' );
- define_alias( qr/\bkr.*euc$/i => '"euc-kr"' );
-
- # This fixes ksc5601 vs. euc-kr confusion, practically
- define_alias( qr/(?:x-)?uhc$/i => '"cp949"' );
- define_alias( qr/(?:x-)?windows-949$/i => '"cp949"' );
- define_alias( qr/\bks_c_5601-1987$/i => '"cp949"' );
-
- # for Encode::TW
- define_alias( qr/\bbig-?5$/i => '"big5-eten"' );
- define_alias( qr/\bbig5-?et(?:en)?$/i => '"big5-eten"' );
- define_alias( qr/\btca[-_]?big5$/i => '"big5-eten"' );
- define_alias( qr/\bbig5-?hk(?:scs)?$/i => '"big5-hkscs"' );
- define_alias( qr/\bhk(?:scs)?[-_]?big5$/i => '"big5-hkscs"' );
- }
-
- # https://github.com/dankogai/p5-encode/issues/37
- define_alias(qr/cp65000/i => '"UTF-7"');
- define_alias(qr/cp65001/i => '"utf-8-strict"');
-
- # utf8 is blessed :)
- define_alias( qr/\bUTF-8$/i => '"utf-8-strict"' );
-
- # At last, Map white space and _ to '-'
- define_alias( qr/^(\S+)[\s_]+(.*)$/i => '"$1-$2"' );
-}
-
-1;
-__END__
-
-# TODO: HP-UX '8' encodings arabic8 greek8 hebrew8 kana8 thai8 turkish8
-# TODO: HP-UX '15' encodings japanese15 korean15 roi15
-# TODO: Cyrillic encoding ISO-IR-111 (useful?)
-# TODO: Armenian encoding ARMSCII-8
-# TODO: Hebrew encoding ISO-8859-8-1
-# TODO: Thai encoding TCVN
-# TODO: Vietnamese encodings VPS
-# TODO: Mac Asian+African encodings: Arabic Armenian Bengali Burmese
-# ChineseSimp ChineseTrad Devanagari Ethiopic ExtArabic
-# Farsi Georgian Gujarati Gurmukhi Hebrew Japanese
-# Kannada Khmer Korean Laotian Malayalam Mongolian
-# Oriya Sinhalese Symbol Tamil Telugu Tibetan Vietnamese
-
-#line 395
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/Byte.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/Byte.pm
deleted file mode 100644
index abbc57cf..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/Byte.pm
+++ /dev/null
@@ -1,14 +0,0 @@
-#line 1 "Encode/Byte.pm"
-package Encode::Byte;
-use strict;
-use warnings;
-use Encode;
-our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-
-use XSLoader;
-XSLoader::load( __PACKAGE__, $VERSION );
-
-1;
-__END__
-
-#line 121
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/Config.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/Config.pm
deleted file mode 100644
index 8385c5b9..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/Config.pm
+++ /dev/null
@@ -1,167 +0,0 @@
-#line 1 "Encode/Config.pm"
-#
-# Demand-load module list
-#
-package Encode::Config;
-our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-
-use strict;
-use warnings;
-
-our %ExtModule = (
-
- # Encode::Byte
- #iso-8859-1 is in Encode.pm itself
- 'iso-8859-2' => 'Encode::Byte',
- 'iso-8859-3' => 'Encode::Byte',
- 'iso-8859-4' => 'Encode::Byte',
- 'iso-8859-5' => 'Encode::Byte',
- 'iso-8859-6' => 'Encode::Byte',
- 'iso-8859-7' => 'Encode::Byte',
- 'iso-8859-8' => 'Encode::Byte',
- 'iso-8859-9' => 'Encode::Byte',
- 'iso-8859-10' => 'Encode::Byte',
- 'iso-8859-11' => 'Encode::Byte',
- 'iso-8859-13' => 'Encode::Byte',
- 'iso-8859-14' => 'Encode::Byte',
- 'iso-8859-15' => 'Encode::Byte',
- 'iso-8859-16' => 'Encode::Byte',
- 'koi8-f' => 'Encode::Byte',
- 'koi8-r' => 'Encode::Byte',
- 'koi8-u' => 'Encode::Byte',
- 'viscii' => 'Encode::Byte',
- 'cp424' => 'Encode::Byte',
- 'cp437' => 'Encode::Byte',
- 'cp737' => 'Encode::Byte',
- 'cp775' => 'Encode::Byte',
- 'cp850' => 'Encode::Byte',
- 'cp852' => 'Encode::Byte',
- 'cp855' => 'Encode::Byte',
- 'cp856' => 'Encode::Byte',
- 'cp857' => 'Encode::Byte',
- 'cp858' => 'Encode::Byte',
- 'cp860' => 'Encode::Byte',
- 'cp861' => 'Encode::Byte',
- 'cp862' => 'Encode::Byte',
- 'cp863' => 'Encode::Byte',
- 'cp864' => 'Encode::Byte',
- 'cp865' => 'Encode::Byte',
- 'cp866' => 'Encode::Byte',
- 'cp869' => 'Encode::Byte',
- 'cp874' => 'Encode::Byte',
- 'cp1006' => 'Encode::Byte',
- 'cp1250' => 'Encode::Byte',
- 'cp1251' => 'Encode::Byte',
- 'cp1252' => 'Encode::Byte',
- 'cp1253' => 'Encode::Byte',
- 'cp1254' => 'Encode::Byte',
- 'cp1255' => 'Encode::Byte',
- 'cp1256' => 'Encode::Byte',
- 'cp1257' => 'Encode::Byte',
- 'cp1258' => 'Encode::Byte',
- 'AdobeStandardEncoding' => 'Encode::Byte',
- 'MacArabic' => 'Encode::Byte',
- 'MacCentralEurRoman' => 'Encode::Byte',
- 'MacCroatian' => 'Encode::Byte',
- 'MacCyrillic' => 'Encode::Byte',
- 'MacFarsi' => 'Encode::Byte',
- 'MacGreek' => 'Encode::Byte',
- 'MacHebrew' => 'Encode::Byte',
- 'MacIcelandic' => 'Encode::Byte',
- 'MacRoman' => 'Encode::Byte',
- 'MacRomanian' => 'Encode::Byte',
- 'MacRumanian' => 'Encode::Byte',
- 'MacSami' => 'Encode::Byte',
- 'MacThai' => 'Encode::Byte',
- 'MacTurkish' => 'Encode::Byte',
- 'MacUkrainian' => 'Encode::Byte',
- 'nextstep' => 'Encode::Byte',
- 'hp-roman8' => 'Encode::Byte',
- #'gsm0338' => 'Encode::Byte',
- 'gsm0338' => 'Encode::GSM0338',
-
- # Encode::EBCDIC
- 'cp37' => 'Encode::EBCDIC',
- 'cp500' => 'Encode::EBCDIC',
- 'cp875' => 'Encode::EBCDIC',
- 'cp1026' => 'Encode::EBCDIC',
- 'cp1047' => 'Encode::EBCDIC',
- 'posix-bc' => 'Encode::EBCDIC',
-
- # Encode::Symbol
- 'dingbats' => 'Encode::Symbol',
- 'symbol' => 'Encode::Symbol',
- 'AdobeSymbol' => 'Encode::Symbol',
- 'AdobeZdingbat' => 'Encode::Symbol',
- 'MacDingbats' => 'Encode::Symbol',
- 'MacSymbol' => 'Encode::Symbol',
-
- # Encode::Unicode
- 'UCS-2BE' => 'Encode::Unicode',
- 'UCS-2LE' => 'Encode::Unicode',
- 'UTF-16' => 'Encode::Unicode',
- 'UTF-16BE' => 'Encode::Unicode',
- 'UTF-16LE' => 'Encode::Unicode',
- 'UTF-32' => 'Encode::Unicode',
- 'UTF-32BE' => 'Encode::Unicode',
- 'UTF-32LE' => 'Encode::Unicode',
- 'UTF-7' => 'Encode::Unicode::UTF7',
-);
-
-unless ( ord("A") == 193 ) {
- %ExtModule = (
- %ExtModule,
- 'euc-cn' => 'Encode::CN',
- 'gb12345-raw' => 'Encode::CN',
- 'gb2312-raw' => 'Encode::CN',
- 'hz' => 'Encode::CN',
- 'iso-ir-165' => 'Encode::CN',
- 'cp936' => 'Encode::CN',
- 'MacChineseSimp' => 'Encode::CN',
-
- '7bit-jis' => 'Encode::JP',
- 'euc-jp' => 'Encode::JP',
- 'iso-2022-jp' => 'Encode::JP',
- 'iso-2022-jp-1' => 'Encode::JP',
- 'jis0201-raw' => 'Encode::JP',
- 'jis0208-raw' => 'Encode::JP',
- 'jis0212-raw' => 'Encode::JP',
- 'cp932' => 'Encode::JP',
- 'MacJapanese' => 'Encode::JP',
- 'shiftjis' => 'Encode::JP',
-
- 'euc-kr' => 'Encode::KR',
- 'iso-2022-kr' => 'Encode::KR',
- 'johab' => 'Encode::KR',
- 'ksc5601-raw' => 'Encode::KR',
- 'cp949' => 'Encode::KR',
- 'MacKorean' => 'Encode::KR',
-
- 'big5-eten' => 'Encode::TW',
- 'big5-hkscs' => 'Encode::TW',
- 'cp950' => 'Encode::TW',
- 'MacChineseTrad' => 'Encode::TW',
-
- #'big5plus' => 'Encode::HanExtra',
- #'euc-tw' => 'Encode::HanExtra',
- #'gb18030' => 'Encode::HanExtra',
-
- 'MIME-Header' => 'Encode::MIME::Header',
- 'MIME-B' => 'Encode::MIME::Header',
- 'MIME-Q' => 'Encode::MIME::Header',
-
- 'MIME-Header-ISO_2022_JP' => 'Encode::MIME::Header::ISO_2022_JP',
- );
-}
-
-#
-# Why not export ? to keep ConfigLocal Happy!
-#
-while ( my ( $enc, $mod ) = each %ExtModule ) {
- $Encode::ExtModule{$enc} = $mod;
-}
-
-1;
-__END__
-
-#line 171
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/Encoding.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/Encoding.pm
deleted file mode 100644
index 0a75d432..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/Encoding.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-#line 1 "Encode/Encoding.pm"
-package Encode::Encoding;
-
-# Base class for classes which implement encodings
-use strict;
-use warnings;
-our $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-
-require Encode;
-
-sub DEBUG { 0 }
-
-sub Define {
- my $obj = shift;
- my $canonical = shift;
- $obj = bless { Name => $canonical }, $obj unless ref $obj;
-
- # warn "$canonical => $obj\n";
- Encode::define_encoding( $obj, $canonical, @_ );
-}
-
-sub name { return shift->{'Name'} }
-
-sub mime_name{
- require Encode::MIME::Name;
- return Encode::MIME::Name::get_mime_name(shift->name);
-}
-
-# sub renew { return $_[0] }
-
-sub renew {
- my $self = shift;
- my $clone = bless {%$self} => ref($self);
- $clone->{renewed}++; # so the caller can see it
- DEBUG and warn $clone->{renewed};
- return $clone;
-}
-
-sub renewed { return $_[0]->{renewed} || 0 }
-
-*new_sequence = \&renew;
-
-sub needs_lines { 0 }
-
-sub perlio_ok {
- eval { require PerlIO::encoding };
- return $@ ? 0 : 1;
-}
-
-# (Temporary|legacy) methods
-
-sub toUnicode { shift->decode(@_) }
-sub fromUnicode { shift->encode(@_) }
-
-#
-# Needs to be overloaded or just croak
-#
-
-sub encode {
- require Carp;
- my $obj = shift;
- my $class = ref($obj) ? ref($obj) : $obj;
- Carp::croak( $class . "->encode() not defined!" );
-}
-
-sub decode {
- require Carp;
- my $obj = shift;
- my $class = ref($obj) ? ref($obj) : $obj;
- Carp::croak( $class . "->encode() not defined!" );
-}
-
-sub DESTROY { }
-
-1;
-__END__
-
-#line 361
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/Locale.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/Locale.pm
deleted file mode 100644
index aaf6dedc..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/Locale.pm
+++ /dev/null
@@ -1,181 +0,0 @@
-#line 1 "Encode/Locale.pm"
-package Encode::Locale;
-
-use strict;
-our $VERSION = "1.05";
-
-use base 'Exporter';
-our @EXPORT_OK = qw(
- decode_argv env
- $ENCODING_LOCALE $ENCODING_LOCALE_FS
- $ENCODING_CONSOLE_IN $ENCODING_CONSOLE_OUT
-);
-
-use Encode ();
-use Encode::Alias ();
-
-our $ENCODING_LOCALE;
-our $ENCODING_LOCALE_FS;
-our $ENCODING_CONSOLE_IN;
-our $ENCODING_CONSOLE_OUT;
-
-sub DEBUG () { 0 }
-
-sub _init {
- if ($^O eq "MSWin32") {
- unless ($ENCODING_LOCALE) {
- # Try to obtain what the Windows ANSI code page is
- eval {
- unless (defined &GetACP) {
- require Win32;
- eval { Win32::GetACP() };
- *GetACP = sub { &Win32::GetACP } unless $@;
- }
- unless (defined &GetACP) {
- require Win32::API;
- Win32::API->Import('kernel32', 'int GetACP()');
- }
- if (defined &GetACP) {
- my $cp = GetACP();
- $ENCODING_LOCALE = "cp$cp" if $cp;
- }
- };
- }
-
- unless ($ENCODING_CONSOLE_IN) {
- # only test one since set together
- unless (defined &GetInputCP) {
- eval {
- require Win32;
- eval { Win32::GetConsoleCP() };
- # manually "import" it since Win32->import refuses
- *GetInputCP = sub { &Win32::GetConsoleCP } unless $@;
- *GetOutputCP = sub { &Win32::GetConsoleOutputCP } unless $@;
- };
- unless (defined &GetInputCP) {
- eval {
- # try Win32::Console module for codepage to use
- require Win32::Console;
- eval { Win32::Console::InputCP() };
- *GetInputCP = sub { &Win32::Console::InputCP }
- unless $@;
- *GetOutputCP = sub { &Win32::Console::OutputCP }
- unless $@;
- };
- }
- unless (defined &GetInputCP) {
- # final fallback
- *GetInputCP = *GetOutputCP = sub {
- # another fallback that could work is:
- # reg query HKLM\System\CurrentControlSet\Control\Nls\CodePage /v ACP
- ((qx(chcp) || '') =~ /^Active code page: (\d+)/)
- ? $1 : ();
- };
- }
- }
- my $cp = GetInputCP();
- $ENCODING_CONSOLE_IN = "cp$cp" if $cp;
- $cp = GetOutputCP();
- $ENCODING_CONSOLE_OUT = "cp$cp" if $cp;
- }
- }
-
- unless ($ENCODING_LOCALE) {
- eval {
- require I18N::Langinfo;
- $ENCODING_LOCALE = I18N::Langinfo::langinfo(I18N::Langinfo::CODESET());
-
- # Workaround of Encode < v2.25. The "646" encoding alias was
- # introduced in Encode-2.25, but we don't want to require that version
- # quite yet. Should avoid the CPAN testers failure reported from
- # openbsd-4.7/perl-5.10.0 combo.
- $ENCODING_LOCALE = "ascii" if $ENCODING_LOCALE eq "646";
-
- # https://rt.cpan.org/Ticket/Display.html?id=66373
- $ENCODING_LOCALE = "hp-roman8" if $^O eq "hpux" && $ENCODING_LOCALE eq "roman8";
- };
- $ENCODING_LOCALE ||= $ENCODING_CONSOLE_IN;
- }
-
- if ($^O eq "darwin") {
- $ENCODING_LOCALE_FS ||= "UTF-8";
- }
-
- # final fallback
- $ENCODING_LOCALE ||= $^O eq "MSWin32" ? "cp1252" : "UTF-8";
- $ENCODING_LOCALE_FS ||= $ENCODING_LOCALE;
- $ENCODING_CONSOLE_IN ||= $ENCODING_LOCALE;
- $ENCODING_CONSOLE_OUT ||= $ENCODING_CONSOLE_IN;
-
- unless (Encode::find_encoding($ENCODING_LOCALE)) {
- my $foundit;
- if (lc($ENCODING_LOCALE) eq "gb18030") {
- eval {
- require Encode::HanExtra;
- };
- if ($@) {
- die "Need Encode::HanExtra to be installed to support locale codeset ($ENCODING_LOCALE), stopped";
- }
- $foundit++ if Encode::find_encoding($ENCODING_LOCALE);
- }
- die "The locale codeset ($ENCODING_LOCALE) isn't one that perl can decode, stopped"
- unless $foundit;
-
- }
-
- # use Data::Dump; ddx $ENCODING_LOCALE, $ENCODING_LOCALE_FS, $ENCODING_CONSOLE_IN, $ENCODING_CONSOLE_OUT;
-}
-
-_init();
-Encode::Alias::define_alias(sub {
- no strict 'refs';
- no warnings 'once';
- return ${"ENCODING_" . uc(shift)};
-}, "locale");
-
-sub _flush_aliases {
- no strict 'refs';
- for my $a (keys %Encode::Alias::Alias) {
- if (defined ${"ENCODING_" . uc($a)}) {
- delete $Encode::Alias::Alias{$a};
- warn "Flushed alias cache for $a" if DEBUG;
- }
- }
-}
-
-sub reinit {
- $ENCODING_LOCALE = shift;
- $ENCODING_LOCALE_FS = shift;
- $ENCODING_CONSOLE_IN = $ENCODING_LOCALE;
- $ENCODING_CONSOLE_OUT = $ENCODING_LOCALE;
- _init();
- _flush_aliases();
-}
-
-sub decode_argv {
- die if defined wantarray;
- for (@ARGV) {
- $_ = Encode::decode(locale => $_, @_);
- }
-}
-
-sub env {
- my $k = Encode::encode(locale => shift);
- my $old = $ENV{$k};
- if (@_) {
- my $v = shift;
- if (defined $v) {
- $ENV{$k} = Encode::encode(locale => $v);
- }
- else {
- delete $ENV{$k};
- }
- }
- return Encode::decode(locale => $old) if defined wantarray;
-}
-
-1;
-
-__END__
-
-#line 374
diff --git a/software/Slic3r-1.3.0.64bit/lib/Encode/MIME/Name.pm b/software/Slic3r-1.3.0.64bit/lib/Encode/MIME/Name.pm
deleted file mode 100644
index 52d4f4be..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Encode/MIME/Name.pm
+++ /dev/null
@@ -1,95 +0,0 @@
-#line 1 "Encode/MIME/Name.pm"
-package Encode::MIME::Name;
-use strict;
-use warnings;
-our $VERSION = do { my @r = ( q$Revision: 1.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
-
-# NOTE: This table must be 1:1 mapping
-our %MIME_NAME_OF = (
- 'AdobeStandardEncoding' => 'Adobe-Standard-Encoding',
- 'AdobeSymbol' => 'Adobe-Symbol-Encoding',
- 'ascii' => 'US-ASCII',
- 'big5-hkscs' => 'Big5-HKSCS',
- 'cp1026' => 'IBM1026',
- 'cp1047' => 'IBM1047',
- 'cp1250' => 'windows-1250',
- 'cp1251' => 'windows-1251',
- 'cp1252' => 'windows-1252',
- 'cp1253' => 'windows-1253',
- 'cp1254' => 'windows-1254',
- 'cp1255' => 'windows-1255',
- 'cp1256' => 'windows-1256',
- 'cp1257' => 'windows-1257',
- 'cp1258' => 'windows-1258',
- 'cp37' => 'IBM037',
- 'cp424' => 'IBM424',
- 'cp437' => 'IBM437',
- 'cp500' => 'IBM500',
- 'cp775' => 'IBM775',
- 'cp850' => 'IBM850',
- 'cp852' => 'IBM852',
- 'cp855' => 'IBM855',
- 'cp857' => 'IBM857',
- 'cp860' => 'IBM860',
- 'cp861' => 'IBM861',
- 'cp862' => 'IBM862',
- 'cp863' => 'IBM863',
- 'cp864' => 'IBM864',
- 'cp865' => 'IBM865',
- 'cp866' => 'IBM866',
- 'cp869' => 'IBM869',
- 'cp936' => 'GBK',
- 'euc-jp' => 'EUC-JP',
- 'euc-kr' => 'EUC-KR',
- #'gb2312-raw' => 'GB2312', # no, you're wrong, I18N::Charset
- 'hp-roman8' => 'hp-roman8',
- 'hz' => 'HZ-GB-2312',
- 'iso-2022-jp' => 'ISO-2022-JP',
- 'iso-2022-jp-1' => 'ISO-2022-JP-1',
- 'iso-2022-kr' => 'ISO-2022-KR',
- 'iso-8859-1' => 'ISO-8859-1',
- 'iso-8859-10' => 'ISO-8859-10',
- 'iso-8859-13' => 'ISO-8859-13',
- 'iso-8859-14' => 'ISO-8859-14',
- 'iso-8859-15' => 'ISO-8859-15',
- 'iso-8859-16' => 'ISO-8859-16',
- 'iso-8859-2' => 'ISO-8859-2',
- 'iso-8859-3' => 'ISO-8859-3',
- 'iso-8859-4' => 'ISO-8859-4',
- 'iso-8859-5' => 'ISO-8859-5',
- 'iso-8859-6' => 'ISO-8859-6',
- 'iso-8859-7' => 'ISO-8859-7',
- 'iso-8859-8' => 'ISO-8859-8',
- 'iso-8859-9' => 'ISO-8859-9',
- #'jis0201-raw' => 'JIS_X0201',
- #'jis0208-raw' => 'JIS_C6226-1983',
- #'jis0212-raw' => 'JIS_X0212-1990',
- 'koi8-r' => 'KOI8-R',
- 'koi8-u' => 'KOI8-U',
- #'ksc5601-raw' => 'KS_C_5601-1987',
- 'shiftjis' => 'Shift_JIS',
- 'UTF-16' => 'UTF-16',
- 'UTF-16BE' => 'UTF-16BE',
- 'UTF-16LE' => 'UTF-16LE',
- 'UTF-32' => 'UTF-32',
- 'UTF-32BE' => 'UTF-32BE',
- 'UTF-32LE' => 'UTF-32LE',
- 'UTF-7' => 'UTF-7',
- 'utf-8-strict' => 'UTF-8',
- 'viscii' => 'VISCII',
-);
-
-# NOTE: %MIME_NAME_OF is still 1:1 mapping
-our %ENCODE_NAME_OF = map { uc $MIME_NAME_OF{$_} => $_ } keys %MIME_NAME_OF;
-
-# Add additional 1:N mapping
-$MIME_NAME_OF{'utf8'} = 'UTF-8';
-
-sub get_mime_name($) { $MIME_NAME_OF{$_[0]} };
-
-sub get_encode_name($) { $ENCODE_NAME_OF{uc $_[0]} };
-
-1;
-__END__
-
-#line 103
diff --git a/software/Slic3r-1.3.0.64bit/lib/Errno.pm b/software/Slic3r-1.3.0.64bit/lib/Errno.pm
deleted file mode 100644
index 637f6212..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Errno.pm
+++ /dev/null
@@ -1,2558 +0,0 @@
-#line 1 "Errno.pm"
-# -*- buffer-read-only: t -*-
-#
-# This file is auto-generated. ***ANY*** changes here will be lost
-#
-
-package Errno;
-require Exporter;
-use strict;
-
-use Config;
-"$Config{'archname'}-$Config{'osvers'}" eq
-"MSWin32-x64-multi-thread-10.0" or
- die "Errno architecture (MSWin32-x64-multi-thread-10.0) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})";
-
-our $VERSION = "1.25";
-$VERSION = eval $VERSION;
-our @ISA = 'Exporter';
-
-my %err;
-
-BEGIN {
- %err = (
- ENUM_REGISTRY_SETTINGS => -2,
- ENUM_CURRENT_SETTINGS => -1,
- EXCEPTION_CONTINUE_EXECUTION => -1,
- EC_ENABLEALL => 0,
- ELF_CULTURE_LATIN => 0,
- ELF_VERSION => 0,
- EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X => 0,
- EMARCH_ENC_I17_IMM7B_VAL_POS_X => 0,
- EMBDHLP_CREATENOW => 0,
- EMBDHLP_INPROC_HANDLER => 0,
- ERROR => 0,
- ERROR_BIDI_STATUS_OK => 0,
- ERROR_SEVERITY_SUCCESS => 0,
- ERROR_SUCCESS => 0,
- ESB_ENABLE_BOTH => 0,
- ES_LEFT => 0,
- EVENTLOG_FULL_INFO => 0,
- EVENTLOG_SUCCESS => 0,
- EWX_LOGOFF => 0,
- EXCEPTION_CONTINUE_SEARCH => 0,
- EXCEPTION_READ_FAULT => 0,
- EXIT_SUCCESS => 0,
- ExceptionContinueExecution => 0,
- EC_LEFTMARGIN => 1,
- EDD_GET_DEVICE_INTERFACE_NAME => 1,
- EEInfoPreviousRecordsMissing => 1,
- EFS_USE_RECOVERY_KEYS => 1,
- EIMES_GETCOMPSTRATONCE => 1,
- ELEMENT_STATUS_FULL => 1,
- EMARCH_ENC_I17_IC_SIZE_X => 1,
- EMARCH_ENC_I17_IMM41a_INST_WORD_X => 1,
- EMARCH_ENC_I17_IMM41b_INST_WORD_X => 1,
- EMARCH_ENC_I17_SIGN_SIZE_X => 1,
- EMBDHLP_INPROC_SERVER => 1,
- EMR_HEADER => 1,
- EMR_MIN => 1,
- EMSIS_COMPOSITIONSTRING => 1,
- ENABLE_PROCESSED_INPUT => 1,
- ENABLE_PROCESSED_OUTPUT => 1,
- ENCRYPTION_FORMAT_DEFAULT => 1,
- ENDSESSION_CLOSEAPP => 1,
- ENLISTMENT_MAXIMUM_OPTION => 1,
- ENLISTMENT_QUERY_INFORMATION => 1,
- ENLISTMENT_SUPERIOR => 1,
- EPERM => 1,
- ERROR_INVALID_FUNCTION => 1,
- ERROR_LABEL_UNREADABLE => 1,
- ESB_DISABLE_LEFT => 1,
- ESB_DISABLE_LTUP => 1,
- ESB_DISABLE_UP => 1,
- ES_CENTER => 1,
- ES_SYSTEM_REQUIRED => 1,
- EVENTLOG_ERROR_TYPE => 1,
- EVENTLOG_SEQUENTIAL_READ => 1,
- EVENTLOG_START_PAIRED_EVENT => 1,
- EVENT_MIN => 1,
- EVENT_SYSTEM_SOUND => 1,
- EV_RXCHAR => 1,
- EWX_SHUTDOWN => 1,
- EXCEPTION_DEBUG_EVENT => 1,
- EXCEPTION_EXECUTE_HANDLER => 1,
- EXCEPTION_NONCONTINUABLE => 1,
- EXCEPTION_WRITE_FAULT => 1,
- EXIT_FAILURE => 1,
- ExceptionContinueSearch => 1,
- EC_QUERYWAITING => 2,
- EC_RIGHTMARGIN => 2,
- EDS_RAWMODE => 2,
- EEInfoNextRecordsMissing => 2,
- EIMES_CANCELCOMPSTRINFOCUS => 2,
- ELEMENT_STATUS_IMPEXP => 2,
- EMARCH_ENC_I17_IMM41c_INST_WORD_X => 2,
- EMR_POLYBEZIER => 2,
- ENABLE_LINE_INPUT => 2,
- ENABLE_WRAP_AT_EOL_OUTPUT => 2,
- ENLISTMENT_SET_INFORMATION => 2,
- ENOENT => 2,
- ENOFILE => 2,
- ERROR_FILE_NOT_FOUND => 2,
- ERROR_LABEL_QUESTIONABLE => 2,
- ESB_DISABLE_DOWN => 2,
- ESB_DISABLE_RIGHT => 2,
- ESB_DISABLE_RTDN => 2,
- ES_DISPLAY_REQUIRED => 2,
- ES_RIGHT => 2,
- ETO_OPAQUE => 2,
- EVENPARITY => 2,
- EVENTLOG_END_PAIRED_EVENT => 2,
- EVENTLOG_SEEK_READ => 2,
- EVENTLOG_WARNING_TYPE => 2,
- EVENT_MODIFY_STATE => 2,
- EVENT_SYSTEM_ALERT => 2,
- EV_RXFLAG => 2,
- EWX_REBOOT => 2,
- EXCEPTION_UNWINDING => 2,
- EXTEND_IEPORT => 2,
- ExceptionNestedException => 2,
- EMARCH_ENC_I17_IC_INST_WORD_X => 3,
- EMARCH_ENC_I17_IMM5C_INST_WORD_X => 3,
- EMARCH_ENC_I17_IMM7B_INST_WORD_X => 3,
- EMARCH_ENC_I17_IMM9D_INST_WORD_X => 3,
- EMARCH_ENC_I17_SIGN_INST_WORD_X => 3,
- EMR_POLYGON => 3,
- ERROR_PATH_NOT_FOUND => 3,
- ESB_DISABLE_BOTH => 3,
- ESRCH => 3,
- EVENT_SYSTEM_FOREGROUND => 3,
- ExceptionCollidedUnwind => 3,
- EEInfoUseFileTime => 4,
- EIMES_COMPLETECOMPSTRKILLFOCUS => 4,
- EINTR => 4,
- ELEMENT_STATUS_EXCEPT => 4,
- ELF_VENDOR_SIZE => 4,
- EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X => 4,
- EMR_POLYLINE => 4,
- ENABLE_ECHO_INPUT => 4,
- ENLISTMENT_RECOVER => 4,
- ERROR_SLOT_NOT_PRESENT => 4,
- ERROR_TOO_MANY_OPEN_FILES => 4,
- ES_MULTILINE => 4,
- ES_USER_PRESENT => 4,
- ETO_CLIPPED => 4,
- EVENTLOG_END_ALL_PAIRED_EVENTS => 4,
- EVENTLOG_FORWARDS_READ => 4,
- EVENTLOG_INFORMATION_TYPE => 4,
- EVENT_SYSTEM_MENUSTART => 4,
- EV_TXEMPTY => 4,
- EWX_FORCE => 4,
- EXCEPTION_EXIT_UNWIND => 4,
- EXIT_THREAD_DEBUG_EVENT => 4,
- EXPORT_PRIVATE_KEYS => 4,
- ExceptionExecuteHandler => 4,
- EDGE_RAISED => 5,
- EIO => 5,
- EMARCH_ENC_I17_IMM5C_SIZE_X => 5,
- EMR_POLYBEZIERTO => 5,
- ERROR_ACCESS_DENIED => 5,
- EVENT_SYSTEM_MENUEND => 5,
- EXIT_PROCESS_DEBUG_EVENT => 5,
- EDGE_ETCHED => 6,
- EMR_POLYLINETO => 6,
- ENXIO => 6,
- ERROR_INVALID_HANDLE => 6,
- EVENT_SYSTEM_MENUPOPUPSTART => 6,
- E2BIG => 7,
- EMARCH_ENC_I17_IMM7B_SIZE_X => 7,
- EMARCH_ENC_I17_IMM9D_VAL_POS_X => 7,
- EMR_POLYPOLYLINE => 7,
- ERROR_ARENA_TRASHED => 7,
- EVENT_SYSTEM_MENUPOPUPEND => 7,
- EC_DISABLE => 8,
- EFSRPC_SECURE_ONLY => 8,
- ELEMENT_STATUS_ACCESS => 8,
- EMARCH_ENC_I17_IMM41b_SIZE_X => 8,
- EMR_POLYPOLYGON => 8,
- ENABLE_WINDOW_INPUT => 8,
- ENLISTMENT_SUBORDINATE_RIGHTS => 8,
- ENOEXEC => 8,
- ERROR_DRIVE_NOT_INSTALLED => 8,
- ERROR_NOT_ENOUGH_MEMORY => 8,
- ES_UPPERCASE => 8,
- EVENTLOG_AUDIT_SUCCESS => 8,
- EVENTLOG_BACKWARDS_READ => 8,
- EVENTLOG_PAIRED_EVENT_ACTIVE => 8,
- EVENT_SYSTEM_CAPTURESTART => 8,
- EV_CTS => 8,
- EWX_POWEROFF => 8,
- EXCEPTION_EXECUTE_FAULT => 8,
- EXCEPTION_STACK_INVALID => 8,
- EBADF => 9,
- EDGE_BUMP => 9,
- EMARCH_ENC_I17_IMM9D_SIZE_X => 9,
- EMR_SETWINDOWEXTEX => 9,
- ERROR_INVALID_BLOCK => 9,
- EVENT_SYSTEM_CAPTUREEND => 9,
- ECHILD => 10,
- EDGE_SUNKEN => 10,
- EMARCH_ENC_I17_IMM41a_SIZE_X => 10,
- EMR_SETWINDOWORGEX => 10,
- ERROR_BAD_ENVIRONMENT => 10,
- EVENT_SYSTEM_MOVESIZESTART => 10,
- EAGAIN => 11,
- EEInfoGCCOM => 11,
- EMR_SETVIEWPORTEXTEX => 11,
- ENDDOC => 11,
- ERROR_BAD_FORMAT => 11,
- EVENT_SYSTEM_MOVESIZEEND => 11,
- EEInfoGCFRS => 12,
- EMARCH_ENC_I17_IC_INST_WORD_POS_X => 12,
- EMR_SETVIEWPORTORGEX => 12,
- ENOMEM => 12,
- ERROR_INVALID_ACCESS => 12,
- EVENT_SYSTEM_CONTEXTHELPSTART => 12,
- EACCES => 13,
- EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X => 13,
- EMR_SETBRUSHORGEX => 13,
- ERROR_INVALID_DATA => 13,
- EVENT_SYSTEM_CONTEXTHELPEND => 13,
- EFAULT => 14,
- EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X => 14,
- EMR_EOF => 14,
- ERROR_OUTOFMEMORY => 14,
- EVENT_SYSTEM_DRAGDROPSTART => 14,
- EMR_SETPIXELV => 15,
- ERROR_INVALID_DRIVE => 15,
- EVENT_SYSTEM_DRAGDROPEND => 15,
- EXCEPTION_MAXIMUM_PARAMETERS => 15,
- EBUSY => 16,
- ELEMENT_STATUS_EXENAB => 16,
- EMARCH_ENC_I17_IMM5C_VAL_POS_X => 16,
- EMR_SETMAPPERFLAGS => 16,
- ENABLE_MOUSE_INPUT => 16,
- ENLISTMENT_SUPERIOR_RIGHTS => 16,
- ERROR_CURRENT_DIRECTORY => 16,
- ERROR_TRAY_MALFUNCTION => 16,
- ES_LOWERCASE => 16,
- ETO_GLYPH_INDEX => 16,
- EVENTLOG_AUDIT_FAILURE => 16,
- EVENTLOG_PAIRED_EVENT_INACTIVE => 16,
- EVENT_SYSTEM_DIALOGSTART => 16,
- EV_DSR => 16,
- EWX_FORCEIFHUNG => 16,
- EXCEPTION_NESTED_CALL => 16,
- EEXIST => 17,
- EMR_SETMAPMODE => 17,
- ERROR_INIT_STATUS_NEEDED => 17,
- ERROR_NOT_SAME_DEVICE => 17,
- EVENT_SYSTEM_DIALOGEND => 17,
- EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X => 18,
- EMR_SETBKMODE => 18,
- ERROR_NO_MORE_FILES => 18,
- EVENT_SYSTEM_SCROLLINGSTART => 18,
- EXDEV => 18,
- EMR_SETPOLYFILLMODE => 19,
- ENODEV => 19,
- ERROR_WRITE_PROTECT => 19,
- EVENT_SYSTEM_SCROLLINGEND => 19,
- EMR_SETROP2 => 20,
- ENOTDIR => 20,
- ERROR_BAD_UNIT => 20,
- EVENT_SYSTEM_SWITCHSTART => 20,
- EISDIR => 21,
- EMARCH_ENC_I17_IC_VAL_POS_X => 21,
- EMR_SETSTRETCHBLTMODE => 21,
- ERROR_NOT_READY => 21,
- EVENT_SYSTEM_SWITCHEND => 21,
- EINVAL => 22,
- EMARCH_ENC_I17_IMM41a_VAL_POS_X => 22,
- EMR_SETTEXTALIGN => 22,
- ERROR_BAD_COMMAND => 22,
- EVENT_SYSTEM_MINIMIZESTART => 22,
- EMARCH_ENC_I17_IMM41c_SIZE_X => 23,
- EMR_SETCOLORADJUSTMENT => 23,
- ENFILE => 23,
- ERROR_CRC => 23,
- EVENT_SYSTEM_MINIMIZEEND => 23,
- EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X => 24,
- EMFILE => 24,
- EMR_SETTEXTCOLOR => 24,
- ERROR_BAD_LENGTH => 24,
- EMR_SETBKCOLOR => 25,
- ENOTTY => 25,
- ERROR_SEEK => 25,
- EMR_OFFSETCLIPRGN => 26,
- ERROR_NOT_DOS_DISK => 26,
- EFBIG => 27,
- EMARCH_ENC_I17_SIGN_INST_WORD_POS_X => 27,
- EMR_MOVETOEX => 27,
- ERROR_SECTOR_NOT_FOUND => 27,
- EMR_SETMETARGN => 28,
- ENABLEDUPLEX => 28,
- ENOSPC => 28,
- ERROR_OUT_OF_PAPER => 28,
- EMR_EXCLUDECLIPRECT => 29,
- ERROR_WRITE_FAULT => 29,
- ESPIPE => 29,
- EMR_INTERSECTCLIPRECT => 30,
- EROFS => 30,
- ERROR_READ_FAULT => 30,
- EMLINK => 31,
- EMR_SCALEVIEWPORTEXTEX => 31,
- ENUMPAPERBINS => 31,
- ERROR_GEN_FAILURE => 31,
- ELEMENT_STATUS_INENAB => 32,
- EMARCH_ENC_I17_IMM41b_VAL_POS_X => 32,
- EMR_SCALEWINDOWEXTEX => 32,
- ENABLE_INSERT_MODE => 32,
- EPIPE => 32,
- ERROR_SHARING_VIOLATION => 32,
- ES_PASSWORD => 32,
- EV_RLSD => 32,
- EWX_QUICKRESOLVE => 32,
- EXCEPTION_TARGET_UNWIND => 32,
- EDOM => 33,
- EMR_SAVEDC => 33,
- EPSPRINTING => 33,
- ERROR_LOCK_VIOLATION => 33,
- EMR_RESTOREDC => 34,
- ENUMPAPERMETRICS => 34,
- ERANGE => 34,
- ERROR_WRONG_DISK => 34,
- EMR_SETWORLDTRANSFORM => 35,
- EDEADLK => 36,
- EDEADLOCK => 36,
- EMR_MODIFYWORLDTRANSFORM => 36,
- ERROR_SHARING_BUFFER_EXCEEDED => 36,
- EMR_SELECTOBJECT => 37,
- EMR_CREATEPEN => 38,
- ENAMETOOLONG => 38,
- ERROR_HANDLE_EOF => 38,
- EMR_CREATEBRUSHINDIRECT => 39,
- ENOLCK => 39,
- ERROR_HANDLE_DISK_FULL => 39,
- EMARCH_ENC_I17_IMM41c_VAL_POS_X => 40,
- EMR_DELETEOBJECT => 40,
- ENOSYS => 40,
- EMR_ANGLEARC => 41,
- ENOTEMPTY => 41,
- EILSEQ => 42,
- EMR_ELLIPSE => 42,
- EMR_RECTANGLE => 43,
- EMR_ROUNDRECT => 44,
- EMR_ARC => 45,
- EMR_CHORD => 46,
- EMR_PIE => 47,
- EMR_SELECTPALETTE => 48,
- EMR_CREATEPALETTE => 49,
- EMR_SETPALETTEENTRIES => 50,
- ERROR_BIDI_NOT_SUPPORTED => 50,
- ERROR_NOT_SUPPORTED => 50,
- EMR_RESIZEPALETTE => 51,
- ERROR_REM_NOT_LIST => 51,
- EMR_REALIZEPALETTE => 52,
- ERROR_DUP_NAME => 52,
- EMR_EXTFLOODFILL => 53,
- ERROR_BAD_NETPATH => 53,
- EMR_LINETO => 54,
- ERROR_NETWORK_BUSY => 54,
- EMR_ARCTO => 55,
- ERROR_DEV_NOT_EXIST => 55,
- EMR_POLYDRAW => 56,
- ERROR_TOO_MANY_CMDS => 56,
- EMR_SETARCDIRECTION => 57,
- ERROR_ADAP_HDW_ERR => 57,
- EMR_SETMITERLIMIT => 58,
- ERROR_BAD_NET_RESP => 58,
- EMR_BEGINPATH => 59,
- ERROR_UNEXP_NET_ERR => 59,
- EMR_ENDPATH => 60,
- ERROR_BAD_REM_ADAP => 60,
- EMR_CLOSEFIGURE => 61,
- ERROR_PRINTQ_FULL => 61,
- EMR_FILLPATH => 62,
- ERROR_NO_SPOOL_SPACE => 62,
- EMARCH_ENC_I17_SIGN_VAL_POS_X => 63,
- EMR_STROKEANDFILLPATH => 63,
- ERROR_PRINT_CANCELLED => 63,
- ELEMENT_STATUS_PRODUCT_DATA => 64,
- EMR_STROKEPATH => 64,
- ENABLE_QUICK_EDIT_MODE => 64,
- ERROR_NETNAME_DELETED => 64,
- ES_AUTOVSCROLL => 64,
- ES_AWAYMODE_REQUIRED => 64,
- EV_BREAK => 64,
- EXCEPTION_COLLIDED_UNWIND => 64,
- EMR_FLATTENPATH => 65,
- ERROR_NETWORK_ACCESS_DENIED => 65,
- EMR_WIDENPATH => 66,
- ERROR_BAD_DEV_TYPE => 66,
- EMR_SELECTCLIPPATH => 67,
- ERROR_BAD_NET_NAME => 67,
- EMR_ABORTPATH => 68,
- ERROR_TOO_MANY_NAMES => 68,
- ERROR_TOO_MANY_SESS => 69,
- EMR_GDICOMMENT => 70,
- ERROR_SHARING_PAUSED => 70,
- EMR_FILLRGN => 71,
- ERROR_REQ_NOT_ACCEP => 71,
- EMR_FRAMERGN => 72,
- ERROR_REDIR_PAUSED => 72,
- EMR_INVERTRGN => 73,
- EMR_PAINTRGN => 74,
- EMR_EXTSELECTCLIPRGN => 75,
- EMR_BITBLT => 76,
- ECC_CMS_SHARED_INFO => 77,
- EMR_STRETCHBLT => 77,
- EMR_MASKBLT => 78,
- EMR_PLGBLT => 79,
- EMR_SETDIBITSTODEVICE => 80,
- ERROR_FILE_EXISTS => 80,
- EMR_STRETCHDIBITS => 81,
- EMR_EXTCREATEFONTINDIRECTW => 82,
- ERROR_CANNOT_MAKE => 82,
- EMR_EXTTEXTOUTA => 83,
- ERROR_FAIL_I24 => 83,
- EMR_EXTTEXTOUTW => 84,
- ERROR_OUT_OF_STRUCTURES => 84,
- EMR_POLYBEZIER16 => 85,
- ERROR_ALREADY_ASSIGNED => 85,
- EMR_POLYGON16 => 86,
- ERROR_INVALID_PASSWORD => 86,
- EMR_POLYLINE16 => 87,
- ERROR_INVALID_PARAMETER => 87,
- EMR_POLYBEZIERTO16 => 88,
- ERROR_NET_WRITE_FAULT => 88,
- EMR_POLYLINETO16 => 89,
- ERROR_NO_PROC_SLOTS => 89,
- EMR_POLYPOLYLINE16 => 90,
- EMR_POLYPOLYGON16 => 91,
- EMR_POLYDRAW16 => 92,
- EMR_CREATEMONOBRUSH => 93,
- EMR_CREATEDIBPATTERNBRUSHPT => 94,
- EMR_EXTCREATEPEN => 95,
- EMR_POLYTEXTOUTA => 96,
- EMR_POLYTEXTOUTW => 97,
- EMR_SETICMMODE => 98,
- EMR_CREATECOLORSPACE => 99,
- EADDRINUSE => 100,
- EMR_SETCOLORSPACE => 100,
- ERROR_TOO_MANY_SEMAPHORES => 100,
- EADDRNOTAVAIL => 101,
- EMR_DELETECOLORSPACE => 101,
- ERROR_EXCL_SEM_ALREADY_OWNED => 101,
- EAFNOSUPPORT => 102,
- EMR_GLSRECORD => 102,
- ERROR_SEM_IS_SET => 102,
- EXCEPTION_UNWIND => 102,
- EALREADY => 103,
- EMR_GLSBOUNDEDRECORD => 103,
- ERROR_TOO_MANY_SEM_REQUESTS => 103,
- EMR_PIXELFORMAT => 104,
- ERROR_INVALID_AT_INTERRUPT_TIME => 104,
- ECANCELED => 105,
- EMR_RESERVED_105 => 105,
- ERROR_SEM_OWNER_DIED => 105,
- ECONNABORTED => 106,
- EMR_RESERVED_106 => 106,
- ERROR_SEM_USER_LIMIT => 106,
- ECONNREFUSED => 107,
- EMR_RESERVED_107 => 107,
- ERROR_DISK_CHANGE => 107,
- ECONNRESET => 108,
- EMR_RESERVED_108 => 108,
- ERROR_DRIVE_LOCKED => 108,
- EDESTADDRREQ => 109,
- EMR_RESERVED_109 => 109,
- ERROR_BROKEN_PIPE => 109,
- EHOSTUNREACH => 110,
- EMR_RESERVED_110 => 110,
- ERROR_OPEN_FAILED => 110,
- EMR_COLORCORRECTPALETTE => 111,
- ERROR_BUFFER_OVERFLOW => 111,
- EINPROGRESS => 112,
- EMR_SETICMPROFILEA => 112,
- ERROR_DISK_FULL => 112,
- EISCONN => 113,
- EMR_SETICMPROFILEW => 113,
- ERROR_NO_MORE_SEARCH_HANDLES => 113,
- ELOOP => 114,
- EMR_ALPHABLEND => 114,
- ERROR_INVALID_TARGET_HANDLE => 114,
- EMR_SETLAYOUT => 115,
- EMSGSIZE => 115,
- EMR_TRANSPARENTBLT => 116,
- ENETDOWN => 116,
- EMR_RESERVED_117 => 117,
- ENETRESET => 117,
- ERROR_INVALID_CATEGORY => 117,
- EMR_GRADIENTFILL => 118,
- ENETUNREACH => 118,
- ERROR_INVALID_VERIFY_SWITCH => 118,
- EMR_RESERVED_119 => 119,
- ENOBUFS => 119,
- ERROR_BAD_DRIVER_LEVEL => 119,
- EMR_RESERVED_120 => 120,
- ERROR_CALL_NOT_IMPLEMENTED => 120,
- EMR_COLORMATCHTOTARGETW => 121,
- ERROR_SEM_TIMEOUT => 121,
- EMR_CREATECOLORSPACEW => 122,
- EMR_MAX => 122,
- ERROR_INSUFFICIENT_BUFFER => 122,
- ENOPROTOOPT => 123,
- ERROR_INVALID_NAME => 123,
- ERROR_INVALID_LEVEL => 124,
- ERROR_NO_VOLUME_LABEL => 125,
- ENOTCONN => 126,
- ERROR_MOD_NOT_FOUND => 126,
- ERROR_PROC_NOT_FOUND => 127,
- EC_ENABLEONE => 128,
- ENABLE_EXTENDED_FLAGS => 128,
- ENOTSOCK => 128,
- ERROR_WAIT_NO_CHILDREN => 128,
- ES_AUTOHSCROLL => 128,
- ETO_RTLREADING => 128,
- EV_ERR => 128,
- ENOTSUP => 129,
- ERROR_CHILD_NOT_COMPLETE => 129,
- EOPNOTSUPP => 130,
- ERROR_DIRECT_ACCESS_HANDLE => 130,
- ERROR_NEGATIVE_SEEK => 131,
- EOVERFLOW => 132,
- ERROR_SEEK_ON_DEVICE => 132,
- EOWNERDEAD => 133,
- ERROR_IS_JOIN_TARGET => 133,
- EPROTO => 134,
- ERROR_IS_JOINED => 134,
- EPROTONOSUPPORT => 135,
- ERROR_IS_SUBSTED => 135,
- EPROTOTYPE => 136,
- ERROR_NOT_JOINED => 136,
- ERROR_NOT_SUBSTED => 137,
- ERROR_JOIN_TO_JOIN => 138,
- ETIMEDOUT => 138,
- ERROR_SUBST_TO_SUBST => 139,
- ERROR_JOIN_TO_SUBST => 140,
- EWOULDBLOCK => 140,
- ERROR_SUBST_TO_JOIN => 141,
- ERROR_BUSY_DRIVE => 142,
- ERROR_SAME_DRIVE => 143,
- ERROR_DIR_NOT_ROOT => 144,
- ERROR_DIR_NOT_EMPTY => 145,
- ERROR_IS_SUBST_PATH => 146,
- ERROR_IS_JOIN_PATH => 147,
- ERROR_PATH_BUSY => 148,
- ERROR_IS_SUBST_TARGET => 149,
- ERROR_SYSTEM_TRACE => 150,
- ERROR_INVALID_EVENT_COUNT => 151,
- ERROR_TOO_MANY_MUXWAITERS => 152,
- ERROR_INVALID_LIST_FORMAT => 153,
- ERROR_LABEL_TOO_LONG => 154,
- ERROR_TOO_MANY_TCBS => 155,
- ERROR_SIGNAL_REFUSED => 156,
- ERROR_DISCARDED => 157,
- ERROR_NOT_LOCKED => 158,
- ERROR_BAD_THREADID_ADDR => 159,
- ERROR_BAD_ARGUMENTS => 160,
- ERROR_BAD_PATHNAME => 161,
- ERROR_SIGNAL_PENDING => 162,
- ERROR_MAX_THRDS_REACHED => 164,
- ERROR_LOCK_FAILED => 167,
- ERROR_BUSY => 170,
- ERROR_CANCEL_VIOLATION => 173,
- ERROR_ATOMIC_LOCKS_NOT_SUPPORTED => 174,
- EM_GETSEL => 176,
- EM_SETSEL => 177,
- EM_GETRECT => 178,
- EM_SETRECT => 179,
- EM_SETRECTNP => 180,
- ERROR_INVALID_SEGMENT_NUMBER => 180,
- EM_SCROLL => 181,
- EM_LINESCROLL => 182,
- ERROR_INVALID_ORDINAL => 182,
- EM_SCROLLCARET => 183,
- ERROR_ALREADY_EXISTS => 183,
- EM_GETMODIFY => 184,
- EM_SETMODIFY => 185,
- EM_GETLINECOUNT => 186,
- ERROR_INVALID_FLAG_NUMBER => 186,
- EM_LINEINDEX => 187,
- ERROR_SEM_NOT_FOUND => 187,
- EM_SETHANDLE => 188,
- ERROR_INVALID_STARTING_CODESEG => 188,
- EM_GETHANDLE => 189,
- ERROR_INVALID_STACKSEG => 189,
- EM_GETTHUMB => 190,
- ERROR_INVALID_MODULETYPE => 190,
- ERROR_INVALID_EXE_SIGNATURE => 191,
- ERROR_EXE_MARKED_INVALID => 192,
- EM_LINELENGTH => 193,
- ERROR_BAD_EXE_FORMAT => 193,
- EM_REPLACESEL => 194,
- ERROR_ITERATED_DATA_EXCEEDS_64k => 194,
- ERROR_INVALID_MINALLOCSIZE => 195,
- EM_GETLINE => 196,
- ERROR_DYNLINK_FROM_INVALID_RING => 196,
- EM_LIMITTEXT => 197,
- EM_SETLIMITTEXT => 197,
- ERROR_IOPL_NOT_ENABLED => 197,
- EM_CANUNDO => 198,
- ERROR_INVALID_SEGDPL => 198,
- EM_UNDO => 199,
- ERROR_AUTODATASEG_EXCEEDS_64k => 199,
- EM_FMTLINES => 200,
- ERROR_RING2SEG_MUST_BE_MOVABLE => 200,
- EM_LINEFROMCHAR => 201,
- ERROR_RELOC_CHAIN_XEEDS_SEGLIM => 201,
- ERROR_INFLOOP_IN_RELOC_CHAIN => 202,
- EM_SETTABSTOPS => 203,
- ERROR_ENVVAR_NOT_FOUND => 203,
- EM_SETPASSWORDCHAR => 204,
- EM_EMPTYUNDOBUFFER => 205,
- ERROR_NO_SIGNAL_SENT => 205,
- EM_GETFIRSTVISIBLELINE => 206,
- ERROR_FILENAME_EXCED_RANGE => 206,
- EM_SETREADONLY => 207,
- ERROR_RING2_STACK_IN_USE => 207,
- EM_SETWORDBREAKPROC => 208,
- ERROR_META_EXPANSION_TOO_LONG => 208,
- EM_GETWORDBREAKPROC => 209,
- ERROR_INVALID_SIGNAL_NUMBER => 209,
- EM_GETPASSWORDCHAR => 210,
- ENABLE_DISABLE_AUTOSAVE => 210,
- ERROR_THREAD_1_INACTIVE => 210,
- EM_SETMARGINS => 211,
- EM_GETMARGINS => 212,
- ERROR_LOCKED => 212,
- EXECUTE_OFFLINE_DIAGS => 212,
- EM_GETLIMITTEXT => 213,
- EM_POSFROMCHAR => 214,
- ERROR_TOO_MANY_MODULES => 214,
- EM_CHARFROMPOS => 215,
- ERROR_NESTING_NOT_ALLOWED => 215,
- EM_SETIMESTATUS => 216,
- ENABLE_SMART => 216,
- ERROR_EXE_MACHINE_TYPE_MISMATCH => 216,
- EM_GETIMESTATUS => 217,
- ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY => 217,
- ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY => 218,
- ENABLE_DISABLE_AUTO_OFFLINE => 219,
- ERROR_FILE_CHECKED_OUT => 220,
- ERROR_CHECKOUT_REQUIRED => 221,
- ERROR_BAD_FILE_TYPE => 222,
- ERROR_FILE_TOO_LARGE => 223,
- ERROR_FORMS_AUTH_REQUIRED => 224,
- ERROR_PIPE_LOCAL => 229,
- ERROR_BAD_PIPE => 230,
- ERROR_PIPE_BUSY => 231,
- ERROR_NO_DATA => 232,
- ERROR_PIPE_NOT_CONNECTED => 233,
- ERROR_MORE_DATA => 234,
- EASTEUROPE_CHARSET => 238,
- ERROR_VC_DISCONNECTED => 240,
- ERROR_INVALID_EA_NAME => 254,
- ERROR_EA_LIST_INCONSISTENT => 255,
- ENABLE_AUTO_POSITION => 256,
- ENHANCED_KEY => 256,
- EN_SETFOCUS => 256,
- ES_NOHIDESEL => 256,
- EV_RING => 256,
- ERROR_NO_MORE_ITEMS => 259,
- ERROR_CANNOT_COPY => 266,
- ERROR_DIRECTORY => 267,
- ERROR_EAS_DIDNT_FIT => 275,
- ERROR_EA_FILE_CORRUPT => 276,
- ERROR_EA_TABLE_FULL => 277,
- ERROR_INVALID_EA_HANDLE => 278,
- ERROR_EAS_NOT_SUPPORTED => 282,
- ERROR_NOT_OWNER => 288,
- ERROR_TOO_MANY_POSTS => 298,
- ERROR_PARTIAL_COPY => 299,
- ERROR_OPLOCK_NOT_GRANTED => 300,
- ERROR_INVALID_OPLOCK_PROTOCOL => 301,
- ERROR_DISK_TOO_FRAGMENTED => 302,
- ERROR_DELETE_PENDING => 303,
- ERROR_MR_MID_NOT_FOUND => 317,
- ERROR_SCOPE_NOT_FOUND => 318,
- ERROR_INVALID_ADDRESS => 487,
- EN_KILLFOCUS => 512,
- EV_PERR => 512,
- EXTTEXTOUT => 512,
- ERROR_ARITHMETIC_OVERFLOW => 534,
- ERROR_PIPE_CONNECTED => 535,
- ERROR_PIPE_LISTENING => 536,
- ERROR_WAKE_SYSTEM => 730,
- ERROR_WAIT_1 => 731,
- ERROR_WAIT_2 => 732,
- ERROR_WAIT_3 => 733,
- ERROR_WAIT_63 => 734,
- ERROR_ABANDONED_WAIT_0 => 735,
- ERROR_ABANDONED_WAIT_63 => 736,
- ERROR_USER_APC => 737,
- ERROR_KERNEL_APC => 738,
- ERROR_ALERTED => 739,
- ENABLERELATIVEWIDTHS => 768,
- EN_CHANGE => 768,
- ENABLEPAIRKERNING => 769,
- ERROR_EA_ACCESS_DENIED => 994,
- ERROR_OPERATION_ABORTED => 995,
- ERROR_IO_INCOMPLETE => 996,
- ERROR_IO_PENDING => 997,
- ERROR_NOACCESS => 998,
- ERROR_SWAPERROR => 999,
- ERROR_STACK_OVERFLOW => 1001,
- ERROR_INVALID_MESSAGE => 1002,
- ERROR_CAN_NOT_COMPLETE => 1003,
- ERROR_INVALID_FLAGS => 1004,
- ERROR_UNRECOGNIZED_VOLUME => 1005,
- ERROR_FILE_INVALID => 1006,
- ERROR_FULLSCREEN_MODE => 1007,
- ERROR_NO_TOKEN => 1008,
- ERROR_BADDB => 1009,
- ERROR_BADKEY => 1010,
- ERROR_CANTOPEN => 1011,
- ERROR_CANTREAD => 1012,
- ERROR_CANTWRITE => 1013,
- ERROR_REGISTRY_RECOVERED => 1014,
- ERROR_REGISTRY_CORRUPT => 1015,
- ERROR_REGISTRY_IO_FAILED => 1016,
- ERROR_NOT_REGISTRY_FILE => 1017,
- ERROR_KEY_DELETED => 1018,
- ERROR_NO_LOG_SPACE => 1019,
- ERROR_KEY_HAS_CHILDREN => 1020,
- ERROR_CHILD_MUST_BE_VOLATILE => 1021,
- ERROR_NOTIFY_ENUM_DIR => 1022,
- EN_UPDATE => 1024,
- ES_OEMCONVERT => 1024,
- ETO_NUMERICSLOCAL => 1024,
- EV_RX80FULL => 1024,
- ERROR_DEPENDENT_SERVICES_RUNNING => 1051,
- ERROR_INVALID_SERVICE_CONTROL => 1052,
- ERROR_SERVICE_REQUEST_TIMEOUT => 1053,
- ERROR_SERVICE_NO_THREAD => 1054,
- ERROR_SERVICE_DATABASE_LOCKED => 1055,
- ERROR_SERVICE_ALREADY_RUNNING => 1056,
- ERROR_INVALID_SERVICE_ACCOUNT => 1057,
- ERROR_SERVICE_DISABLED => 1058,
- ERROR_CIRCULAR_DEPENDENCY => 1059,
- ERROR_SERVICE_DOES_NOT_EXIST => 1060,
- ERROR_SERVICE_CANNOT_ACCEPT_CTRL => 1061,
- ERROR_SERVICE_NOT_ACTIVE => 1062,
- ERROR_FAILED_SERVICE_CONTROLLER_CONNECT => 1063,
- ERROR_EXCEPTION_IN_SERVICE => 1064,
- ERROR_DATABASE_DOES_NOT_EXIST => 1065,
- ERROR_SERVICE_SPECIFIC_ERROR => 1066,
- ERROR_PROCESS_ABORTED => 1067,
- ERROR_SERVICE_DEPENDENCY_FAIL => 1068,
- ERROR_SERVICE_LOGON_FAILED => 1069,
- ERROR_SERVICE_START_HANG => 1070,
- ERROR_INVALID_SERVICE_LOCK => 1071,
- ERROR_SERVICE_MARKED_FOR_DELETE => 1072,
- ERROR_SERVICE_EXISTS => 1073,
- ERROR_ALREADY_RUNNING_LKG => 1074,
- ERROR_SERVICE_DEPENDENCY_DELETED => 1075,
- ERROR_BOOT_ALREADY_ACCEPTED => 1076,
- ERROR_SERVICE_NEVER_STARTED => 1077,
- ERROR_DUPLICATE_SERVICE_NAME => 1078,
- ERROR_DIFFERENT_SERVICE_ACCOUNT => 1079,
- ERROR_CANNOT_DETECT_DRIVER_FAILURE => 1080,
- ERROR_CANNOT_DETECT_PROCESS_ABORT => 1081,
- ERROR_NO_RECOVERY_PROGRAM => 1082,
- ERROR_SERVICE_NOT_IN_EXE => 1083,
- ERROR_NOT_SAFEBOOT_SERVICE => 1084,
- ERROR_END_OF_MEDIA => 1100,
- ERROR_FILEMARK_DETECTED => 1101,
- ERROR_BEGINNING_OF_MEDIA => 1102,
- ERROR_SETMARK_DETECTED => 1103,
- ERROR_NO_DATA_DETECTED => 1104,
- ERROR_PARTITION_FAILURE => 1105,
- ERROR_INVALID_BLOCK_LENGTH => 1106,
- ERROR_DEVICE_NOT_PARTITIONED => 1107,
- ERROR_UNABLE_TO_LOCK_MEDIA => 1108,
- ERROR_UNABLE_TO_UNLOAD_MEDIA => 1109,
- ERROR_MEDIA_CHANGED => 1110,
- ERROR_BUS_RESET => 1111,
- ERROR_NO_MEDIA_IN_DRIVE => 1112,
- ERROR_NO_UNICODE_TRANSLATION => 1113,
- ERROR_DLL_INIT_FAILED => 1114,
- ERROR_SHUTDOWN_IN_PROGRESS => 1115,
- ERROR_NO_SHUTDOWN_IN_PROGRESS => 1116,
- ERROR_IO_DEVICE => 1117,
- ERROR_SERIAL_NO_DEVICE => 1118,
- ERROR_IRQ_BUSY => 1119,
- ERROR_MORE_WRITES => 1120,
- ERROR_COUNTER_TIMEOUT => 1121,
- ERROR_FLOPPY_ID_MARK_NOT_FOUND => 1122,
- ERROR_FLOPPY_WRONG_CYLINDER => 1123,
- ERROR_FLOPPY_UNKNOWN_ERROR => 1124,
- ERROR_FLOPPY_BAD_REGISTERS => 1125,
- ERROR_DISK_RECALIBRATE_FAILED => 1126,
- ERROR_DISK_OPERATION_FAILED => 1127,
- ERROR_DISK_RESET_FAILED => 1128,
- ERROR_EOM_OVERFLOW => 1129,
- ERROR_NOT_ENOUGH_SERVER_MEMORY => 1130,
- ERROR_POSSIBLE_DEADLOCK => 1131,
- ERROR_MAPPED_ALIGNMENT => 1132,
- ERROR_SET_POWER_STATE_VETOED => 1140,
- ERROR_SET_POWER_STATE_FAILED => 1141,
- ERROR_TOO_MANY_LINKS => 1142,
- ERROR_OLD_WIN_VERSION => 1150,
- ERROR_APP_WRONG_OS => 1151,
- ERROR_SINGLE_INSTANCE_APP => 1152,
- ERROR_RMODE_APP => 1153,
- ERROR_INVALID_DLL => 1154,
- ERROR_NO_ASSOCIATION => 1155,
- ERROR_DDE_FAIL => 1156,
- ERROR_DLL_NOT_FOUND => 1157,
- ERROR_NO_MORE_USER_HANDLES => 1158,
- ERROR_MESSAGE_SYNC_ONLY => 1159,
- ERROR_SOURCE_ELEMENT_EMPTY => 1160,
- ERROR_DESTINATION_ELEMENT_FULL => 1161,
- ERROR_ILLEGAL_ELEMENT_ADDRESS => 1162,
- ERROR_MAGAZINE_NOT_PRESENT => 1163,
- ERROR_DEVICE_REINITIALIZATION_NEEDED => 1164,
- ERROR_DEVICE_REQUIRES_CLEANING => 1165,
- ERROR_DEVICE_DOOR_OPEN => 1166,
- ERROR_DEVICE_NOT_CONNECTED => 1167,
- ERROR_NOT_FOUND => 1168,
- ERROR_NO_MATCH => 1169,
- ERROR_SET_NOT_FOUND => 1170,
- ERROR_POINT_NOT_FOUND => 1171,
- ERROR_NO_TRACKING_SERVICE => 1172,
- ERROR_NO_VOLUME_ID => 1173,
- ERROR_UNABLE_TO_REMOVE_REPLACED => 1175,
- ERROR_UNABLE_TO_MOVE_REPLACEMENT => 1176,
- ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 => 1177,
- ERROR_JOURNAL_DELETE_IN_PROGRESS => 1178,
- ERROR_JOURNAL_NOT_ACTIVE => 1179,
- ERROR_POTENTIAL_FILE_FOUND => 1180,
- ERROR_JOURNAL_ENTRY_DELETED => 1181,
- ERROR_BAD_DEVICE => 1200,
- ERROR_CONNECTION_UNAVAIL => 1201,
- ERROR_DEVICE_ALREADY_REMEMBERED => 1202,
- ERROR_NO_NET_OR_BAD_PATH => 1203,
- ERROR_BAD_PROVIDER => 1204,
- ERROR_CANNOT_OPEN_PROFILE => 1205,
- ERROR_BAD_PROFILE => 1206,
- ERROR_NOT_CONTAINER => 1207,
- ERROR_EXTENDED_ERROR => 1208,
- ERROR_INVALID_GROUPNAME => 1209,
- ERROR_INVALID_COMPUTERNAME => 1210,
- ERROR_INVALID_EVENTNAME => 1211,
- ERROR_INVALID_DOMAINNAME => 1212,
- ERROR_INVALID_SERVICENAME => 1213,
- ERROR_INVALID_NETNAME => 1214,
- ERROR_INVALID_SHARENAME => 1215,
- ERROR_INVALID_PASSWORDNAME => 1216,
- ERROR_INVALID_MESSAGENAME => 1217,
- ERROR_INVALID_MESSAGEDEST => 1218,
- ERROR_SESSION_CREDENTIAL_CONFLICT => 1219,
- ERROR_REMOTE_SESSION_LIMIT_EXCEEDED => 1220,
- ERROR_DUP_DOMAINNAME => 1221,
- ERROR_NO_NETWORK => 1222,
- ERROR_CANCELLED => 1223,
- ERROR_USER_MAPPED_FILE => 1224,
- ERROR_CONNECTION_REFUSED => 1225,
- ERROR_GRACEFUL_DISCONNECT => 1226,
- ERROR_ADDRESS_ALREADY_ASSOCIATED => 1227,
- ERROR_ADDRESS_NOT_ASSOCIATED => 1228,
- ERROR_CONNECTION_INVALID => 1229,
- ERROR_CONNECTION_ACTIVE => 1230,
- ERROR_NETWORK_UNREACHABLE => 1231,
- ERROR_HOST_UNREACHABLE => 1232,
- ERROR_PROTOCOL_UNREACHABLE => 1233,
- ERROR_PORT_UNREACHABLE => 1234,
- ERROR_REQUEST_ABORTED => 1235,
- ERROR_CONNECTION_ABORTED => 1236,
- ERROR_RETRY => 1237,
- ERROR_CONNECTION_COUNT_LIMIT => 1238,
- ERROR_LOGIN_TIME_RESTRICTION => 1239,
- ERROR_LOGIN_WKSTA_RESTRICTION => 1240,
- ERROR_INCORRECT_ADDRESS => 1241,
- ERROR_ALREADY_REGISTERED => 1242,
- ERROR_SERVICE_NOT_FOUND => 1243,
- ERROR_NOT_AUTHENTICATED => 1244,
- ERROR_NOT_LOGGED_ON => 1245,
- ERROR_CONTINUE => 1246,
- ERROR_ALREADY_INITIALIZED => 1247,
- ERROR_NO_MORE_DEVICES => 1248,
- ERROR_NO_SUCH_SITE => 1249,
- ERROR_DOMAIN_CONTROLLER_EXISTS => 1250,
- ERROR_ONLY_IF_CONNECTED => 1251,
- ERROR_OVERRIDE_NOCHANGES => 1252,
- ERROR_BAD_USER_PROFILE => 1253,
- ERROR_NOT_SUPPORTED_ON_SBS => 1254,
- ERROR_SERVER_SHUTDOWN_IN_PROGRESS => 1255,
- ERROR_HOST_DOWN => 1256,
- ERROR_NON_ACCOUNT_SID => 1257,
- ERROR_NON_DOMAIN_SID => 1258,
- ERROR_APPHELP_BLOCK => 1259,
- ERROR_ACCESS_DISABLED_BY_POLICY => 1260,
- ERROR_REG_NAT_CONSUMPTION => 1261,
- ERROR_CSCSHARE_OFFLINE => 1262,
- ERROR_PKINIT_FAILURE => 1263,
- ERROR_SMARTCARD_SUBSYSTEM_FAILURE => 1264,
- ERROR_DOWNGRADE_DETECTED => 1265,
- ERROR_MACHINE_LOCKED => 1271,
- ERROR_CALLBACK_SUPPLIED_INVALID_DATA => 1273,
- ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED => 1274,
- ERROR_DRIVER_BLOCKED => 1275,
- ERROR_INVALID_IMPORT_OF_NON_DLL => 1276,
- ERROR_ACCESS_DISABLED_WEBBLADE => 1277,
- ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER => 1278,
- ERROR_RECOVERY_FAILURE => 1279,
- EN_ERRSPACE => 1280,
- ERROR_ALREADY_FIBER => 1280,
- EN_MAXTEXT => 1281,
- ERROR_ALREADY_THREAD => 1281,
- ERROR_STACK_BUFFER_OVERRUN => 1282,
- ERROR_PARAMETER_QUOTA_EXCEEDED => 1283,
- ERROR_DEBUGGER_INACTIVE => 1284,
- ERROR_DELAY_LOAD_FAILED => 1285,
- ERROR_VDM_DISALLOWED => 1286,
- ERROR_UNIDENTIFIED_ERROR => 1287,
- ERROR_NOT_ALL_ASSIGNED => 1300,
- ERROR_SOME_NOT_MAPPED => 1301,
- ERROR_NO_QUOTAS_FOR_ACCOUNT => 1302,
- ERROR_LOCAL_USER_SESSION_KEY => 1303,
- ERROR_NULL_LM_PASSWORD => 1304,
- ERROR_UNKNOWN_REVISION => 1305,
- ERROR_REVISION_MISMATCH => 1306,
- ERROR_INVALID_OWNER => 1307,
- ERROR_INVALID_PRIMARY_GROUP => 1308,
- ERROR_NO_IMPERSONATION_TOKEN => 1309,
- ERROR_CANT_DISABLE_MANDATORY => 1310,
- ERROR_NO_LOGON_SERVERS => 1311,
- ERROR_NO_SUCH_LOGON_SESSION => 1312,
- ERROR_NO_SUCH_PRIVILEGE => 1313,
- ERROR_PRIVILEGE_NOT_HELD => 1314,
- ERROR_INVALID_ACCOUNT_NAME => 1315,
- ERROR_USER_EXISTS => 1316,
- ERROR_NO_SUCH_USER => 1317,
- ERROR_GROUP_EXISTS => 1318,
- ERROR_NO_SUCH_GROUP => 1319,
- ERROR_MEMBER_IN_GROUP => 1320,
- ERROR_MEMBER_NOT_IN_GROUP => 1321,
- ERROR_LAST_ADMIN => 1322,
- ERROR_WRONG_PASSWORD => 1323,
- ERROR_ILL_FORMED_PASSWORD => 1324,
- ERROR_PASSWORD_RESTRICTION => 1325,
- ERROR_LOGON_FAILURE => 1326,
- ERROR_ACCOUNT_RESTRICTION => 1327,
- ERROR_INVALID_LOGON_HOURS => 1328,
- ERROR_INVALID_WORKSTATION => 1329,
- ERROR_PASSWORD_EXPIRED => 1330,
- ERROR_ACCOUNT_DISABLED => 1331,
- ERROR_NONE_MAPPED => 1332,
- ERROR_TOO_MANY_LUIDS_REQUESTED => 1333,
- ERROR_LUIDS_EXHAUSTED => 1334,
- ERROR_INVALID_SUB_AUTHORITY => 1335,
- ERROR_INVALID_ACL => 1336,
- ERROR_INVALID_SID => 1337,
- ERROR_INVALID_SECURITY_DESCR => 1338,
- ERROR_BAD_INHERITANCE_ACL => 1340,
- ERROR_SERVER_DISABLED => 1341,
- ERROR_SERVER_NOT_DISABLED => 1342,
- ERROR_INVALID_ID_AUTHORITY => 1343,
- ERROR_ALLOTTED_SPACE_EXCEEDED => 1344,
- ERROR_INVALID_GROUP_ATTRIBUTES => 1345,
- ERROR_BAD_IMPERSONATION_LEVEL => 1346,
- ERROR_CANT_OPEN_ANONYMOUS => 1347,
- ERROR_BAD_VALIDATION_CLASS => 1348,
- ERROR_BAD_TOKEN_TYPE => 1349,
- ERROR_NO_SECURITY_ON_OBJECT => 1350,
- ERROR_CANT_ACCESS_DOMAIN_INFO => 1351,
- ERROR_INVALID_SERVER_STATE => 1352,
- ERROR_INVALID_DOMAIN_STATE => 1353,
- ERROR_INVALID_DOMAIN_ROLE => 1354,
- ERROR_NO_SUCH_DOMAIN => 1355,
- ERROR_DOMAIN_EXISTS => 1356,
- ERROR_DOMAIN_LIMIT_EXCEEDED => 1357,
- ERROR_INTERNAL_DB_CORRUPTION => 1358,
- ERROR_INTERNAL_ERROR => 1359,
- ERROR_GENERIC_NOT_MAPPED => 1360,
- ERROR_BAD_DESCRIPTOR_FORMAT => 1361,
- ERROR_NOT_LOGON_PROCESS => 1362,
- ERROR_LOGON_SESSION_EXISTS => 1363,
- ERROR_NO_SUCH_PACKAGE => 1364,
- ERROR_BAD_LOGON_SESSION_STATE => 1365,
- ERROR_LOGON_SESSION_COLLISION => 1366,
- ERROR_INVALID_LOGON_TYPE => 1367,
- ERROR_CANNOT_IMPERSONATE => 1368,
- ERROR_RXACT_INVALID_STATE => 1369,
- ERROR_RXACT_COMMIT_FAILURE => 1370,
- ERROR_SPECIAL_ACCOUNT => 1371,
- ERROR_SPECIAL_GROUP => 1372,
- ERROR_SPECIAL_USER => 1373,
- ERROR_MEMBERS_PRIMARY_GROUP => 1374,
- ERROR_TOKEN_ALREADY_IN_USE => 1375,
- ERROR_NO_SUCH_ALIAS => 1376,
- ERROR_MEMBER_NOT_IN_ALIAS => 1377,
- ERROR_MEMBER_IN_ALIAS => 1378,
- ERROR_ALIAS_EXISTS => 1379,
- ERROR_LOGON_NOT_GRANTED => 1380,
- ERROR_TOO_MANY_SECRETS => 1381,
- ERROR_SECRET_TOO_LONG => 1382,
- ERROR_INTERNAL_DB_ERROR => 1383,
- ERROR_TOO_MANY_CONTEXT_IDS => 1384,
- ERROR_LOGON_TYPE_NOT_GRANTED => 1385,
- ERROR_NT_CROSS_ENCRYPTION_REQUIRED => 1386,
- ERROR_NO_SUCH_MEMBER => 1387,
- ERROR_INVALID_MEMBER => 1388,
- ERROR_TOO_MANY_SIDS => 1389,
- ERROR_LM_CROSS_ENCRYPTION_REQUIRED => 1390,
- ERROR_NO_INHERITANCE => 1391,
- ERROR_FILE_CORRUPT => 1392,
- ERROR_DISK_CORRUPT => 1393,
- ERROR_NO_USER_SESSION_KEY => 1394,
- ERROR_LICENSE_QUOTA_EXCEEDED => 1395,
- ERROR_WRONG_TARGET_NAME => 1396,
- ERROR_MUTUAL_AUTH_FAILED => 1397,
- ERROR_TIME_SKEW => 1398,
- ERROR_CURRENT_DOMAIN_NOT_ALLOWED => 1399,
- ERROR_INVALID_WINDOW_HANDLE => 1400,
- ERROR_INVALID_MENU_HANDLE => 1401,
- ERROR_INVALID_CURSOR_HANDLE => 1402,
- ERROR_INVALID_ACCEL_HANDLE => 1403,
- ERROR_INVALID_HOOK_HANDLE => 1404,
- ERROR_INVALID_DWP_HANDLE => 1405,
- ERROR_TLW_WITH_WSCHILD => 1406,
- ERROR_CANNOT_FIND_WND_CLASS => 1407,
- ERROR_WINDOW_OF_OTHER_THREAD => 1408,
- ERROR_HOTKEY_ALREADY_REGISTERED => 1409,
- ERROR_CLASS_ALREADY_EXISTS => 1410,
- ERROR_CLASS_DOES_NOT_EXIST => 1411,
- ERROR_CLASS_HAS_WINDOWS => 1412,
- ERROR_INVALID_INDEX => 1413,
- ERROR_INVALID_ICON_HANDLE => 1414,
- ERROR_PRIVATE_DIALOG_INDEX => 1415,
- ERROR_LISTBOX_ID_NOT_FOUND => 1416,
- ERROR_NO_WILDCARD_CHARACTERS => 1417,
- ERROR_CLIPBOARD_NOT_OPEN => 1418,
- ERROR_HOTKEY_NOT_REGISTERED => 1419,
- ERROR_WINDOW_NOT_DIALOG => 1420,
- ERROR_CONTROL_ID_NOT_FOUND => 1421,
- ERROR_INVALID_COMBOBOX_MESSAGE => 1422,
- ERROR_WINDOW_NOT_COMBOBOX => 1423,
- ERROR_INVALID_EDIT_HEIGHT => 1424,
- ERROR_DC_NOT_FOUND => 1425,
- ERROR_INVALID_HOOK_FILTER => 1426,
- ERROR_INVALID_FILTER_PROC => 1427,
- ERROR_HOOK_NEEDS_HMOD => 1428,
- ERROR_GLOBAL_ONLY_HOOK => 1429,
- ERROR_JOURNAL_HOOK_SET => 1430,
- ERROR_HOOK_NOT_INSTALLED => 1431,
- ERROR_INVALID_LB_MESSAGE => 1432,
- ERROR_SETCOUNT_ON_BAD_LB => 1433,
- ERROR_LB_WITHOUT_TABSTOPS => 1434,
- ERROR_DESTROY_OBJECT_OF_OTHER_THREAD => 1435,
- ERROR_CHILD_WINDOW_MENU => 1436,
- ERROR_NO_SYSTEM_MENU => 1437,
- ERROR_INVALID_MSGBOX_STYLE => 1438,
- ERROR_INVALID_SPI_VALUE => 1439,
- ERROR_SCREEN_ALREADY_LOCKED => 1440,
- ERROR_HWNDS_HAVE_DIFF_PARENT => 1441,
- ERROR_NOT_CHILD_WINDOW => 1442,
- ERROR_INVALID_GW_COMMAND => 1443,
- ERROR_INVALID_THREAD_ID => 1444,
- ERROR_NON_MDICHILD_WINDOW => 1445,
- ERROR_POPUP_ALREADY_ACTIVE => 1446,
- ERROR_NO_SCROLLBARS => 1447,
- ERROR_INVALID_SCROLLBAR_RANGE => 1448,
- ERROR_INVALID_SHOWWIN_COMMAND => 1449,
- ERROR_NO_SYSTEM_RESOURCES => 1450,
- ERROR_NONPAGED_SYSTEM_RESOURCES => 1451,
- ERROR_PAGED_SYSTEM_RESOURCES => 1452,
- ERROR_WORKING_SET_QUOTA => 1453,
- ERROR_PAGEFILE_QUOTA => 1454,
- ERROR_COMMITMENT_LIMIT => 1455,
- ERROR_MENU_ITEM_NOT_FOUND => 1456,
- ERROR_INVALID_KEYBOARD_HANDLE => 1457,
- ERROR_HOOK_TYPE_NOT_ALLOWED => 1458,
- ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION => 1459,
- ERROR_TIMEOUT => 1460,
- ERROR_INVALID_MONITOR_HANDLE => 1461,
- ERROR_INCORRECT_SIZE => 1462,
- ERROR_EVENTLOG_FILE_CORRUPT => 1500,
- ERROR_EVENTLOG_CANT_START => 1501,
- ERROR_LOG_FILE_FULL => 1502,
- ERROR_EVENTLOG_FILE_CHANGED => 1503,
- EN_HSCROLL => 1537,
- EN_VSCROLL => 1538,
- ERROR_INSTALL_SERVICE_FAILURE => 1601,
- ERROR_INSTALL_USEREXIT => 1602,
- ERROR_INSTALL_FAILURE => 1603,
- ERROR_INSTALL_SUSPEND => 1604,
- ERROR_UNKNOWN_PRODUCT => 1605,
- ERROR_UNKNOWN_FEATURE => 1606,
- ERROR_UNKNOWN_COMPONENT => 1607,
- ERROR_UNKNOWN_PROPERTY => 1608,
- ERROR_INVALID_HANDLE_STATE => 1609,
- ERROR_BAD_CONFIGURATION => 1610,
- ERROR_INDEX_ABSENT => 1611,
- ERROR_INSTALL_SOURCE_ABSENT => 1612,
- ERROR_INSTALL_PACKAGE_VERSION => 1613,
- ERROR_PRODUCT_UNINSTALLED => 1614,
- ERROR_BAD_QUERY_SYNTAX => 1615,
- ERROR_INVALID_FIELD => 1616,
- ERROR_DEVICE_REMOVED => 1617,
- ERROR_INSTALL_ALREADY_RUNNING => 1618,
- ERROR_INSTALL_PACKAGE_OPEN_FAILED => 1619,
- ERROR_INSTALL_PACKAGE_INVALID => 1620,
- ERROR_INSTALL_UI_FAILURE => 1621,
- ERROR_INSTALL_LOG_FAILURE => 1622,
- ERROR_INSTALL_LANGUAGE_UNSUPPORTED => 1623,
- ERROR_INSTALL_TRANSFORM_FAILURE => 1624,
- ERROR_INSTALL_PACKAGE_REJECTED => 1625,
- ERROR_FUNCTION_NOT_CALLED => 1626,
- ERROR_FUNCTION_FAILED => 1627,
- ERROR_INVALID_TABLE => 1628,
- ERROR_DATATYPE_MISMATCH => 1629,
- ERROR_UNSUPPORTED_TYPE => 1630,
- ERROR_CREATE_FAILED => 1631,
- ERROR_INSTALL_TEMP_UNWRITABLE => 1632,
- ERROR_INSTALL_PLATFORM_UNSUPPORTED => 1633,
- ERROR_INSTALL_NOTUSED => 1634,
- ERROR_PATCH_PACKAGE_OPEN_FAILED => 1635,
- ERROR_PATCH_PACKAGE_INVALID => 1636,
- ERROR_PATCH_PACKAGE_UNSUPPORTED => 1637,
- ERROR_PRODUCT_VERSION => 1638,
- ERROR_INVALID_COMMAND_LINE => 1639,
- ERROR_INSTALL_REMOTE_DISALLOWED => 1640,
- ERROR_SUCCESS_REBOOT_INITIATED => 1641,
- ERROR_PATCH_TARGET_NOT_FOUND => 1642,
- ERROR_PATCH_PACKAGE_REJECTED => 1643,
- ERROR_INSTALL_TRANSFORM_REJECTED => 1644,
- ERROR_INSTALL_REMOTE_PROHIBITED => 1645,
- EPT_S_INVALID_ENTRY => 1751,
- EPT_S_CANT_PERFORM_OP => 1752,
- EPT_S_NOT_REGISTERED => 1753,
- ERROR_INVALID_USER_BUFFER => 1784,
- ERROR_UNRECOGNIZED_MEDIA => 1785,
- ERROR_NO_TRUST_LSA_SECRET => 1786,
- ERROR_NO_TRUST_SAM_ACCOUNT => 1787,
- ERROR_TRUSTED_DOMAIN_FAILURE => 1788,
- ERROR_TRUSTED_RELATIONSHIP_FAILURE => 1789,
- ERROR_TRUST_FAILURE => 1790,
- EN_ALIGN_LTR_EC => 1792,
- ERROR_NETLOGON_NOT_STARTED => 1792,
- EN_ALIGN_RTL_EC => 1793,
- ERROR_ACCOUNT_EXPIRED => 1793,
- ERROR_REDIRECTOR_HAS_OPEN_HANDLES => 1794,
- ERROR_PRINTER_DRIVER_ALREADY_INSTALLED => 1795,
- ERROR_UNKNOWN_PORT => 1796,
- ERROR_UNKNOWN_PRINTER_DRIVER => 1797,
- ERROR_UNKNOWN_PRINTPROCESSOR => 1798,
- ERROR_INVALID_SEPARATOR_FILE => 1799,
- ERROR_INVALID_PRIORITY => 1800,
- ERROR_INVALID_PRINTER_NAME => 1801,
- ERROR_PRINTER_ALREADY_EXISTS => 1802,
- ERROR_INVALID_PRINTER_COMMAND => 1803,
- ERROR_INVALID_DATATYPE => 1804,
- ERROR_INVALID_ENVIRONMENT => 1805,
- ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT => 1807,
- ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT => 1808,
- ERROR_NOLOGON_SERVER_TRUST_ACCOUNT => 1809,
- ERROR_DOMAIN_TRUST_INCONSISTENT => 1810,
- ERROR_SERVER_HAS_OPEN_HANDLES => 1811,
- ERROR_RESOURCE_DATA_NOT_FOUND => 1812,
- ERROR_RESOURCE_TYPE_NOT_FOUND => 1813,
- ERROR_RESOURCE_NAME_NOT_FOUND => 1814,
- ERROR_RESOURCE_LANG_NOT_FOUND => 1815,
- ERROR_NOT_ENOUGH_QUOTA => 1816,
- EPT_S_CANT_CREATE => 1899,
- ERROR_INVALID_TIME => 1901,
- ERROR_INVALID_FORM_NAME => 1902,
- ERROR_INVALID_FORM_SIZE => 1903,
- ERROR_ALREADY_WAITING => 1904,
- ERROR_PRINTER_DELETED => 1905,
- ERROR_INVALID_PRINTER_STATE => 1906,
- ERROR_PASSWORD_MUST_CHANGE => 1907,
- ERROR_DOMAIN_CONTROLLER_NOT_FOUND => 1908,
- ERROR_ACCOUNT_LOCKED_OUT => 1909,
- ERROR_NO_SITENAME => 1919,
- ERROR_CANT_ACCESS_FILE => 1920,
- ERROR_CANT_RESOLVE_FILENAME => 1921,
- ERROR_KM_DRIVER_BLOCKED => 1930,
- ERROR_CONTEXT_EXPIRED => 1931,
- ERROR_PER_USER_TRUST_QUOTA_EXCEEDED => 1932,
- ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED => 1933,
- ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED => 1934,
- ERROR_AUTHENTICATION_FIREWALL_FAILED => 1935,
- ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED => 1936,
- ERROR_INVALID_PIXEL_FORMAT => 2000,
- ERROR_BAD_DRIVER => 2001,
- ERROR_INVALID_WINDOW_STYLE => 2002,
- ERROR_METAFILE_NOT_SUPPORTED => 2003,
- ERROR_TRANSFORM_NOT_SUPPORTED => 2004,
- ERROR_CLIPPING_NOT_SUPPORTED => 2005,
- ERROR_INVALID_CMM => 2010,
- ERROR_INVALID_PROFILE => 2011,
- ERROR_TAG_NOT_FOUND => 2012,
- ERROR_TAG_NOT_PRESENT => 2013,
- ERROR_DUPLICATE_TAG => 2014,
- ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE => 2015,
- ERROR_PROFILE_NOT_FOUND => 2016,
- ERROR_INVALID_COLORSPACE => 2017,
- ERROR_ICM_NOT_ENABLED => 2018,
- ERROR_DELETING_ICM_XFORM => 2019,
- ERROR_INVALID_TRANSFORM => 2020,
- ERROR_COLORSPACE_MISMATCH => 2021,
- ERROR_INVALID_COLORINDEX => 2022,
- ES_READONLY => 2048,
- ETO_NUMERICSLATIN => 2048,
- EV_EVENT1 => 2048,
- ERROR_CONNECTED_OTHER_PASSWORD => 2108,
- ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT => 2109,
- ERROR_BAD_USERNAME => 2202,
- ERROR_NOT_CONNECTED => 2250,
- ERROR_OPEN_FILES => 2401,
- ERROR_ACTIVE_CONNECTIONS => 2402,
- ERROR_DEVICE_IN_USE => 2404,
- ERROR_UNKNOWN_PRINT_MONITOR => 3000,
- ERROR_PRINTER_DRIVER_IN_USE => 3001,
- ERROR_SPOOL_FILE_NOT_FOUND => 3002,
- ERROR_SPL_NO_STARTDOC => 3003,
- ERROR_SPL_NO_ADDJOB => 3004,
- ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED => 3005,
- ERROR_PRINT_MONITOR_ALREADY_INSTALLED => 3006,
- ERROR_INVALID_PRINT_MONITOR => 3007,
- ERROR_PRINT_MONITOR_IN_USE => 3008,
- ERROR_PRINTER_HAS_JOBS_QUEUED => 3009,
- ERROR_SUCCESS_REBOOT_REQUIRED => 3010,
- ERROR_SUCCESS_RESTART_REQUIRED => 3011,
- ERROR_PRINTER_NOT_FOUND => 3012,
- ERROR_PRINTER_DRIVER_WARNED => 3013,
- ERROR_PRINTER_DRIVER_BLOCKED => 3014,
- ERROR_WINS_INTERNAL => 4000,
- ERROR_CAN_NOT_DEL_LOCAL_WINS => 4001,
- ERROR_STATIC_INIT => 4002,
- ERROR_INC_BACKUP => 4003,
- ERROR_FULL_BACKUP => 4004,
- ERROR_REC_NON_EXISTENT => 4005,
- ERROR_RPL_NOT_ALLOWED => 4006,
- ELEMENT_STATUS_LUN_VALID => 4096,
- ES_WANTRETURN => 4096,
- ETO_IGNORELANGUAGE => 4096,
- EV_EVENT2 => 4096,
- END_PATH => 4098,
- EXT_DEVICE_CAPS => 4099,
- ERROR_DHCP_ADDRESS_CONFLICT => 4100,
- ENCAPSULATED_POSTSCRIPT => 4116,
- ERROR_WMI_GUID_NOT_FOUND => 4200,
- ERROR_WMI_INSTANCE_NOT_FOUND => 4201,
- ERROR_WMI_ITEMID_NOT_FOUND => 4202,
- ERROR_WMI_TRY_AGAIN => 4203,
- ERROR_WMI_DP_NOT_FOUND => 4204,
- ERROR_WMI_UNRESOLVED_INSTANCE_REF => 4205,
- ERROR_WMI_ALREADY_ENABLED => 4206,
- ERROR_WMI_GUID_DISCONNECTED => 4207,
- ERROR_WMI_SERVER_UNAVAILABLE => 4208,
- ERROR_WMI_DP_FAILED => 4209,
- ERROR_WMI_INVALID_MOF => 4210,
- ERROR_WMI_INVALID_REGINFO => 4211,
- ERROR_WMI_ALREADY_DISABLED => 4212,
- ERROR_WMI_READ_ONLY => 4213,
- ERROR_WMI_SET_FAILURE => 4214,
- ERROR_INVALID_MEDIA => 4300,
- ERROR_INVALID_LIBRARY => 4301,
- ERROR_INVALID_MEDIA_POOL => 4302,
- ERROR_DRIVE_MEDIA_MISMATCH => 4303,
- ERROR_MEDIA_OFFLINE => 4304,
- ERROR_LIBRARY_OFFLINE => 4305,
- ERROR_EMPTY => 4306,
- ERROR_NOT_EMPTY => 4307,
- ERROR_MEDIA_UNAVAILABLE => 4308,
- ERROR_RESOURCE_DISABLED => 4309,
- ERROR_INVALID_CLEANER => 4310,
- ERROR_UNABLE_TO_CLEAN => 4311,
- ERROR_OBJECT_NOT_FOUND => 4312,
- ERROR_DATABASE_FAILURE => 4313,
- ERROR_DATABASE_FULL => 4314,
- ERROR_MEDIA_INCOMPATIBLE => 4315,
- ERROR_RESOURCE_NOT_PRESENT => 4316,
- ERROR_INVALID_OPERATION => 4317,
- ERROR_MEDIA_NOT_AVAILABLE => 4318,
- ERROR_DEVICE_NOT_AVAILABLE => 4319,
- ERROR_REQUEST_REFUSED => 4320,
- ERROR_INVALID_DRIVE_OBJECT => 4321,
- ERROR_LIBRARY_FULL => 4322,
- ERROR_MEDIUM_NOT_ACCESSIBLE => 4323,
- ERROR_UNABLE_TO_LOAD_MEDIUM => 4324,
- ERROR_UNABLE_TO_INVENTORY_DRIVE => 4325,
- ERROR_UNABLE_TO_INVENTORY_SLOT => 4326,
- ERROR_UNABLE_TO_INVENTORY_TRANSPORT => 4327,
- ERROR_TRANSPORT_FULL => 4328,
- ERROR_CONTROLLING_IEPORT => 4329,
- ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA => 4330,
- ERROR_CLEANER_SLOT_SET => 4331,
- ERROR_CLEANER_SLOT_NOT_SET => 4332,
- ERROR_CLEANER_CARTRIDGE_SPENT => 4333,
- ERROR_UNEXPECTED_OMID => 4334,
- ERROR_CANT_DELETE_LAST_ITEM => 4335,
- ERROR_MESSAGE_EXCEEDS_MAX_SIZE => 4336,
- ERROR_VOLUME_CONTAINS_SYS_FILES => 4337,
- ERROR_INDIGENOUS_TYPE => 4338,
- ERROR_NO_SUPPORTING_DRIVES => 4339,
- ERROR_CLEANER_CARTRIDGE_INSTALLED => 4340,
- ERROR_IEPORT_FULL => 4341,
- ERROR_FILE_OFFLINE => 4350,
- ERROR_REMOTE_STORAGE_NOT_ACTIVE => 4351,
- ERROR_REMOTE_STORAGE_MEDIA_ERROR => 4352,
- ERROR_NOT_A_REPARSE_POINT => 4390,
- ERROR_REPARSE_ATTRIBUTE_CONFLICT => 4391,
- ERROR_INVALID_REPARSE_DATA => 4392,
- ERROR_REPARSE_TAG_INVALID => 4393,
- ERROR_REPARSE_TAG_MISMATCH => 4394,
- ERROR_VOLUME_NOT_SIS_ENABLED => 4500,
- ERROR_DEPENDENT_RESOURCE_EXISTS => 5001,
- ERROR_DEPENDENCY_NOT_FOUND => 5002,
- ERROR_DEPENDENCY_ALREADY_EXISTS => 5003,
- ERROR_RESOURCE_NOT_ONLINE => 5004,
- ERROR_HOST_NODE_NOT_AVAILABLE => 5005,
- ERROR_RESOURCE_NOT_AVAILABLE => 5006,
- ERROR_RESOURCE_NOT_FOUND => 5007,
- ERROR_SHUTDOWN_CLUSTER => 5008,
- ERROR_CANT_EVICT_ACTIVE_NODE => 5009,
- ERROR_OBJECT_ALREADY_EXISTS => 5010,
- ERROR_OBJECT_IN_LIST => 5011,
- ERROR_GROUP_NOT_AVAILABLE => 5012,
- ERROR_GROUP_NOT_FOUND => 5013,
- ERROR_GROUP_NOT_ONLINE => 5014,
- ERROR_HOST_NODE_NOT_RESOURCE_OWNER => 5015,
- ERROR_HOST_NODE_NOT_GROUP_OWNER => 5016,
- ERROR_RESMON_CREATE_FAILED => 5017,
- ERROR_RESMON_ONLINE_FAILED => 5018,
- ERROR_RESOURCE_ONLINE => 5019,
- ERROR_QUORUM_RESOURCE => 5020,
- ERROR_NOT_QUORUM_CAPABLE => 5021,
- ERROR_CLUSTER_SHUTTING_DOWN => 5022,
- ERROR_INVALID_STATE => 5023,
- ERROR_RESOURCE_PROPERTIES_STORED => 5024,
- ERROR_NOT_QUORUM_CLASS => 5025,
- ERROR_CORE_RESOURCE => 5026,
- ERROR_QUORUM_RESOURCE_ONLINE_FAILED => 5027,
- ERROR_QUORUMLOG_OPEN_FAILED => 5028,
- ERROR_CLUSTERLOG_CORRUPT => 5029,
- ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE => 5030,
- ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE => 5031,
- ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND => 5032,
- ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE => 5033,
- ERROR_QUORUM_OWNER_ALIVE => 5034,
- ERROR_NETWORK_NOT_AVAILABLE => 5035,
- ERROR_NODE_NOT_AVAILABLE => 5036,
- ERROR_ALL_NODES_NOT_AVAILABLE => 5037,
- ERROR_RESOURCE_FAILED => 5038,
- ERROR_CLUSTER_INVALID_NODE => 5039,
- ERROR_CLUSTER_NODE_EXISTS => 5040,
- ERROR_CLUSTER_JOIN_IN_PROGRESS => 5041,
- ERROR_CLUSTER_NODE_NOT_FOUND => 5042,
- ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND => 5043,
- ERROR_CLUSTER_NETWORK_EXISTS => 5044,
- ERROR_CLUSTER_NETWORK_NOT_FOUND => 5045,
- ERROR_CLUSTER_NETINTERFACE_EXISTS => 5046,
- ERROR_CLUSTER_NETINTERFACE_NOT_FOUND => 5047,
- ERROR_CLUSTER_INVALID_REQUEST => 5048,
- ERROR_CLUSTER_INVALID_NETWORK_PROVIDER => 5049,
- ERROR_CLUSTER_NODE_DOWN => 5050,
- ERROR_CLUSTER_NODE_UNREACHABLE => 5051,
- ERROR_CLUSTER_NODE_NOT_MEMBER => 5052,
- ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS => 5053,
- ERROR_CLUSTER_INVALID_NETWORK => 5054,
- ERROR_CLUSTER_NODE_UP => 5056,
- ERROR_CLUSTER_IPADDR_IN_USE => 5057,
- ERROR_CLUSTER_NODE_NOT_PAUSED => 5058,
- ERROR_CLUSTER_NO_SECURITY_CONTEXT => 5059,
- ERROR_CLUSTER_NETWORK_NOT_INTERNAL => 5060,
- ERROR_CLUSTER_NODE_ALREADY_UP => 5061,
- ERROR_CLUSTER_NODE_ALREADY_DOWN => 5062,
- ERROR_CLUSTER_NETWORK_ALREADY_ONLINE => 5063,
- ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE => 5064,
- ERROR_CLUSTER_NODE_ALREADY_MEMBER => 5065,
- ERROR_CLUSTER_LAST_INTERNAL_NETWORK => 5066,
- ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS => 5067,
- ERROR_INVALID_OPERATION_ON_QUORUM => 5068,
- ERROR_DEPENDENCY_NOT_ALLOWED => 5069,
- ERROR_CLUSTER_NODE_PAUSED => 5070,
- ERROR_NODE_CANT_HOST_RESOURCE => 5071,
- ERROR_CLUSTER_NODE_NOT_READY => 5072,
- ERROR_CLUSTER_NODE_SHUTTING_DOWN => 5073,
- ERROR_CLUSTER_JOIN_ABORTED => 5074,
- ERROR_CLUSTER_INCOMPATIBLE_VERSIONS => 5075,
- ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED => 5076,
- ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED => 5077,
- ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND => 5078,
- ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED => 5079,
- ERROR_CLUSTER_RESNAME_NOT_FOUND => 5080,
- ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED => 5081,
- ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST => 5082,
- ERROR_CLUSTER_DATABASE_SEQMISMATCH => 5083,
- ERROR_RESMON_INVALID_STATE => 5084,
- ERROR_CLUSTER_GUM_NOT_LOCKER => 5085,
- ERROR_QUORUM_DISK_NOT_FOUND => 5086,
- ERROR_DATABASE_BACKUP_CORRUPT => 5087,
- ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT => 5088,
- ERROR_RESOURCE_PROPERTY_UNCHANGEABLE => 5089,
- ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE => 5890,
- ERROR_CLUSTER_QUORUMLOG_NOT_FOUND => 5891,
- ERROR_CLUSTER_MEMBERSHIP_HALT => 5892,
- ERROR_CLUSTER_INSTANCE_ID_MISMATCH => 5893,
- ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP => 5894,
- ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH => 5895,
- ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP => 5896,
- ERROR_CLUSTER_PARAMETER_MISMATCH => 5897,
- ERROR_NODE_CANNOT_BE_CLUSTERED => 5898,
- ERROR_CLUSTER_WRONG_OS_VERSION => 5899,
- ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME => 5900,
- ERROR_CLUSCFG_ALREADY_COMMITTED => 5901,
- ERROR_CLUSCFG_ROLLBACK_FAILED => 5902,
- ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT => 5903,
- ERROR_CLUSTER_OLD_VERSION => 5904,
- ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME => 5905,
- ERROR_ENCRYPTION_FAILED => 6000,
- ERROR_DECRYPTION_FAILED => 6001,
- ERROR_FILE_ENCRYPTED => 6002,
- ERROR_NO_RECOVERY_POLICY => 6003,
- ERROR_NO_EFS => 6004,
- ERROR_WRONG_EFS => 6005,
- ERROR_NO_USER_KEYS => 6006,
- ERROR_FILE_NOT_ENCRYPTED => 6007,
- ERROR_NOT_EXPORT_FORMAT => 6008,
- ERROR_FILE_READ_ONLY => 6009,
- ERROR_DIR_EFS_DISALLOWED => 6010,
- ERROR_EFS_SERVER_NOT_TRUSTED => 6011,
- ERROR_BAD_RECOVERY_POLICY => 6012,
- ERROR_EFS_ALG_BLOB_TOO_BIG => 6013,
- ERROR_VOLUME_NOT_SUPPORT_EFS => 6014,
- ERROR_EFS_DISABLED => 6015,
- ERROR_EFS_VERSION_NOT_SUPPORT => 6016,
- ERROR_NO_BROWSER_SERVERS_FOUND => 6118,
- ERROR_CTX_WINSTATION_NAME_INVALID => 7001,
- ERROR_CTX_INVALID_PD => 7002,
- ERROR_CTX_PD_NOT_FOUND => 7003,
- ERROR_CTX_WD_NOT_FOUND => 7004,
- ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY => 7005,
- ERROR_CTX_SERVICE_NAME_COLLISION => 7006,
- ERROR_CTX_CLOSE_PENDING => 7007,
- ERROR_CTX_NO_OUTBUF => 7008,
- ERROR_CTX_MODEM_INF_NOT_FOUND => 7009,
- ERROR_CTX_INVALID_MODEMNAME => 7010,
- ERROR_CTX_MODEM_RESPONSE_ERROR => 7011,
- ERROR_CTX_MODEM_RESPONSE_TIMEOUT => 7012,
- ERROR_CTX_MODEM_RESPONSE_NO_CARRIER => 7013,
- ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE => 7014,
- ERROR_CTX_MODEM_RESPONSE_BUSY => 7015,
- ERROR_CTX_MODEM_RESPONSE_VOICE => 7016,
- ERROR_CTX_TD_ERROR => 7017,
- ERROR_CTX_WINSTATION_NOT_FOUND => 7022,
- ERROR_CTX_WINSTATION_ALREADY_EXISTS => 7023,
- ERROR_CTX_WINSTATION_BUSY => 7024,
- ERROR_CTX_BAD_VIDEO_MODE => 7025,
- ERROR_CTX_GRAPHICS_INVALID => 7035,
- ERROR_CTX_LOGON_DISABLED => 7037,
- ERROR_CTX_NOT_CONSOLE => 7038,
- ERROR_CTX_CLIENT_QUERY_TIMEOUT => 7040,
- ERROR_CTX_CONSOLE_DISCONNECT => 7041,
- ERROR_CTX_CONSOLE_CONNECT => 7042,
- ERROR_CTX_SHADOW_DENIED => 7044,
- ERROR_CTX_WINSTATION_ACCESS_DENIED => 7045,
- ERROR_CTX_INVALID_WD => 7049,
- ERROR_CTX_SHADOW_INVALID => 7050,
- ERROR_CTX_SHADOW_DISABLED => 7051,
- ERROR_CTX_CLIENT_LICENSE_IN_USE => 7052,
- ERROR_CTX_CLIENT_LICENSE_NOT_SET => 7053,
- ERROR_CTX_LICENSE_NOT_AVAILABLE => 7054,
- ERROR_CTX_LICENSE_CLIENT_INVALID => 7055,
- ERROR_CTX_LICENSE_EXPIRED => 7056,
- ERROR_CTX_SHADOW_NOT_RUNNING => 7057,
- ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE => 7058,
- ERROR_ACTIVATION_COUNT_EXCEEDED => 7059,
- ELEMENT_STATUS_ID_VALID => 8192,
- ES_NUMBER => 8192,
- ETO_PDY => 8192,
- ERROR_DS_NOT_INSTALLED => 8200,
- ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY => 8201,
- ERROR_DS_NO_ATTRIBUTE_OR_VALUE => 8202,
- ERROR_DS_INVALID_ATTRIBUTE_SYNTAX => 8203,
- ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED => 8204,
- ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS => 8205,
- ERROR_DS_BUSY => 8206,
- ERROR_DS_UNAVAILABLE => 8207,
- ERROR_DS_NO_RIDS_ALLOCATED => 8208,
- ERROR_DS_NO_MORE_RIDS => 8209,
- ERROR_DS_INCORRECT_ROLE_OWNER => 8210,
- ERROR_DS_RIDMGR_INIT_ERROR => 8211,
- ERROR_DS_OBJ_CLASS_VIOLATION => 8212,
- ERROR_DS_CANT_ON_NON_LEAF => 8213,
- ERROR_DS_CANT_ON_RDN => 8214,
- ERROR_DS_CANT_MOD_OBJ_CLASS => 8215,
- ERROR_DS_CROSS_DOM_MOVE_ERROR => 8216,
- ERROR_DS_GC_NOT_AVAILABLE => 8217,
- ERROR_SHARED_POLICY => 8218,
- ERROR_POLICY_OBJECT_NOT_FOUND => 8219,
- ERROR_POLICY_ONLY_IN_DS => 8220,
- ERROR_PROMOTION_ACTIVE => 8221,
- ERROR_NO_PROMOTION_ACTIVE => 8222,
- ERROR_DS_OPERATIONS_ERROR => 8224,
- ERROR_DS_PROTOCOL_ERROR => 8225,
- ERROR_DS_TIMELIMIT_EXCEEDED => 8226,
- ERROR_DS_SIZELIMIT_EXCEEDED => 8227,
- ERROR_DS_ADMIN_LIMIT_EXCEEDED => 8228,
- ERROR_DS_COMPARE_FALSE => 8229,
- ERROR_DS_COMPARE_TRUE => 8230,
- ERROR_DS_AUTH_METHOD_NOT_SUPPORTED => 8231,
- ERROR_DS_STRONG_AUTH_REQUIRED => 8232,
- ERROR_DS_INAPPROPRIATE_AUTH => 8233,
- ERROR_DS_AUTH_UNKNOWN => 8234,
- ERROR_DS_REFERRAL => 8235,
- ERROR_DS_UNAVAILABLE_CRIT_EXTENSION => 8236,
- ERROR_DS_CONFIDENTIALITY_REQUIRED => 8237,
- ERROR_DS_INAPPROPRIATE_MATCHING => 8238,
- ERROR_DS_CONSTRAINT_VIOLATION => 8239,
- ERROR_DS_NO_SUCH_OBJECT => 8240,
- ERROR_DS_ALIAS_PROBLEM => 8241,
- ERROR_DS_INVALID_DN_SYNTAX => 8242,
- ERROR_DS_IS_LEAF => 8243,
- ERROR_DS_ALIAS_DEREF_PROBLEM => 8244,
- ERROR_DS_UNWILLING_TO_PERFORM => 8245,
- ERROR_DS_LOOP_DETECT => 8246,
- ERROR_DS_NAMING_VIOLATION => 8247,
- ERROR_DS_OBJECT_RESULTS_TOO_LARGE => 8248,
- ERROR_DS_AFFECTS_MULTIPLE_DSAS => 8249,
- ERROR_DS_SERVER_DOWN => 8250,
- ERROR_DS_LOCAL_ERROR => 8251,
- ERROR_DS_ENCODING_ERROR => 8252,
- ERROR_DS_DECODING_ERROR => 8253,
- ERROR_DS_FILTER_UNKNOWN => 8254,
- ERROR_DS_PARAM_ERROR => 8255,
- ERROR_DS_NOT_SUPPORTED => 8256,
- ERROR_DS_NO_RESULTS_RETURNED => 8257,
- ERROR_DS_CONTROL_NOT_FOUND => 8258,
- ERROR_DS_CLIENT_LOOP => 8259,
- ERROR_DS_REFERRAL_LIMIT_EXCEEDED => 8260,
- ERROR_DS_SORT_CONTROL_MISSING => 8261,
- ERROR_DS_OFFSET_RANGE_ERROR => 8262,
- ERROR_DS_ROOT_MUST_BE_NC => 8301,
- ERROR_DS_ADD_REPLICA_INHIBITED => 8302,
- ERROR_DS_ATT_NOT_DEF_IN_SCHEMA => 8303,
- ERROR_DS_MAX_OBJ_SIZE_EXCEEDED => 8304,
- ERROR_DS_OBJ_STRING_NAME_EXISTS => 8305,
- ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA => 8306,
- ERROR_DS_RDN_DOESNT_MATCH_SCHEMA => 8307,
- ERROR_DS_NO_REQUESTED_ATTS_FOUND => 8308,
- ERROR_DS_USER_BUFFER_TO_SMALL => 8309,
- ERROR_DS_ATT_IS_NOT_ON_OBJ => 8310,
- ERROR_DS_ILLEGAL_MOD_OPERATION => 8311,
- ERROR_DS_OBJ_TOO_LARGE => 8312,
- ERROR_DS_BAD_INSTANCE_TYPE => 8313,
- ERROR_DS_MASTERDSA_REQUIRED => 8314,
- ERROR_DS_OBJECT_CLASS_REQUIRED => 8315,
- ERROR_DS_MISSING_REQUIRED_ATT => 8316,
- ERROR_DS_ATT_NOT_DEF_FOR_CLASS => 8317,
- ERROR_DS_ATT_ALREADY_EXISTS => 8318,
- ERROR_DS_CANT_ADD_ATT_VALUES => 8320,
- ERROR_DS_SINGLE_VALUE_CONSTRAINT => 8321,
- ERROR_DS_RANGE_CONSTRAINT => 8322,
- ERROR_DS_ATT_VAL_ALREADY_EXISTS => 8323,
- ERROR_DS_CANT_REM_MISSING_ATT => 8324,
- ERROR_DS_CANT_REM_MISSING_ATT_VAL => 8325,
- ERROR_DS_ROOT_CANT_BE_SUBREF => 8326,
- ERROR_DS_NO_CHAINING => 8327,
- ERROR_DS_NO_CHAINED_EVAL => 8328,
- ERROR_DS_NO_PARENT_OBJECT => 8329,
- ERROR_DS_PARENT_IS_AN_ALIAS => 8330,
- ERROR_DS_CANT_MIX_MASTER_AND_REPS => 8331,
- ERROR_DS_CHILDREN_EXIST => 8332,
- ERROR_DS_OBJ_NOT_FOUND => 8333,
- ERROR_DS_ALIASED_OBJ_MISSING => 8334,
- ERROR_DS_BAD_NAME_SYNTAX => 8335,
- ERROR_DS_ALIAS_POINTS_TO_ALIAS => 8336,
- ERROR_DS_CANT_DEREF_ALIAS => 8337,
- ERROR_DS_OUT_OF_SCOPE => 8338,
- ERROR_DS_OBJECT_BEING_REMOVED => 8339,
- ERROR_DS_CANT_DELETE_DSA_OBJ => 8340,
- ERROR_DS_GENERIC_ERROR => 8341,
- ERROR_DS_DSA_MUST_BE_INT_MASTER => 8342,
- ERROR_DS_CLASS_NOT_DSA => 8343,
- ERROR_DS_INSUFF_ACCESS_RIGHTS => 8344,
- ERROR_DS_ILLEGAL_SUPERIOR => 8345,
- ERROR_DS_ATTRIBUTE_OWNED_BY_SAM => 8346,
- ERROR_DS_NAME_TOO_MANY_PARTS => 8347,
- ERROR_DS_NAME_TOO_LONG => 8348,
- ERROR_DS_NAME_VALUE_TOO_LONG => 8349,
- ERROR_DS_NAME_UNPARSEABLE => 8350,
- ERROR_DS_NAME_TYPE_UNKNOWN => 8351,
- ERROR_DS_NOT_AN_OBJECT => 8352,
- ERROR_DS_SEC_DESC_TOO_SHORT => 8353,
- ERROR_DS_SEC_DESC_INVALID => 8354,
- ERROR_DS_NO_DELETED_NAME => 8355,
- ERROR_DS_SUBREF_MUST_HAVE_PARENT => 8356,
- ERROR_DS_NCNAME_MUST_BE_NC => 8357,
- ERROR_DS_CANT_ADD_SYSTEM_ONLY => 8358,
- ERROR_DS_CLASS_MUST_BE_CONCRETE => 8359,
- ERROR_DS_INVALID_DMD => 8360,
- ERROR_DS_OBJ_GUID_EXISTS => 8361,
- ERROR_DS_NOT_ON_BACKLINK => 8362,
- ERROR_DS_NO_CROSSREF_FOR_NC => 8363,
- ERROR_DS_SHUTTING_DOWN => 8364,
- ERROR_DS_UNKNOWN_OPERATION => 8365,
- ERROR_DS_INVALID_ROLE_OWNER => 8366,
- ERROR_DS_COULDNT_CONTACT_FSMO => 8367,
- ERROR_DS_CROSS_NC_DN_RENAME => 8368,
- ERROR_DS_CANT_MOD_SYSTEM_ONLY => 8369,
- ERROR_DS_REPLICATOR_ONLY => 8370,
- ERROR_DS_OBJ_CLASS_NOT_DEFINED => 8371,
- ERROR_DS_OBJ_CLASS_NOT_SUBCLASS => 8372,
- ERROR_DS_NAME_REFERENCE_INVALID => 8373,
- ERROR_DS_CROSS_REF_EXISTS => 8374,
- ERROR_DS_CANT_DEL_MASTER_CROSSREF => 8375,
- ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD => 8376,
- ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX => 8377,
- ERROR_DS_DUP_RDN => 8378,
- ERROR_DS_DUP_OID => 8379,
- ERROR_DS_DUP_MAPI_ID => 8380,
- ERROR_DS_DUP_SCHEMA_ID_GUID => 8381,
- ERROR_DS_DUP_LDAP_DISPLAY_NAME => 8382,
- ERROR_DS_SEMANTIC_ATT_TEST => 8383,
- ERROR_DS_SYNTAX_MISMATCH => 8384,
- ERROR_DS_EXISTS_IN_MUST_HAVE => 8385,
- ERROR_DS_EXISTS_IN_MAY_HAVE => 8386,
- ERROR_DS_NONEXISTENT_MAY_HAVE => 8387,
- ERROR_DS_NONEXISTENT_MUST_HAVE => 8388,
- ERROR_DS_AUX_CLS_TEST_FAIL => 8389,
- ERROR_DS_NONEXISTENT_POSS_SUP => 8390,
- ERROR_DS_SUB_CLS_TEST_FAIL => 8391,
- ERROR_DS_BAD_RDN_ATT_ID_SYNTAX => 8392,
- ERROR_DS_EXISTS_IN_AUX_CLS => 8393,
- ERROR_DS_EXISTS_IN_SUB_CLS => 8394,
- ERROR_DS_EXISTS_IN_POSS_SUP => 8395,
- ERROR_DS_RECALCSCHEMA_FAILED => 8396,
- ERROR_DS_TREE_DELETE_NOT_FINISHED => 8397,
- ERROR_DS_CANT_DELETE => 8398,
- ERROR_DS_ATT_SCHEMA_REQ_ID => 8399,
- ERROR_DS_BAD_ATT_SCHEMA_SYNTAX => 8400,
- ERROR_DS_CANT_CACHE_ATT => 8401,
- ERROR_DS_CANT_CACHE_CLASS => 8402,
- ERROR_DS_CANT_REMOVE_ATT_CACHE => 8403,
- ERROR_DS_CANT_REMOVE_CLASS_CACHE => 8404,
- ERROR_DS_CANT_RETRIEVE_DN => 8405,
- ERROR_DS_MISSING_SUPREF => 8406,
- ERROR_DS_CANT_RETRIEVE_INSTANCE => 8407,
- ERROR_DS_CODE_INCONSISTENCY => 8408,
- ERROR_DS_DATABASE_ERROR => 8409,
- ERROR_DS_GOVERNSID_MISSING => 8410,
- ERROR_DS_MISSING_EXPECTED_ATT => 8411,
- ERROR_DS_NCNAME_MISSING_CR_REF => 8412,
- ERROR_DS_SECURITY_CHECKING_ERROR => 8413,
- ERROR_DS_SCHEMA_NOT_LOADED => 8414,
- ERROR_DS_SCHEMA_ALLOC_FAILED => 8415,
- ERROR_DS_ATT_SCHEMA_REQ_SYNTAX => 8416,
- ERROR_DS_GCVERIFY_ERROR => 8417,
- ERROR_DS_DRA_SCHEMA_MISMATCH => 8418,
- ERROR_DS_CANT_FIND_DSA_OBJ => 8419,
- ERROR_DS_CANT_FIND_EXPECTED_NC => 8420,
- ERROR_DS_CANT_FIND_NC_IN_CACHE => 8421,
- ERROR_DS_CANT_RETRIEVE_CHILD => 8422,
- ERROR_DS_SECURITY_ILLEGAL_MODIFY => 8423,
- ERROR_DS_CANT_REPLACE_HIDDEN_REC => 8424,
- ERROR_DS_BAD_HIERARCHY_FILE => 8425,
- ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED => 8426,
- ERROR_DS_CONFIG_PARAM_MISSING => 8427,
- ERROR_DS_COUNTING_AB_INDICES_FAILED => 8428,
- ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED => 8429,
- ERROR_DS_INTERNAL_FAILURE => 8430,
- ERROR_DS_UNKNOWN_ERROR => 8431,
- ERROR_DS_ROOT_REQUIRES_CLASS_TOP => 8432,
- ERROR_DS_REFUSING_FSMO_ROLES => 8433,
- ERROR_DS_MISSING_FSMO_SETTINGS => 8434,
- ERROR_DS_UNABLE_TO_SURRENDER_ROLES => 8435,
- ERROR_DS_DRA_GENERIC => 8436,
- ERROR_DS_DRA_INVALID_PARAMETER => 8437,
- ERROR_DS_DRA_BUSY => 8438,
- ERROR_DS_DRA_BAD_DN => 8439,
- ERROR_DS_DRA_BAD_NC => 8440,
- ERROR_DS_DRA_DN_EXISTS => 8441,
- ERROR_DS_DRA_INTERNAL_ERROR => 8442,
- ERROR_DS_DRA_INCONSISTENT_DIT => 8443,
- ERROR_DS_DRA_CONNECTION_FAILED => 8444,
- ERROR_DS_DRA_BAD_INSTANCE_TYPE => 8445,
- ERROR_DS_DRA_OUT_OF_MEM => 8446,
- ERROR_DS_DRA_MAIL_PROBLEM => 8447,
- ERROR_DS_DRA_REF_ALREADY_EXISTS => 8448,
- ERROR_DS_DRA_REF_NOT_FOUND => 8449,
- ERROR_DS_DRA_OBJ_IS_REP_SOURCE => 8450,
- ERROR_DS_DRA_DB_ERROR => 8451,
- ERROR_DS_DRA_NO_REPLICA => 8452,
- ERROR_DS_DRA_ACCESS_DENIED => 8453,
- ERROR_DS_DRA_NOT_SUPPORTED => 8454,
- ERROR_DS_DRA_RPC_CANCELLED => 8455,
- ERROR_DS_DRA_SOURCE_DISABLED => 8456,
- ERROR_DS_DRA_SINK_DISABLED => 8457,
- ERROR_DS_DRA_NAME_COLLISION => 8458,
- ERROR_DS_DRA_SOURCE_REINSTALLED => 8459,
- ERROR_DS_DRA_MISSING_PARENT => 8460,
- ERROR_DS_DRA_PREEMPTED => 8461,
- ERROR_DS_DRA_ABANDON_SYNC => 8462,
- ERROR_DS_DRA_SHUTDOWN => 8463,
- ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET => 8464,
- ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA => 8465,
- ERROR_DS_DRA_EXTN_CONNECTION_FAILED => 8466,
- ERROR_DS_INSTALL_SCHEMA_MISMATCH => 8467,
- ERROR_DS_DUP_LINK_ID => 8468,
- ERROR_DS_NAME_ERROR_RESOLVING => 8469,
- ERROR_DS_NAME_ERROR_NOT_FOUND => 8470,
- ERROR_DS_NAME_ERROR_NOT_UNIQUE => 8471,
- ERROR_DS_NAME_ERROR_NO_MAPPING => 8472,
- ERROR_DS_NAME_ERROR_DOMAIN_ONLY => 8473,
- ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING => 8474,
- ERROR_DS_CONSTRUCTED_ATT_MOD => 8475,
- ERROR_DS_WRONG_OM_OBJ_CLASS => 8476,
- ERROR_DS_DRA_REPL_PENDING => 8477,
- ERROR_DS_DS_REQUIRED => 8478,
- ERROR_DS_INVALID_LDAP_DISPLAY_NAME => 8479,
- ERROR_DS_NON_BASE_SEARCH => 8480,
- ERROR_DS_CANT_RETRIEVE_ATTS => 8481,
- ERROR_DS_BACKLINK_WITHOUT_LINK => 8482,
- ERROR_DS_EPOCH_MISMATCH => 8483,
- ERROR_DS_SRC_NAME_MISMATCH => 8484,
- ERROR_DS_SRC_AND_DST_NC_IDENTICAL => 8485,
- ERROR_DS_DST_NC_MISMATCH => 8486,
- ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC => 8487,
- ERROR_DS_SRC_GUID_MISMATCH => 8488,
- ERROR_DS_CANT_MOVE_DELETED_OBJECT => 8489,
- ERROR_DS_PDC_OPERATION_IN_PROGRESS => 8490,
- ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD => 8491,
- ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION => 8492,
- ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS => 8493,
- ERROR_DS_NC_MUST_HAVE_NC_PARENT => 8494,
- ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE => 8495,
- ERROR_DS_DST_DOMAIN_NOT_NATIVE => 8496,
- ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER => 8497,
- ERROR_DS_CANT_MOVE_ACCOUNT_GROUP => 8498,
- ERROR_DS_CANT_MOVE_RESOURCE_GROUP => 8499,
- ERROR_DS_INVALID_SEARCH_FLAG => 8500,
- ERROR_DS_NO_TREE_DELETE_ABOVE_NC => 8501,
- ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE => 8502,
- ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE => 8503,
- ERROR_DS_SAM_INIT_FAILURE => 8504,
- ERROR_DS_SENSITIVE_GROUP_VIOLATION => 8505,
- ERROR_DS_CANT_MOD_PRIMARYGROUPID => 8506,
- ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD => 8507,
- ERROR_DS_NONSAFE_SCHEMA_CHANGE => 8508,
- ERROR_DS_SCHEMA_UPDATE_DISALLOWED => 8509,
- ERROR_DS_CANT_CREATE_UNDER_SCHEMA => 8510,
- ERROR_DS_INSTALL_NO_SRC_SCH_VERSION => 8511,
- ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE => 8512,
- ERROR_DS_INVALID_GROUP_TYPE => 8513,
- ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN => 8514,
- ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN => 8515,
- ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER => 8516,
- ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER => 8517,
- ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER => 8518,
- ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER => 8519,
- ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER => 8520,
- ERROR_DS_HAVE_PRIMARY_MEMBERS => 8521,
- ERROR_DS_STRING_SD_CONVERSION_FAILED => 8522,
- ERROR_DS_NAMING_MASTER_GC => 8523,
- ERROR_DS_DNS_LOOKUP_FAILURE => 8524,
- ERROR_DS_COULDNT_UPDATE_SPNS => 8525,
- ERROR_DS_CANT_RETRIEVE_SD => 8526,
- ERROR_DS_KEY_NOT_UNIQUE => 8527,
- ERROR_DS_WRONG_LINKED_ATT_SYNTAX => 8528,
- ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD => 8529,
- ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY => 8530,
- ERROR_DS_CANT_START => 8531,
- ERROR_DS_INIT_FAILURE => 8532,
- ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION => 8533,
- ERROR_DS_SOURCE_DOMAIN_IN_FOREST => 8534,
- ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST => 8535,
- ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED => 8536,
- ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN => 8537,
- ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER => 8538,
- ERROR_DS_SRC_SID_EXISTS_IN_FOREST => 8539,
- ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH => 8540,
- ERROR_SAM_INIT_FAILURE => 8541,
- ERROR_DS_DRA_SCHEMA_INFO_SHIP => 8542,
- ERROR_DS_DRA_SCHEMA_CONFLICT => 8543,
- ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT => 8544,
- ERROR_DS_DRA_OBJ_NC_MISMATCH => 8545,
- ERROR_DS_NC_STILL_HAS_DSAS => 8546,
- ERROR_DS_GC_REQUIRED => 8547,
- ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY => 8548,
- ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS => 8549,
- ERROR_DS_CANT_ADD_TO_GC => 8550,
- ERROR_DS_NO_CHECKPOINT_WITH_PDC => 8551,
- ERROR_DS_SOURCE_AUDITING_NOT_ENABLED => 8552,
- ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC => 8553,
- ERROR_DS_INVALID_NAME_FOR_SPN => 8554,
- ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS => 8555,
- ERROR_DS_UNICODEPWD_NOT_IN_QUOTES => 8556,
- ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED => 8557,
- ERROR_DS_MUST_BE_RUN_ON_DST_DC => 8558,
- ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER => 8559,
- ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ => 8560,
- ERROR_DS_INIT_FAILURE_CONSOLE => 8561,
- ERROR_DS_SAM_INIT_FAILURE_CONSOLE => 8562,
- ERROR_DS_FOREST_VERSION_TOO_HIGH => 8563,
- ERROR_DS_DOMAIN_VERSION_TOO_HIGH => 8564,
- ERROR_DS_FOREST_VERSION_TOO_LOW => 8565,
- ERROR_DS_DOMAIN_VERSION_TOO_LOW => 8566,
- ERROR_DS_INCOMPATIBLE_VERSION => 8567,
- ERROR_DS_LOW_DSA_VERSION => 8568,
- ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN => 8569,
- ERROR_DS_NOT_SUPPORTED_SORT_ORDER => 8570,
- ERROR_DS_NAME_NOT_UNIQUE => 8571,
- ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 => 8572,
- ERROR_DS_OUT_OF_VERSION_STORE => 8573,
- ERROR_DS_INCOMPATIBLE_CONTROLS_USED => 8574,
- ERROR_DS_NO_REF_DOMAIN => 8575,
- ERROR_DS_RESERVED_LINK_ID => 8576,
- ERROR_DS_LINK_ID_NOT_AVAILABLE => 8577,
- ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER => 8578,
- ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE => 8579,
- ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC => 8580,
- ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG => 8581,
- ERROR_DS_MODIFYDN_WRONG_GRANDPARENT => 8582,
- ERROR_DS_NAME_ERROR_TRUST_REFERRAL => 8583,
- ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER => 8584,
- ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD => 8585,
- ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 => 8586,
- ERROR_DS_THREAD_LIMIT_EXCEEDED => 8587,
- ERROR_DS_NOT_CLOSEST => 8588,
- ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF => 8589,
- ERROR_DS_SINGLE_USER_MODE_FAILED => 8590,
- ERROR_DS_NTDSCRIPT_SYNTAX_ERROR => 8591,
- ERROR_DS_NTDSCRIPT_PROCESS_ERROR => 8592,
- ERROR_DS_DIFFERENT_REPL_EPOCHS => 8593,
- ERROR_DS_DRS_EXTENSIONS_CHANGED => 8594,
- ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR => 8595,
- ERROR_DS_NO_MSDS_INTID => 8596,
- ERROR_DS_DUP_MSDS_INTID => 8597,
- ERROR_DS_EXISTS_IN_RDNATTID => 8598,
- ERROR_DS_AUTHORIZATION_FAILED => 8599,
- ERROR_DS_INVALID_SCRIPT => 8600,
- ERROR_DS_REMOTE_CROSSREF_OP_FAILED => 8601,
- ERROR_DS_CROSS_REF_BUSY => 8602,
- ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN => 8603,
- ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC => 8604,
- ERROR_DS_DUPLICATE_ID_FOUND => 8605,
- ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT => 8606,
- ERROR_DS_GROUP_CONVERSION_ERROR => 8607,
- ERROR_DS_CANT_MOVE_APP_BASIC_GROUP => 8608,
- ERROR_DS_CANT_MOVE_APP_QUERY_GROUP => 8609,
- ERROR_DS_ROLE_NOT_VERIFIED => 8610,
- ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL => 8611,
- ERROR_DS_DOMAIN_RENAME_IN_PROGRESS => 8612,
- ERROR_DS_EXISTING_AD_CHILD_NC => 8613,
- ERROR_DS_REPL_LIFETIME_EXCEEDED => 8614,
- ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER => 8615,
- ERROR_DS_LDAP_SEND_QUEUE_FULL => 8616,
- ERROR_DS_DRA_OUT_SCHEDULE_WINDOW => 8617,
- WSAEINTR => 10004,
- WSAEBADF => 10009,
- WSAEACCES => 10013,
- WSAEFAULT => 10014,
- WSAEINVAL => 10022,
- WSAEMFILE => 10024,
- WSAEWOULDBLOCK => 10035,
- WSAEINPROGRESS => 10036,
- WSAEALREADY => 10037,
- WSAENOTSOCK => 10038,
- WSAEDESTADDRREQ => 10039,
- WSAEMSGSIZE => 10040,
- WSAEPROTOTYPE => 10041,
- WSAENOPROTOOPT => 10042,
- WSAEPROTONOSUPPORT => 10043,
- ESOCKTNOSUPPORT => 10044,
- WSAESOCKTNOSUPPORT => 10044,
- WSAEOPNOTSUPP => 10045,
- EPFNOSUPPORT => 10046,
- WSAEPFNOSUPPORT => 10046,
- WSAEAFNOSUPPORT => 10047,
- WSAEADDRINUSE => 10048,
- WSAEADDRNOTAVAIL => 10049,
- WSAENETDOWN => 10050,
- WSAENETUNREACH => 10051,
- WSAENETRESET => 10052,
- WSAECONNABORTED => 10053,
- WSAECONNRESET => 10054,
- WSAENOBUFS => 10055,
- WSAEISCONN => 10056,
- WSAENOTCONN => 10057,
- ESHUTDOWN => 10058,
- WSAESHUTDOWN => 10058,
- ETOOMANYREFS => 10059,
- WSAETOOMANYREFS => 10059,
- WSAETIMEDOUT => 10060,
- WSAECONNREFUSED => 10061,
- WSAELOOP => 10062,
- WSAENAMETOOLONG => 10063,
- WSAEHOSTDOWN => 10064,
- WSAEHOSTUNREACH => 10065,
- WSAENOTEMPTY => 10066,
- EPROCLIM => 10067,
- WSAEPROCLIM => 10067,
- EUSERS => 10068,
- WSAEUSERS => 10068,
- EDQUOT => 10069,
- WSAEDQUOT => 10069,
- ESTALE => 10070,
- WSAESTALE => 10070,
- EREMOTE => 10071,
- WSAEREMOTE => 10071,
- WSAEDISCON => 10101,
- WSAENOMORE => 10102,
- WSAECANCELLED => 10103,
- WSAEINVALIDPROCTABLE => 10104,
- WSAEINVALIDPROVIDER => 10105,
- WSAEPROVIDERFAILEDINIT => 10106,
- WSAEREFUSED => 10112,
- ERROR_BIDI_ERROR_BASE => 13000,
- ERROR_IPSEC_QM_POLICY_EXISTS => 13000,
- ERROR_BIDI_STATUS_WARNING => 13001,
- ERROR_IPSEC_QM_POLICY_NOT_FOUND => 13001,
- ERROR_BIDI_SCHEMA_READ_ONLY => 13002,
- ERROR_IPSEC_QM_POLICY_IN_USE => 13002,
- ERROR_BIDI_SERVER_OFFLINE => 13003,
- ERROR_IPSEC_MM_POLICY_EXISTS => 13003,
- ERROR_BIDI_DEVICE_OFFLINE => 13004,
- ERROR_IPSEC_MM_POLICY_NOT_FOUND => 13004,
- ERROR_BIDI_SCHEMA_NOT_SUPPORTED => 13005,
- ERROR_IPSEC_MM_POLICY_IN_USE => 13005,
- ERROR_IPSEC_MM_FILTER_EXISTS => 13006,
- ERROR_IPSEC_MM_FILTER_NOT_FOUND => 13007,
- ERROR_IPSEC_TRANSPORT_FILTER_EXISTS => 13008,
- ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND => 13009,
- ERROR_IPSEC_MM_AUTH_EXISTS => 13010,
- ERROR_IPSEC_MM_AUTH_NOT_FOUND => 13011,
- ERROR_IPSEC_MM_AUTH_IN_USE => 13012,
- ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND => 13013,
- ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND => 13014,
- ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND => 13015,
- ERROR_IPSEC_TUNNEL_FILTER_EXISTS => 13016,
- ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND => 13017,
- ERROR_IPSEC_MM_FILTER_PENDING_DELETION => 13018,
- ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION => 13019,
- ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION => 13020,
- ERROR_IPSEC_MM_POLICY_PENDING_DELETION => 13021,
- ERROR_IPSEC_MM_AUTH_PENDING_DELETION => 13022,
- ERROR_IPSEC_QM_POLICY_PENDING_DELETION => 13023,
- ERROR_IPSEC_IKE_NEG_STATUS_BEGIN => 13800,
- ERROR_IPSEC_IKE_AUTH_FAIL => 13801,
- ERROR_IPSEC_IKE_ATTRIB_FAIL => 13802,
- ERROR_IPSEC_IKE_NEGOTIATION_PENDING => 13803,
- ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR => 13804,
- ERROR_IPSEC_IKE_TIMED_OUT => 13805,
- ERROR_IPSEC_IKE_NO_CERT => 13806,
- ERROR_IPSEC_IKE_SA_DELETED => 13807,
- ERROR_IPSEC_IKE_SA_REAPED => 13808,
- ERROR_IPSEC_IKE_MM_ACQUIRE_DROP => 13809,
- ERROR_IPSEC_IKE_QM_ACQUIRE_DROP => 13810,
- ERROR_IPSEC_IKE_QUEUE_DROP_MM => 13811,
- ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM => 13812,
- ERROR_IPSEC_IKE_DROP_NO_RESPONSE => 13813,
- ERROR_IPSEC_IKE_MM_DELAY_DROP => 13814,
- ERROR_IPSEC_IKE_QM_DELAY_DROP => 13815,
- ERROR_IPSEC_IKE_ERROR => 13816,
- ERROR_IPSEC_IKE_CRL_FAILED => 13817,
- ERROR_IPSEC_IKE_INVALID_KEY_USAGE => 13818,
- ERROR_IPSEC_IKE_INVALID_CERT_TYPE => 13819,
- ERROR_IPSEC_IKE_NO_PRIVATE_KEY => 13820,
- ERROR_IPSEC_IKE_DH_FAIL => 13822,
- ERROR_IPSEC_IKE_INVALID_HEADER => 13824,
- ERROR_IPSEC_IKE_NO_POLICY => 13825,
- ERROR_IPSEC_IKE_INVALID_SIGNATURE => 13826,
- ERROR_IPSEC_IKE_KERBEROS_ERROR => 13827,
- ERROR_IPSEC_IKE_NO_PUBLIC_KEY => 13828,
- ERROR_IPSEC_IKE_PROCESS_ERR => 13829,
- ERROR_IPSEC_IKE_PROCESS_ERR_SA => 13830,
- ERROR_IPSEC_IKE_PROCESS_ERR_PROP => 13831,
- ERROR_IPSEC_IKE_PROCESS_ERR_TRANS => 13832,
- ERROR_IPSEC_IKE_PROCESS_ERR_KE => 13833,
- ERROR_IPSEC_IKE_PROCESS_ERR_ID => 13834,
- ERROR_IPSEC_IKE_PROCESS_ERR_CERT => 13835,
- ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ => 13836,
- ERROR_IPSEC_IKE_PROCESS_ERR_HASH => 13837,
- ERROR_IPSEC_IKE_PROCESS_ERR_SIG => 13838,
- ERROR_IPSEC_IKE_PROCESS_ERR_NONCE => 13839,
- ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY => 13840,
- ERROR_IPSEC_IKE_PROCESS_ERR_DELETE => 13841,
- ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR => 13842,
- ERROR_IPSEC_IKE_INVALID_PAYLOAD => 13843,
- ERROR_IPSEC_IKE_LOAD_SOFT_SA => 13844,
- ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN => 13845,
- ERROR_IPSEC_IKE_INVALID_COOKIE => 13846,
- ERROR_IPSEC_IKE_NO_PEER_CERT => 13847,
- ERROR_IPSEC_IKE_PEER_CRL_FAILED => 13848,
- ERROR_IPSEC_IKE_POLICY_CHANGE => 13849,
- ERROR_IPSEC_IKE_NO_MM_POLICY => 13850,
- ERROR_IPSEC_IKE_NOTCBPRIV => 13851,
- ERROR_IPSEC_IKE_SECLOADFAIL => 13852,
- ERROR_IPSEC_IKE_FAILSSPINIT => 13853,
- ERROR_IPSEC_IKE_FAILQUERYSSP => 13854,
- ERROR_IPSEC_IKE_SRVACQFAIL => 13855,
- ERROR_IPSEC_IKE_SRVQUERYCRED => 13856,
- ERROR_IPSEC_IKE_GETSPIFAIL => 13857,
- ERROR_IPSEC_IKE_INVALID_FILTER => 13858,
- ERROR_IPSEC_IKE_OUT_OF_MEMORY => 13859,
- ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED => 13860,
- ERROR_IPSEC_IKE_INVALID_POLICY => 13861,
- ERROR_IPSEC_IKE_UNKNOWN_DOI => 13862,
- ERROR_IPSEC_IKE_INVALID_SITUATION => 13863,
- ERROR_IPSEC_IKE_DH_FAILURE => 13864,
- ERROR_IPSEC_IKE_INVALID_GROUP => 13865,
- ERROR_IPSEC_IKE_ENCRYPT => 13866,
- ERROR_IPSEC_IKE_DECRYPT => 13867,
- ERROR_IPSEC_IKE_POLICY_MATCH => 13868,
- ERROR_IPSEC_IKE_UNSUPPORTED_ID => 13869,
- ERROR_IPSEC_IKE_INVALID_HASH => 13870,
- ERROR_IPSEC_IKE_INVALID_HASH_ALG => 13871,
- ERROR_IPSEC_IKE_INVALID_HASH_SIZE => 13872,
- ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG => 13873,
- ERROR_IPSEC_IKE_INVALID_AUTH_ALG => 13874,
- ERROR_IPSEC_IKE_INVALID_SIG => 13875,
- ERROR_IPSEC_IKE_LOAD_FAILED => 13876,
- ERROR_IPSEC_IKE_RPC_DELETE => 13877,
- ERROR_IPSEC_IKE_BENIGN_REINIT => 13878,
- ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY => 13879,
- ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN => 13881,
- ERROR_IPSEC_IKE_MM_LIMIT => 13882,
- ERROR_IPSEC_IKE_NEGOTIATION_DISABLED => 13883,
- ERROR_IPSEC_IKE_QM_LIMIT => 13884,
- ERROR_IPSEC_IKE_MM_EXPIRED => 13885,
- ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID => 13886,
- ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH => 13887,
- ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID => 13888,
- ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD => 13889,
- ERROR_IPSEC_IKE_DOS_COOKIE_SENT => 13890,
- ERROR_IPSEC_IKE_SHUTTING_DOWN => 13891,
- ERROR_IPSEC_IKE_CGA_AUTH_FAILED => 13892,
- ERROR_IPSEC_IKE_PROCESS_ERR_NATOA => 13893,
- ERROR_IPSEC_IKE_INVALID_MM_FOR_QM => 13894,
- ERROR_IPSEC_IKE_QM_EXPIRED => 13895,
- ERROR_IPSEC_IKE_TOO_MANY_FILTERS => 13896,
- ERROR_IPSEC_IKE_NEG_STATUS_END => 13897,
- ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL => 13898,
- ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE => 13899,
- ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING => 13900,
- ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING => 13901,
- ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS => 13902,
- ERROR_IPSEC_IKE_RATELIMIT_DROP => 13903,
- ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE => 13904,
- ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE => 13905,
- ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE => 13906,
- ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY => 13907,
- ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE => 13908,
- ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END => 13909,
- ERROR_IPSEC_BAD_SPI => 13910,
- ERROR_IPSEC_SA_LIFETIME_EXPIRED => 13911,
- ERROR_IPSEC_WRONG_SA => 13912,
- ERROR_IPSEC_REPLAY_CHECK_FAILED => 13913,
- ERROR_IPSEC_INVALID_PACKET => 13914,
- ERROR_IPSEC_INTEGRITY_CHECK_FAILED => 13915,
- ERROR_IPSEC_CLEAR_TEXT_DROP => 13916,
- ERROR_IPSEC_AUTH_FIREWALL_DROP => 13917,
- ERROR_IPSEC_THROTTLE_DROP => 13918,
- ERROR_IPSEC_DOSP_BLOCK => 13925,
- ERROR_IPSEC_DOSP_RECEIVED_MULTICAST => 13926,
- ERROR_IPSEC_DOSP_INVALID_PACKET => 13927,
- ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED => 13928,
- ERROR_IPSEC_DOSP_MAX_ENTRIES => 13929,
- ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED => 13930,
- ERROR_IPSEC_DOSP_NOT_INSTALLED => 13931,
- ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES => 13932,
- ERROR_SXS_SECTION_NOT_FOUND => 14000,
- ERROR_SXS_CANT_GEN_ACTCTX => 14001,
- ERROR_SXS_INVALID_ACTCTXDATA_FORMAT => 14002,
- ERROR_SXS_ASSEMBLY_NOT_FOUND => 14003,
- ERROR_SXS_MANIFEST_FORMAT_ERROR => 14004,
- ERROR_SXS_MANIFEST_PARSE_ERROR => 14005,
- ERROR_SXS_ACTIVATION_CONTEXT_DISABLED => 14006,
- ERROR_SXS_KEY_NOT_FOUND => 14007,
- ERROR_SXS_VERSION_CONFLICT => 14008,
- ERROR_SXS_WRONG_SECTION_TYPE => 14009,
- ERROR_SXS_THREAD_QUERIES_DISABLED => 14010,
- ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET => 14011,
- ERROR_SXS_UNKNOWN_ENCODING_GROUP => 14012,
- ERROR_SXS_UNKNOWN_ENCODING => 14013,
- ERROR_SXS_INVALID_XML_NAMESPACE_URI => 14014,
- ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED => 14015,
- ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED => 14016,
- ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE => 14017,
- ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE => 14018,
- ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE => 14019,
- ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT => 14020,
- ERROR_SXS_DUPLICATE_DLL_NAME => 14021,
- ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME => 14022,
- ERROR_SXS_DUPLICATE_CLSID => 14023,
- ERROR_SXS_DUPLICATE_IID => 14024,
- ERROR_SXS_DUPLICATE_TLBID => 14025,
- ERROR_SXS_DUPLICATE_PROGID => 14026,
- ERROR_SXS_DUPLICATE_ASSEMBLY_NAME => 14027,
- ERROR_SXS_FILE_HASH_MISMATCH => 14028,
- ERROR_SXS_POLICY_PARSE_ERROR => 14029,
- ERROR_SXS_XML_E_MISSINGQUOTE => 14030,
- ERROR_SXS_XML_E_COMMENTSYNTAX => 14031,
- ERROR_SXS_XML_E_BADSTARTNAMECHAR => 14032,
- ERROR_SXS_XML_E_BADNAMECHAR => 14033,
- ERROR_SXS_XML_E_BADCHARINSTRING => 14034,
- ERROR_SXS_XML_E_XMLDECLSYNTAX => 14035,
- ERROR_SXS_XML_E_BADCHARDATA => 14036,
- ERROR_SXS_XML_E_MISSINGWHITESPACE => 14037,
- ERROR_SXS_XML_E_EXPECTINGTAGEND => 14038,
- ERROR_SXS_XML_E_MISSINGSEMICOLON => 14039,
- ERROR_SXS_XML_E_UNBALANCEDPAREN => 14040,
- ERROR_SXS_XML_E_INTERNALERROR => 14041,
- ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE => 14042,
- ERROR_SXS_XML_E_INCOMPLETE_ENCODING => 14043,
- ERROR_SXS_XML_E_MISSING_PAREN => 14044,
- ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE => 14045,
- ERROR_SXS_XML_E_MULTIPLE_COLONS => 14046,
- ERROR_SXS_XML_E_INVALID_DECIMAL => 14047,
- ERROR_SXS_XML_E_INVALID_HEXIDECIMAL => 14048,
- ERROR_SXS_XML_E_INVALID_UNICODE => 14049,
- ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK => 14050,
- ERROR_SXS_XML_E_UNEXPECTEDENDTAG => 14051,
- ERROR_SXS_XML_E_UNCLOSEDTAG => 14052,
- ERROR_SXS_XML_E_DUPLICATEATTRIBUTE => 14053,
- ERROR_SXS_XML_E_MULTIPLEROOTS => 14054,
- ERROR_SXS_XML_E_INVALIDATROOTLEVEL => 14055,
- ERROR_SXS_XML_E_BADXMLDECL => 14056,
- ERROR_SXS_XML_E_MISSINGROOT => 14057,
- ERROR_SXS_XML_E_UNEXPECTEDEOF => 14058,
- ERROR_SXS_XML_E_BADPEREFINSUBSET => 14059,
- ERROR_SXS_XML_E_UNCLOSEDSTARTTAG => 14060,
- ERROR_SXS_XML_E_UNCLOSEDENDTAG => 14061,
- ERROR_SXS_XML_E_UNCLOSEDSTRING => 14062,
- ERROR_SXS_XML_E_UNCLOSEDCOMMENT => 14063,
- ERROR_SXS_XML_E_UNCLOSEDDECL => 14064,
- ERROR_SXS_XML_E_UNCLOSEDCDATA => 14065,
- ERROR_SXS_XML_E_RESERVEDNAMESPACE => 14066,
- ERROR_SXS_XML_E_INVALIDENCODING => 14067,
- ERROR_SXS_XML_E_INVALIDSWITCH => 14068,
- ERROR_SXS_XML_E_BADXMLCASE => 14069,
- ERROR_SXS_XML_E_INVALID_STANDALONE => 14070,
- ERROR_SXS_XML_E_UNEXPECTED_STANDALONE => 14071,
- ERROR_SXS_XML_E_INVALID_VERSION => 14072,
- ERROR_SXS_XML_E_MISSINGEQUALS => 14073,
- ERROR_SXS_PROTECTION_RECOVERY_FAILED => 14074,
- ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT => 14075,
- ERROR_SXS_PROTECTION_CATALOG_NOT_VALID => 14076,
- ERROR_SXS_UNTRANSLATABLE_HRESULT => 14077,
- ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING => 14078,
- ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE => 14079,
- ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME => 14080,
- ERROR_SXS_ASSEMBLY_MISSING => 14081,
- ERROR_SXS_CORRUPT_ACTIVATION_STACK => 14082,
- ERROR_SXS_CORRUPTION => 14083,
- ERROR_SXS_EARLY_DEACTIVATION => 14084,
- ERROR_SXS_INVALID_DEACTIVATION => 14085,
- ERROR_SXS_MULTIPLE_DEACTIVATION => 14086,
- ERROR_SXS_PROCESS_TERMINATION_REQUESTED => 14087,
- ERROR_SXS_RELEASE_ACTIVATION_CONTEXT => 14088,
- ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY => 14089,
- ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE => 14090,
- ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME => 14091,
- ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE => 14092,
- ERROR_SXS_IDENTITY_PARSE_ERROR => 14093,
- ERROR_MALFORMED_SUBSTITUTION_STRING => 14094,
- ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN => 14095,
- ERROR_UNMAPPED_SUBSTITUTION_STRING => 14096,
- ERROR_SXS_ASSEMBLY_NOT_LOCKED => 14097,
- ERROR_SXS_COMPONENT_STORE_CORRUPT => 14098,
- ERROR_ADVANCED_INSTALLER_FAILED => 14099,
- ERROR_XML_ENCODING_MISMATCH => 14100,
- ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT => 14101,
- ERROR_SXS_IDENTITIES_DIFFERENT => 14102,
- ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT => 14103,
- ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY => 14104,
- ERROR_SXS_MANIFEST_TOO_BIG => 14105,
- ERROR_SXS_SETTING_NOT_REGISTERED => 14106,
- ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE => 14107,
- ERROR_SMI_PRIMITIVE_INSTALLER_FAILED => 14108,
- ERROR_GENERIC_COMMAND_FAILED => 14109,
- ERROR_SXS_FILE_HASH_MISSING => 14110,
- ERROR_EVT_INVALID_CHANNEL_PATH => 15000,
- ERROR_EVT_INVALID_QUERY => 15001,
- ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND => 15002,
- ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND => 15003,
- ERROR_EVT_INVALID_PUBLISHER_NAME => 15004,
- ERROR_EVT_INVALID_EVENT_DATA => 15005,
- ERROR_EVT_CHANNEL_NOT_FOUND => 15007,
- ERROR_EVT_MALFORMED_XML_TEXT => 15008,
- ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL => 15009,
- ERROR_EVT_CONFIGURATION_ERROR => 15010,
- ERROR_EVT_QUERY_RESULT_STALE => 15011,
- ERROR_EVT_QUERY_RESULT_INVALID_POSITION => 15012,
- ERROR_EVT_NON_VALIDATING_MSXML => 15013,
- ERROR_EVT_FILTER_ALREADYSCOPED => 15014,
- ERROR_EVT_FILTER_NOTELTSET => 15015,
- ERROR_EVT_FILTER_INVARG => 15016,
- ERROR_EVT_FILTER_INVTEST => 15017,
- ERROR_EVT_FILTER_INVTYPE => 15018,
- ERROR_EVT_FILTER_PARSEERR => 15019,
- ERROR_EVT_FILTER_UNSUPPORTEDOP => 15020,
- ERROR_EVT_FILTER_UNEXPECTEDTOKEN => 15021,
- ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL => 15022,
- ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE => 15023,
- ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE => 15024,
- ERROR_EVT_CHANNEL_CANNOT_ACTIVATE => 15025,
- ERROR_EVT_FILTER_TOO_COMPLEX => 15026,
- ERROR_EVT_MESSAGE_NOT_FOUND => 15027,
- ERROR_EVT_MESSAGE_ID_NOT_FOUND => 15028,
- ERROR_EVT_UNRESOLVED_VALUE_INSERT => 15029,
- ERROR_EVT_UNRESOLVED_PARAMETER_INSERT => 15030,
- ERROR_EVT_MAX_INSERTS_REACHED => 15031,
- ERROR_EVT_EVENT_DEFINITION_NOT_FOUND => 15032,
- ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND => 15033,
- ERROR_EVT_VERSION_TOO_OLD => 15034,
- ERROR_EVT_VERSION_TOO_NEW => 15035,
- ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY => 15036,
- ERROR_EVT_PUBLISHER_DISABLED => 15037,
- ERROR_EVT_FILTER_OUT_OF_RANGE => 15038,
- ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE => 15080,
- ERROR_EC_LOG_DISABLED => 15081,
- ERROR_EC_CIRCULAR_FORWARDING => 15082,
- ERROR_EC_CREDSTORE_FULL => 15083,
- ERROR_EC_CRED_NOT_FOUND => 15084,
- ERROR_EC_NO_ACTIVE_CHANNEL => 15085,
- ERROR_MUI_FILE_NOT_FOUND => 15100,
- ERROR_MUI_INVALID_FILE => 15101,
- ERROR_MUI_INVALID_RC_CONFIG => 15102,
- ERROR_MUI_INVALID_LOCALE_NAME => 15103,
- ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME => 15104,
- ERROR_MUI_FILE_NOT_LOADED => 15105,
- ERROR_RESOURCE_ENUM_USER_STOP => 15106,
- ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED => 15107,
- ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME => 15108,
- ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE => 15110,
- ERROR_MRM_INVALID_PRICONFIG => 15111,
- ERROR_MRM_INVALID_FILE_TYPE => 15112,
- ERROR_MRM_UNKNOWN_QUALIFIER => 15113,
- ERROR_MRM_INVALID_QUALIFIER_VALUE => 15114,
- ERROR_MRM_NO_CANDIDATE => 15115,
- ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE => 15116,
- ERROR_MRM_RESOURCE_TYPE_MISMATCH => 15117,
- ERROR_MRM_DUPLICATE_MAP_NAME => 15118,
- ERROR_MRM_DUPLICATE_ENTRY => 15119,
- ERROR_MRM_INVALID_RESOURCE_IDENTIFIER => 15120,
- ERROR_MRM_FILEPATH_TOO_LONG => 15121,
- ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE => 15122,
- ERROR_MRM_INVALID_PRI_FILE => 15126,
- ERROR_MRM_NAMED_RESOURCE_NOT_FOUND => 15127,
- ERROR_MRM_MAP_NOT_FOUND => 15135,
- ERROR_MRM_UNSUPPORTED_PROFILE_TYPE => 15136,
- ERROR_MRM_INVALID_QUALIFIER_OPERATOR => 15137,
- ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE => 15138,
- ERROR_MRM_AUTOMERGE_ENABLED => 15139,
- ERROR_MRM_TOO_MANY_RESOURCES => 15140,
- ERROR_MCA_INVALID_CAPABILITIES_STRING => 15200,
- ERROR_MCA_INVALID_VCP_VERSION => 15201,
- ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION => 15202,
- ERROR_MCA_MCCS_VERSION_MISMATCH => 15203,
- ERROR_MCA_UNSUPPORTED_MCCS_VERSION => 15204,
- ERROR_MCA_INTERNAL_ERROR => 15205,
- ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED => 15206,
- ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE => 15207,
- ERROR_AMBIGUOUS_SYSTEM_DEVICE => 15250,
- ERROR_SYSTEM_DEVICE_NOT_FOUND => 15299,
- ERROR_HASH_NOT_SUPPORTED => 15300,
- ERROR_HASH_NOT_PRESENT => 15301,
- ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED => 15321,
- ERROR_GPIO_CLIENT_INFORMATION_INVALID => 15322,
- ERROR_GPIO_VERSION_NOT_SUPPORTED => 15323,
- ERROR_GPIO_INVALID_REGISTRATION_PACKET => 15324,
- ERROR_GPIO_OPERATION_DENIED => 15325,
- ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE => 15326,
- ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED => 15327,
- ERROR_CANNOT_SWITCH_RUNLEVEL => 15400,
- ERROR_INVALID_RUNLEVEL_SETTING => 15401,
- ERROR_RUNLEVEL_SWITCH_TIMEOUT => 15402,
- ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT => 15403,
- ERROR_RUNLEVEL_SWITCH_IN_PROGRESS => 15404,
- ERROR_SERVICES_FAILED_AUTOSTART => 15405,
- ERROR_COM_TASK_STOP_PENDING => 15501,
- ERROR_INSTALL_OPEN_PACKAGE_FAILED => 15600,
- ERROR_INSTALL_PACKAGE_NOT_FOUND => 15601,
- ERROR_INSTALL_INVALID_PACKAGE => 15602,
- ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED => 15603,
- ERROR_INSTALL_OUT_OF_DISK_SPACE => 15604,
- ERROR_INSTALL_NETWORK_FAILURE => 15605,
- ERROR_INSTALL_REGISTRATION_FAILURE => 15606,
- ERROR_INSTALL_DEREGISTRATION_FAILURE => 15607,
- ERROR_INSTALL_CANCEL => 15608,
- ERROR_INSTALL_FAILED => 15609,
- ERROR_REMOVE_FAILED => 15610,
- ERROR_PACKAGE_ALREADY_EXISTS => 15611,
- ERROR_NEEDS_REMEDIATION => 15612,
- ERROR_INSTALL_PREREQUISITE_FAILED => 15613,
- ERROR_PACKAGE_REPOSITORY_CORRUPTED => 15614,
- ERROR_INSTALL_POLICY_FAILURE => 15615,
- ERROR_PACKAGE_UPDATING => 15616,
- ERROR_DEPLOYMENT_BLOCKED_BY_POLICY => 15617,
- ERROR_PACKAGES_IN_USE => 15618,
- ERROR_RECOVERY_FILE_CORRUPT => 15619,
- ERROR_INVALID_STAGED_SIGNATURE => 15620,
- ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED => 15621,
- ERROR_INSTALL_PACKAGE_DOWNGRADE => 15622,
- ERROR_SYSTEM_NEEDS_REMEDIATION => 15623,
- ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN => 15624,
- ERROR_RESILIENCY_FILE_CORRUPT => 15625,
- ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING => 15626,
- ERROR_STATE_LOAD_STORE_FAILED => 15800,
- ERROR_STATE_GET_VERSION_FAILED => 15801,
- ERROR_STATE_SET_VERSION_FAILED => 15802,
- ERROR_STATE_STRUCTURED_RESET_FAILED => 15803,
- ERROR_STATE_OPEN_CONTAINER_FAILED => 15804,
- ERROR_STATE_CREATE_CONTAINER_FAILED => 15805,
- ERROR_STATE_DELETE_CONTAINER_FAILED => 15806,
- ERROR_STATE_READ_SETTING_FAILED => 15807,
- ERROR_STATE_WRITE_SETTING_FAILED => 15808,
- ERROR_STATE_DELETE_SETTING_FAILED => 15809,
- ERROR_STATE_QUERY_SETTING_FAILED => 15810,
- ERROR_STATE_READ_COMPOSITE_SETTING_FAILED => 15811,
- ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED => 15812,
- ERROR_STATE_ENUMERATE_CONTAINER_FAILED => 15813,
- ERROR_STATE_ENUMERATE_SETTINGS_FAILED => 15814,
- ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED => 15815,
- ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED => 15816,
- ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED => 15817,
- ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED => 15818,
- ERROR_API_UNAVAILABLE => 15841,
- EVENT_CONSOLE_CARET => 16385,
- EVENT_CONSOLE_UPDATE_REGION => 16386,
- EVENT_CONSOLE_UPDATE_SIMPLE => 16387,
- EVENT_CONSOLE_UPDATE_SCROLL => 16388,
- EVENT_CONSOLE_LAYOUT => 16389,
- EVENT_CONSOLE_START_APPLICATION => 16390,
- EVENT_CONSOLE_END_APPLICATION => 16391,
- ELEMENT_STATUS_NOT_BUS => 32768,
- EVENT_OBJECT_CREATE => 32768,
- EVENT_OBJECT_DESTROY => 32769,
- EVENT_OBJECT_SHOW => 32770,
- EVENT_OBJECT_HIDE => 32771,
- EVENT_OBJECT_REORDER => 32772,
- EVENT_OBJECT_FOCUS => 32773,
- EVENT_OBJECT_SELECTION => 32774,
- EVENT_OBJECT_SELECTIONADD => 32775,
- EVENT_OBJECT_SELECTIONREMOVE => 32776,
- EVENT_OBJECT_SELECTIONWITHIN => 32777,
- EVENT_OBJECT_STATECHANGE => 32778,
- EVENT_OBJECT_LOCATIONCHANGE => 32779,
- EVENT_OBJECT_NAMECHANGE => 32780,
- EVENT_OBJECT_DESCRIPTIONCHANGE => 32781,
- EVENT_OBJECT_VALUECHANGE => 32782,
- EVENT_OBJECT_PARENTCHANGE => 32783,
- EVENT_OBJECT_HELPCHANGE => 32784,
- EVENT_OBJECT_DEFACTIONCHANGE => 32785,
- EVENT_OBJECT_ACCELERATORCHANGE => 32786,
- EC_USEFONTINFO => 65535,
- EMBDHLP_DELAYCREATE => 65536,
- ENLISTMENT_GENERIC_READ => 131073,
- ENLISTMENT_GENERIC_EXECUTE => 131100,
- ENLISTMENT_GENERIC_WRITE => 131102,
- ENUM_S_FIRST => 262576,
- ENUM_S_LAST => 262591,
- EVENT_S_FIRST => 262656,
- EVENT_S_SOME_SUBSCRIBERS_FAILED => 262656,
- EVENT_S_NOSUBSCRIBERS => 262658,
- EVENT_S_LAST => 262687,
- EXTENDED_STARTUPINFO_PRESENT => 524288,
- ENLISTMENT_ALL_ACCESS => 983071,
- ERROR_FLT_IO_COMPLETE => 2031617,
- EVENT_ALL_ACCESS => 2031619,
- ELEMENT_STATUS_INVERT => 4194304,
- EWX_HYBRID_SHUTDOWN => 4194304,
- ELEMENT_STATUS_SVALID => 8388608,
- EWX_BOOTOPTIONS => 16777216,
- ELEMENT_STATUS_PVOLTAG => 268435456,
- ELEMENT_STATUS_AVOLTAG => 536870912,
- ENDSESSION_CRITICAL => 1073741824,
- ERROR_SEVERITY_INFORMATIONAL => 1073741824,
- ENHMETA_SIGNATURE => 1179469088,
- EPS_SIGNATURE => 1179865157,
- EVENT_MAX => 2147483647,
- ENDSESSION_LOGOFF => 2147483648,
- ENHMETA_STOCK_OBJECT => 2147483648,
- ERROR_SEVERITY_WARNING => 2147483648,
- ES_CONTINUOUS => 2147483648,
- EXCEPTION_GUARD_PAGE => 2147483649,
- EXCEPTION_DATATYPE_MISALIGNMENT => 2147483650,
- EXCEPTION_BREAKPOINT => 2147483651,
- EXCEPTION_SINGLE_STEP => 2147483652,
- E_PENDING => 2147483658,
- E_NOTIMPL => 2147500033,
- E_NOINTERFACE => 2147500034,
- E_POINTER => 2147500035,
- E_ABORT => 2147500036,
- E_FAIL => 2147500037,
- E_UNEXPECTED => 2147549183,
- E_DRAW => 2147746112,
- ENUM_E_FIRST => 2147746224,
- ENUM_E_LAST => 2147746239,
- EVENT_E_FIRST => 2147746304,
- EVENT_E_ALL_SUBSCRIBERS_FAILED => 2147746305,
- EVENT_E_QUERYSYNTAX => 2147746307,
- EVENT_E_QUERYFIELD => 2147746308,
- EVENT_E_INTERNALEXCEPTION => 2147746309,
- EVENT_E_INTERNALERROR => 2147746310,
- EVENT_E_INVALID_PER_USER_SID => 2147746311,
- EVENT_E_USER_EXCEPTION => 2147746312,
- EVENT_E_TOO_MANY_METHODS => 2147746313,
- EVENT_E_MISSING_EVENTCLASS => 2147746314,
- EVENT_E_NOT_ALL_REMOVED => 2147746315,
- EVENT_E_COMPLUS_NOT_INSTALLED => 2147746316,
- EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT => 2147746317,
- EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT => 2147746318,
- EVENT_E_INVALID_EVENT_CLASS_PARTITION => 2147746319,
- EVENT_E_PER_USER_SID_NOT_LOGGED_ON => 2147746320,
- EVENT_E_LAST => 2147746335,
- E_ACCESSDENIED => 2147942405,
- E_HANDLE => 2147942406,
- E_OUTOFMEMORY => 2147942414,
- E_INVALIDARG => 2147942487,
- ERROR_FLT_NO_HANDLER_DEFINED => 2149515265,
- ERROR_FLT_CONTEXT_ALREADY_DEFINED => 2149515266,
- ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST => 2149515267,
- ERROR_FLT_DISALLOW_FAST_IO => 2149515268,
- ERROR_FLT_INVALID_NAME_REQUEST => 2149515269,
- ERROR_FLT_NOT_SAFE_TO_POST_OPERATION => 2149515270,
- ERROR_FLT_NOT_INITIALIZED => 2149515271,
- ERROR_FLT_FILTER_NOT_READY => 2149515272,
- ERROR_FLT_POST_OPERATION_CLEANUP => 2149515273,
- ERROR_FLT_INTERNAL_ERROR => 2149515274,
- ERROR_FLT_DELETING_OBJECT => 2149515275,
- ERROR_FLT_MUST_BE_NONPAGED_POOL => 2149515276,
- ERROR_FLT_DUPLICATE_ENTRY => 2149515277,
- ERROR_FLT_CBDQ_DISABLED => 2149515278,
- ERROR_FLT_DO_NOT_ATTACH => 2149515279,
- ERROR_FLT_DO_NOT_DETACH => 2149515280,
- ERROR_FLT_INSTANCE_ALTITUDE_COLLISION => 2149515281,
- ERROR_FLT_INSTANCE_NAME_COLLISION => 2149515282,
- ERROR_FLT_FILTER_NOT_FOUND => 2149515283,
- ERROR_FLT_VOLUME_NOT_FOUND => 2149515284,
- ERROR_FLT_INSTANCE_NOT_FOUND => 2149515285,
- ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND => 2149515286,
- ERROR_FLT_INVALID_CONTEXT_REGISTRATION => 2149515287,
- ERROR_FLT_NAME_CACHE_MISS => 2149515288,
- ERROR_FLT_NO_DEVICE_OBJECT => 2149515289,
- ERROR_FLT_VOLUME_ALREADY_MOUNTED => 2149515290,
- ERROR_FLT_ALREADY_ENLISTED => 2149515291,
- ERROR_FLT_CONTEXT_ALREADY_LINKED => 2149515292,
- ERROR_FLT_NO_WAITER_FOR_REPLY => 2149515296,
- ERROR_FLT_REGISTRATION_BUSY => 2149515299,
- ERROR_SEVERITY_ERROR => 3221225472,
- EXCEPTION_ACCESS_VIOLATION => 3221225477,
- EXCEPTION_IN_PAGE_ERROR => 3221225478,
- EXCEPTION_INVALID_HANDLE => 3221225480,
- EXCEPTION_ILLEGAL_INSTRUCTION => 3221225501,
- EXCEPTION_NONCONTINUABLE_EXCEPTION => 3221225509,
- EXCEPTION_INVALID_DISPOSITION => 3221225510,
- EXCEPTION_ARRAY_BOUNDS_EXCEEDED => 3221225612,
- EXCEPTION_FLT_DENORMAL_OPERAND => 3221225613,
- EXCEPTION_FLT_DIVIDE_BY_ZERO => 3221225614,
- EXCEPTION_FLT_INEXACT_RESULT => 3221225615,
- EXCEPTION_FLT_INVALID_OPERATION => 3221225616,
- EXCEPTION_FLT_OVERFLOW => 3221225617,
- EXCEPTION_FLT_STACK_CHECK => 3221225618,
- EXCEPTION_FLT_UNDERFLOW => 3221225619,
- EXCEPTION_INT_DIVIDE_BY_ZERO => 3221225620,
- EXCEPTION_INT_OVERFLOW => 3221225621,
- EXCEPTION_PRIV_INSTRUCTION => 3221225622,
- EXCEPTION_STACK_OVERFLOW => 3221225725,
- ERROR_AUDITING_DISABLED => 3221815297,
- ERROR_ALL_SIDS_FILTERED => 3221815298,
- ENUM_ALL_CALENDARS => 4294967295,
- ERROR_UNHANDLED_ERROR => 4294967295,
- );
- # Generate proxy constant subroutines for all the values.
- # Well, almost all the values. Unfortunately we can't assume that at this
- # point that our symbol table is empty, as code such as if the parser has
- # seen code such as C, it will have created the
- # typeglob.
- # Doing this before defining @EXPORT_OK etc means that even if a platform is
- # crazy enough to define EXPORT_OK as an error constant, everything will
- # still work, because the parser will upgrade the PCS to a real typeglob.
- # We rely on the subroutine definitions below to update the internal caches.
- # Don't use %each, as we don't want a copy of the value.
- foreach my $name (keys %err) {
- if ($Errno::{$name}) {
- # We expect this to be reached fairly rarely, so take an approach
- # which uses the least compile time effort in the common case:
- eval "sub $name() { $err{$name} }; 1" or die $@;
- } else {
- $Errno::{$name} = \$err{$name};
- }
- }
-}
-
-our @EXPORT_OK = keys %err;
-
-our %EXPORT_TAGS = (
- POSIX => [qw(
- E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY
- EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK
- EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTUNREACH EINPROGRESS
- EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE
- ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV
- ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTCONN
- ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT
- EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE EROFS
- ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS
- EUSERS EWOULDBLOCK EXDEV
- )],
- WINSOCK => [qw(
- WSAENETUNREACH WSAECONNREFUSED WSAENOTSOCK WSAEINPROGRESS WSAEMFILE
- WSAEADDRNOTAVAIL WSAEINVALIDPROCTABLE WSAELOOP WSAEAFNOSUPPORT
- WSAENOPROTOOPT WSAENOBUFS WSAENOMORE WSAEPFNOSUPPORT WSAECANCELLED
- WSAECONNABORTED WSAEPROCLIM WSAEPROTONOSUPPORT WSAEMSGSIZE
- WSAESHUTDOWN WSAEINVALIDPROVIDER WSAENETRESET WSAEDISCON
- WSAEHOSTUNREACH WSAEREMOTE WSAEINVAL WSAETIMEDOUT WSAEDESTADDRREQ
- WSAEREFUSED WSAEPROTOTYPE WSAEADDRINUSE WSAEDQUOT WSAENOTCONN
- WSAEUSERS WSAESTALE WSAEALREADY WSAECONNRESET WSAEBADF WSAENAMETOOLONG
- WSAEINTR WSAEPROVIDERFAILEDINIT WSAEACCES WSAETOOMANYREFS WSAEHOSTDOWN
- WSAENETDOWN WSAEOPNOTSUPP WSAEFAULT WSAESOCKTNOSUPPORT WSAEISCONN
- WSAENOTEMPTY WSAEWOULDBLOCK
- )],
-);
-
-sub TIEHASH { bless \%err }
-
-sub FETCH {
- my (undef, $errname) = @_;
- return "" unless exists $err{$errname};
- my $errno = $err{$errname};
- return $errno == $! ? $errno : 0;
-}
-
-sub STORE {
- require Carp;
- Carp::confess("ERRNO hash is read only!");
-}
-
-*CLEAR = *DELETE = \*STORE; # Typeglob aliasing uses less space
-
-sub NEXTKEY {
- each %err;
-}
-
-sub FIRSTKEY {
- my $s = scalar keys %err; # initialize iterator
- each %err;
-}
-
-sub EXISTS {
- my (undef, $errname) = @_;
- exists $err{$errname};
-}
-
-tie %!, __PACKAGE__; # Returns an object, objects are true.
-
-__END__
-
-#line 2611
-
-# ex: set ro:
diff --git a/software/Slic3r-1.3.0.64bit/lib/Exporter.pm b/software/Slic3r-1.3.0.64bit/lib/Exporter.pm
deleted file mode 100644
index 1ee405ec..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Exporter.pm
+++ /dev/null
@@ -1,103 +0,0 @@
-#line 1 "Exporter.pm"
-package Exporter;
-
-require 5.006;
-
-# Be lean.
-#use strict;
-#no strict 'refs';
-
-our $Debug = 0;
-our $ExportLevel = 0;
-our $Verbose ||= 0;
-our $VERSION = '5.72';
-our (%Cache);
-
-sub as_heavy {
- require Exporter::Heavy;
- # Unfortunately, this does not work if the caller is aliased as *name = \&foo
- # Thus the need to create a lot of identical subroutines
- my $c = (caller(1))[3];
- $c =~ s/.*:://;
- \&{"Exporter::Heavy::heavy_$c"};
-}
-
-sub export {
- goto &{as_heavy()};
-}
-
-sub import {
- my $pkg = shift;
- my $callpkg = caller($ExportLevel);
-
- if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
- *{$callpkg."::import"} = \&import;
- return;
- }
-
- # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
- my $exports = \@{"$pkg\::EXPORT"};
- # But, avoid creating things if they don't exist, which saves a couple of
- # hundred bytes per package processed.
- my $fail = ${$pkg . '::'}{EXPORT_FAIL} && \@{"$pkg\::EXPORT_FAIL"};
- return export $pkg, $callpkg, @_
- if $Verbose or $Debug or $fail && @$fail > 1;
- my $export_cache = ($Cache{$pkg} ||= {});
- my $args = @_ or @_ = @$exports;
-
- if ($args and not %$export_cache) {
- s/^&//, $export_cache->{$_} = 1
- foreach (@$exports, @{"$pkg\::EXPORT_OK"});
- }
- my $heavy;
- # Try very hard not to use {} and hence have to enter scope on the foreach
- # We bomb out of the loop with last as soon as heavy is set.
- if ($args or $fail) {
- ($heavy = (/\W/ or $args and not exists $export_cache->{$_}
- or $fail and @$fail and $_ eq $fail->[0])) and last
- foreach (@_);
- } else {
- ($heavy = /\W/) and last
- foreach (@_);
- }
- return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy;
- local $SIG{__WARN__} =
- sub {require Carp; &Carp::carp} if not $SIG{__WARN__};
- # shortcut for the common case of no type character
- *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
-}
-
-# Default methods
-
-sub export_fail {
- my $self = shift;
- @_;
-}
-
-# Unfortunately, caller(1)[3] "does not work" if the caller is aliased as
-# *name = \&foo. Thus the need to create a lot of identical subroutines
-# Otherwise we could have aliased them to export().
-
-sub export_to_level {
- goto &{as_heavy()};
-}
-
-sub export_tags {
- goto &{as_heavy()};
-}
-
-sub export_ok_tags {
- goto &{as_heavy()};
-}
-
-sub require_version {
- goto &{as_heavy()};
-}
-
-1;
-__END__
-
-#line 589
-
-
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/Exporter/Heavy.pm b/software/Slic3r-1.3.0.64bit/lib/Exporter/Heavy.pm
deleted file mode 100644
index 54be0cb5..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Exporter/Heavy.pm
+++ /dev/null
@@ -1,242 +0,0 @@
-#line 1 "Exporter/Heavy.pm"
-package Exporter::Heavy;
-
-use strict;
-no strict 'refs';
-
-# On one line so MakeMaker will see it.
-require Exporter; our $VERSION = $Exporter::VERSION;
-
-#line 22
-
-#
-# We go to a lot of trouble not to 'require Carp' at file scope,
-# because Carp requires Exporter, and something has to give.
-#
-
-sub _rebuild_cache {
- my ($pkg, $exports, $cache) = @_;
- s/^&// foreach @$exports;
- @{$cache}{@$exports} = (1) x @$exports;
- my $ok = \@{"${pkg}::EXPORT_OK"};
- if (@$ok) {
- s/^&// foreach @$ok;
- @{$cache}{@$ok} = (1) x @$ok;
- }
-}
-
-sub heavy_export {
-
- # Save the old __WARN__ handler in case it was defined
- my $oldwarn = $SIG{__WARN__};
-
- # First make import warnings look like they're coming from the "use".
- local $SIG{__WARN__} = sub {
- # restore it back so proper stacking occurs
- local $SIG{__WARN__} = $oldwarn;
- my $text = shift;
- if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
- require Carp;
- local $Carp::CarpLevel = 1; # ignore package calling us too.
- Carp::carp($text);
- }
- else {
- warn $text;
- }
- };
- local $SIG{__DIE__} = sub {
- require Carp;
- local $Carp::CarpLevel = 1; # ignore package calling us too.
- Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
- if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
- };
-
- my($pkg, $callpkg, @imports) = @_;
- my($type, $sym, $cache_is_current, $oops);
- my($exports, $export_cache) = (\@{"${pkg}::EXPORT"},
- $Exporter::Cache{$pkg} ||= {});
-
- if (@imports) {
- if (!%$export_cache) {
- _rebuild_cache ($pkg, $exports, $export_cache);
- $cache_is_current = 1;
- }
-
- if (grep m{^[/!:]}, @imports) {
- my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
- my $tagdata;
- my %imports;
- my($remove, $spec, @names, @allexports);
- # negated first item implies starting with default set:
- unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
- foreach $spec (@imports){
- $remove = $spec =~ s/^!//;
-
- if ($spec =~ s/^://){
- if ($spec eq 'DEFAULT'){
- @names = @$exports;
- }
- elsif ($tagdata = $tagsref->{$spec}) {
- @names = @$tagdata;
- }
- else {
- warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
- ++$oops;
- next;
- }
- }
- elsif ($spec =~ m:^/(.*)/$:){
- my $patn = $1;
- @allexports = keys %$export_cache unless @allexports; # only do keys once
- @names = grep(/$patn/, @allexports); # not anchored by default
- }
- else {
- @names = ($spec); # is a normal symbol name
- }
-
- warn "Import ".($remove ? "del":"add").": @names "
- if $Exporter::Verbose;
-
- if ($remove) {
- foreach $sym (@names) { delete $imports{$sym} }
- }
- else {
- @imports{@names} = (1) x @names;
- }
- }
- @imports = keys %imports;
- }
-
- my @carp;
- foreach $sym (@imports) {
- if (!$export_cache->{$sym}) {
- if ($sym =~ m/^\d/) {
- $pkg->VERSION($sym); # inherit from UNIVERSAL
- # If the version number was the only thing specified
- # then we should act as if nothing was specified:
- if (@imports == 1) {
- @imports = @$exports;
- last;
- }
- # We need a way to emulate 'use Foo ()' but still
- # allow an easy version check: "use Foo 1.23, ''";
- if (@imports == 2 and !$imports[1]) {
- @imports = ();
- last;
- }
- } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) {
- # Last chance - see if they've updated EXPORT_OK since we
- # cached it.
-
- unless ($cache_is_current) {
- %$export_cache = ();
- _rebuild_cache ($pkg, $exports, $export_cache);
- $cache_is_current = 1;
- }
-
- if (!$export_cache->{$sym}) {
- # accumulate the non-exports
- push @carp,
- qq["$sym" is not exported by the $pkg module\n];
- $oops++;
- }
- }
- }
- }
- if ($oops) {
- require Carp;
- Carp::croak("@{carp}Can't continue after import errors");
- }
- }
- else {
- @imports = @$exports;
- }
-
- my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"},
- $Exporter::FailCache{$pkg} ||= {});
-
- if (@$fail) {
- if (!%$fail_cache) {
- # Build cache of symbols. Optimise the lookup by adding
- # barewords twice... both with and without a leading &.
- # (Technique could be applied to $export_cache at cost of memory)
- my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail;
- warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose;
- @{$fail_cache}{@expanded} = (1) x @expanded;
- }
- my @failed;
- foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} }
- if (@failed) {
- @failed = $pkg->export_fail(@failed);
- foreach $sym (@failed) {
- require Carp;
- Carp::carp(qq["$sym" is not implemented by the $pkg module ],
- "on this architecture");
- }
- if (@failed) {
- require Carp;
- Carp::croak("Can't continue after import errors");
- }
- }
- }
-
- warn "Importing into $callpkg from $pkg: ",
- join(", ",sort @imports) if $Exporter::Verbose;
-
- foreach $sym (@imports) {
- # shortcut for the common case of no type character
- (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
- unless $sym =~ s/^(\W)//;
- $type = $1;
- no warnings 'once';
- *{"${callpkg}::$sym"} =
- $type eq '&' ? \&{"${pkg}::$sym"} :
- $type eq '$' ? \${"${pkg}::$sym"} :
- $type eq '@' ? \@{"${pkg}::$sym"} :
- $type eq '%' ? \%{"${pkg}::$sym"} :
- $type eq '*' ? *{"${pkg}::$sym"} :
- do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
- }
-}
-
-sub heavy_export_to_level
-{
- my $pkg = shift;
- my $level = shift;
- (undef) = shift; # XXX redundant arg
- my $callpkg = caller($level);
- $pkg->export($callpkg, @_);
-}
-
-# Utility functions
-
-sub _push_tags {
- my($pkg, $var, $syms) = @_;
- my @nontag = ();
- my $export_tags = \%{"${pkg}::EXPORT_TAGS"};
- push(@{"${pkg}::$var"},
- map { $export_tags->{$_} ? @{$export_tags->{$_}}
- : scalar(push(@nontag,$_),$_) }
- (@$syms) ? @$syms : keys %$export_tags);
- if (@nontag and $^W) {
- # This may change to a die one day
- require Carp;
- Carp::carp(join(", ", @nontag)." are not tags of $pkg");
- }
-}
-
-sub heavy_require_version {
- my($self, $wanted) = @_;
- my $pkg = ref $self || $self;
- return ${pkg}->VERSION($wanted);
-}
-
-sub heavy_export_tags {
- _push_tags((caller)[0], "EXPORT", \@_);
-}
-
-sub heavy_export_ok_tags {
- _push_tags((caller)[0], "EXPORT_OK", \@_);
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Fcntl.pm b/software/Slic3r-1.3.0.64bit/lib/Fcntl.pm
deleted file mode 100644
index 36552257..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Fcntl.pm
+++ /dev/null
@@ -1,141 +0,0 @@
-#line 1 "Fcntl.pm"
-package Fcntl;
-
-#line 57
-
-use strict;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
-require Exporter;
-require XSLoader;
-@ISA = qw(Exporter);
-$VERSION = '1.13';
-
-XSLoader::load();
-
-# Named groups of exports
-%EXPORT_TAGS = (
- 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
- 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
- FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
- 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
- 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
- _S_IFMT S_IFREG S_IFDIR S_IFLNK
- S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
- S_IRUSR S_IWUSR S_IXUSR S_IRWXU
- S_IRGRP S_IWGRP S_IXGRP S_IRWXG
- S_IROTH S_IWOTH S_IXOTH S_IRWXO
- S_IREAD S_IWRITE S_IEXEC
- S_ISREG S_ISDIR S_ISLNK S_ISSOCK
- S_ISBLK S_ISCHR S_ISFIFO
- S_ISWHT S_ISENFMT
- S_IFMT S_IMODE
- )],
-);
-
-# Items to export into callers namespace by default
-# (move infrequently used names to @EXPORT_OK below)
-@EXPORT =
- qw(
- FD_CLOEXEC
- F_ALLOCSP
- F_ALLOCSP64
- F_COMPAT
- F_DUP2FD
- F_DUPFD
- F_EXLCK
- F_FREESP
- F_FREESP64
- F_FSYNC
- F_FSYNC64
- F_GETFD
- F_GETFL
- F_GETLK
- F_GETLK64
- F_GETOWN
- F_NODNY
- F_POSIX
- F_RDACC
- F_RDDNY
- F_RDLCK
- F_RWACC
- F_RWDNY
- F_SETFD
- F_SETFL
- F_SETLK
- F_SETLK64
- F_SETLKW
- F_SETLKW64
- F_SETOWN
- F_SHARE
- F_SHLCK
- F_UNLCK
- F_UNSHARE
- F_WRACC
- F_WRDNY
- F_WRLCK
- O_ACCMODE
- O_ALIAS
- O_APPEND
- O_ASYNC
- O_BINARY
- O_CREAT
- O_DEFER
- O_DIRECT
- O_DIRECTORY
- O_DSYNC
- O_EXCL
- O_EXLOCK
- O_LARGEFILE
- O_NDELAY
- O_NOCTTY
- O_NOFOLLOW
- O_NOINHERIT
- O_NONBLOCK
- O_RANDOM
- O_RAW
- O_RDONLY
- O_RDWR
- O_RSRC
- O_RSYNC
- O_SEQUENTIAL
- O_SHLOCK
- O_SYNC
- O_TEMPORARY
- O_TEXT
- O_TRUNC
- O_WRONLY
- );
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = (qw(
- DN_ACCESS
- DN_ATTRIB
- DN_CREATE
- DN_DELETE
- DN_MODIFY
- DN_MULTISHOT
- DN_RENAME
- F_GETLEASE
- F_GETPIPE_SZ
- F_GETSIG
- F_NOTIFY
- F_SETLEASE
- F_SETPIPE_SZ
- F_SETSIG
- LOCK_MAND
- LOCK_READ
- LOCK_RW
- LOCK_WRITE
- O_ALT_IO
- O_EVTONLY
- O_IGNORE_CTTY
- O_NOATIME
- O_NOLINK
- O_NOSIGPIPE
- O_NOTRANS
- O_SYMLINK
- O_TTY_INIT
-), map {@{$_}} values %EXPORT_TAGS);
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Basename.pm b/software/Slic3r-1.3.0.64bit/lib/File/Basename.pm
deleted file mode 100644
index cdbe9ec2..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Basename.pm
+++ /dev/null
@@ -1,238 +0,0 @@
-#line 1 "File/Basename.pm"
-
-#line 36
-
-
-package File::Basename;
-
-# File::Basename is used during the Perl build, when the re extension may
-# not be available, but we only actually need it if running under tainting.
-BEGIN {
- if (${^TAINT}) {
- require re;
- re->import('taint');
- }
-}
-
-
-use strict;
-use 5.006;
-use warnings;
-our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase);
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
-$VERSION = "2.85";
-
-fileparse_set_fstype($^O);
-
-
-#line 102
-
-
-sub fileparse {
- my($fullname,@suffices) = @_;
-
- unless (defined $fullname) {
- require Carp;
- Carp::croak("fileparse(): need a valid pathname");
- }
-
- my $orig_type = '';
- my($type,$igncase) = ($Fileparse_fstype, $Fileparse_igncase);
-
- my($taint) = substr($fullname,0,0); # Is $fullname tainted?
-
- if ($type eq "VMS" and $fullname =~ m{/} ) {
- # We're doing Unix emulation
- $orig_type = $type;
- $type = 'Unix';
- }
-
- my($dirpath, $basename);
-
- if (grep { $type eq $_ } qw(MSDOS DOS MSWin32 Epoc)) {
- ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s);
- $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/;
- }
- elsif ($type eq "OS2") {
- ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s);
- $dirpath = './' unless $dirpath; # Can't be 0
- $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#;
- }
- elsif ($type eq "MacOS") {
- ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s);
- $dirpath = ':' unless $dirpath;
- }
- elsif ($type eq "AmigaOS") {
- ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s);
- $dirpath = './' unless $dirpath;
- }
- elsif ($type eq 'VMS' ) {
- ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s);
- $dirpath ||= ''; # should always be defined
- }
- else { # Default to Unix semantics.
- ($dirpath,$basename) = ($fullname =~ m{^(.*/)?(.*)}s);
- if ($orig_type eq 'VMS' and $fullname =~ m{^(/[^/]+/000000(/|$))(.*)}) {
- # dev:[000000] is top of VMS tree, similar to Unix '/'
- # so strip it off and treat the rest as "normal"
- my $devspec = $1;
- my $remainder = $3;
- ($dirpath,$basename) = ($remainder =~ m{^(.*/)?(.*)}s);
- $dirpath ||= ''; # should always be defined
- $dirpath = $devspec.$dirpath;
- }
- $dirpath = './' unless $dirpath;
- }
-
-
- my $tail = '';
- my $suffix = '';
- if (@suffices) {
- foreach $suffix (@suffices) {
- my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$";
- if ($basename =~ s/$pat//s) {
- $taint .= substr($suffix,0,0);
- $tail = $1 . $tail;
- }
- }
- }
-
- # Ensure taint is propagated from the path to its pieces.
- $tail .= $taint;
- wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail)
- : ($basename .= $taint);
-}
-
-
-
-#line 212
-
-
-sub basename {
- my($path) = shift;
-
- # From BSD basename(1)
- # The basename utility deletes any prefix ending with the last slash '/'
- # character present in string (after first stripping trailing slashes)
- _strip_trailing_sep($path);
-
- my($basename, $dirname, $suffix) = fileparse( $path, map("\Q$_\E",@_) );
-
- # From BSD basename(1)
- # The suffix is not stripped if it is identical to the remaining
- # characters in string.
- if( length $suffix and !length $basename ) {
- $basename = $suffix;
- }
-
- # Ensure that basename '/' == '/'
- if( !length $basename ) {
- $basename = $dirname;
- }
-
- return $basename;
-}
-
-
-
-#line 281
-
-
-sub dirname {
- my $path = shift;
-
- my($type) = $Fileparse_fstype;
-
- if( $type eq 'VMS' and $path =~ m{/} ) {
- # Parse as Unix
- local($File::Basename::Fileparse_fstype) = '';
- return dirname($path);
- }
-
- my($basename, $dirname) = fileparse($path);
-
- if ($type eq 'VMS') {
- $dirname ||= $ENV{DEFAULT};
- }
- elsif ($type eq 'MacOS') {
- if( !length($basename) && $dirname !~ /^[^:]+:\z/) {
- _strip_trailing_sep($dirname);
- ($basename,$dirname) = fileparse $dirname;
- }
- $dirname .= ":" unless $dirname =~ /:\z/;
- }
- elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
- _strip_trailing_sep($dirname);
- unless( length($basename) ) {
- ($basename,$dirname) = fileparse $dirname;
- _strip_trailing_sep($dirname);
- }
- }
- elsif ($type eq 'AmigaOS') {
- if ( $dirname =~ /:\z/) { return $dirname }
- chop $dirname;
- $dirname =~ s{[^:/]+\z}{} unless length($basename);
- }
- else {
- _strip_trailing_sep($dirname);
- unless( length($basename) ) {
- ($basename,$dirname) = fileparse $dirname;
- _strip_trailing_sep($dirname);
- }
- }
-
- $dirname;
-}
-
-
-# Strip the trailing path separator.
-sub _strip_trailing_sep {
- my $type = $Fileparse_fstype;
-
- if ($type eq 'MacOS') {
- $_[0] =~ s/([^:]):\z/$1/s;
- }
- elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
- $_[0] =~ s/([^:])[\\\/]*\z/$1/;
- }
- else {
- $_[0] =~ s{(.)/*\z}{$1}s;
- }
-}
-
-
-#line 369
-
-
-BEGIN {
-
-my @Ignore_Case = qw(MacOS VMS AmigaOS OS2 RISCOS MSWin32 MSDOS DOS Epoc);
-my @Types = (@Ignore_Case, qw(Unix));
-
-sub fileparse_set_fstype {
- my $old = $Fileparse_fstype;
-
- if (@_) {
- my $new_type = shift;
-
- $Fileparse_fstype = 'Unix'; # default
- foreach my $type (@Types) {
- $Fileparse_fstype = $type if $new_type =~ /^$type/i;
- }
-
- $Fileparse_igncase =
- (grep $Fileparse_fstype eq $_, @Ignore_Case) ? 1 : 0;
- }
-
- return $old;
-}
-
-}
-
-
-1;
-
-
-#line 403
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Glob.pm b/software/Slic3r-1.3.0.64bit/lib/File/Glob.pm
deleted file mode 100644
index e9a3bdbf..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Glob.pm
+++ /dev/null
@@ -1,86 +0,0 @@
-#line 1 "File/Glob.pm"
-package File::Glob;
-
-use strict;
-our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, $DEFAULT_FLAGS);
-
-require XSLoader;
-
-@ISA = qw(Exporter);
-
-# NOTE: The glob() export is only here for compatibility with 5.6.0.
-# csh_glob() should not be used directly, unless you know what you're doing.
-
-%EXPORT_TAGS = (
- 'glob' => [ qw(
- GLOB_ABEND
- GLOB_ALPHASORT
- GLOB_ALTDIRFUNC
- GLOB_BRACE
- GLOB_CSH
- GLOB_ERR
- GLOB_ERROR
- GLOB_LIMIT
- GLOB_MARK
- GLOB_NOCASE
- GLOB_NOCHECK
- GLOB_NOMAGIC
- GLOB_NOSORT
- GLOB_NOSPACE
- GLOB_QUOTE
- GLOB_TILDE
- bsd_glob
- glob
- ) ],
-);
-$EXPORT_TAGS{bsd_glob} = [@{$EXPORT_TAGS{glob}}];
-pop @{$EXPORT_TAGS{bsd_glob}}; # no "glob"
-
-@EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob');
-
-$VERSION = '1.26';
-
-sub import {
- require Exporter;
- local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
- Exporter::import(grep {
- my $passthrough;
- if ($_ eq ':case') {
- $DEFAULT_FLAGS &= ~GLOB_NOCASE()
- }
- elsif ($_ eq ':nocase') {
- $DEFAULT_FLAGS |= GLOB_NOCASE();
- }
- elsif ($_ eq ':globally') {
- no warnings 'redefine';
- *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
- }
- elsif ($_ eq ':bsd_glob') {
- no strict; *{caller."::glob"} = \&bsd_glob_override;
- $passthrough = 1;
- }
- else {
- $passthrough = 1;
- }
- $passthrough;
- } @_);
-}
-
-XSLoader::load();
-
-$DEFAULT_FLAGS = GLOB_CSH();
-if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos)$/) {
- $DEFAULT_FLAGS |= GLOB_NOCASE();
-}
-
-# File::Glob::glob() is deprecated because its prototype is different from
-# CORE::glob() (use bsd_glob() instead)
-sub glob {
- splice @_, 1; # no flags
- goto &bsd_glob;
-}
-
-1;
-__END__
-
-#line 410
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/GlobMapper.pm b/software/Slic3r-1.3.0.64bit/lib/File/GlobMapper.pm
deleted file mode 100644
index 86c88ff4..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/GlobMapper.pm
+++ /dev/null
@@ -1,376 +0,0 @@
-#line 1 "File/GlobMapper.pm"
-package File::GlobMapper;
-
-use strict;
-use warnings;
-use Carp;
-
-our ($CSH_GLOB);
-
-BEGIN
-{
- if ($] < 5.006)
- {
- require File::BSDGlob; import File::BSDGlob qw(:glob) ;
- $CSH_GLOB = File::BSDGlob::GLOB_CSH() ;
- *globber = \&File::BSDGlob::csh_glob;
- }
- else
- {
- require File::Glob; import File::Glob qw(:glob) ;
- $CSH_GLOB = File::Glob::GLOB_CSH() ;
- #*globber = \&File::Glob::bsd_glob;
- *globber = \&File::Glob::csh_glob;
- }
-}
-
-our ($Error);
-
-our ($VERSION, @EXPORT_OK);
-$VERSION = '1.000';
-@EXPORT_OK = qw( globmap );
-
-
-our ($noPreBS, $metachars, $matchMetaRE, %mapping, %wildCount);
-$noPreBS = '(? '([^/]*)',
- '?' => '([^/])',
- '.' => '\.',
- '[' => '([',
- '(' => '(',
- ')' => ')',
- );
-
-%wildCount = map { $_ => 1 } qw/ * ? . { ( [ /;
-
-sub globmap ($$;)
-{
- my $inputGlob = shift ;
- my $outputGlob = shift ;
-
- my $obj = new File::GlobMapper($inputGlob, $outputGlob, @_)
- or croak "globmap: $Error" ;
- return $obj->getFileMap();
-}
-
-sub new
-{
- my $class = shift ;
- my $inputGlob = shift ;
- my $outputGlob = shift ;
- # TODO -- flags needs to default to whatever File::Glob does
- my $flags = shift || $CSH_GLOB ;
- #my $flags = shift ;
-
- $inputGlob =~ s/^\s*\<\s*//;
- $inputGlob =~ s/\s*\>\s*$//;
-
- $outputGlob =~ s/^\s*\<\s*//;
- $outputGlob =~ s/\s*\>\s*$//;
-
- my %object =
- ( InputGlob => $inputGlob,
- OutputGlob => $outputGlob,
- GlobFlags => $flags,
- Braces => 0,
- WildCount => 0,
- Pairs => [],
- Sigil => '#',
- );
-
- my $self = bless \%object, ref($class) || $class ;
-
- $self->_parseInputGlob()
- or return undef ;
-
- $self->_parseOutputGlob()
- or return undef ;
-
- my @inputFiles = globber($self->{InputGlob}, $flags) ;
-
- if (GLOB_ERROR)
- {
- $Error = $!;
- return undef ;
- }
-
- #if (whatever)
- {
- my $missing = grep { ! -e $_ } @inputFiles ;
-
- if ($missing)
- {
- $Error = "$missing input files do not exist";
- return undef ;
- }
- }
-
- $self->{InputFiles} = \@inputFiles ;
-
- $self->_getFiles()
- or return undef ;
-
- return $self;
-}
-
-sub _retError
-{
- my $string = shift ;
- $Error = "$string in input fileglob" ;
- return undef ;
-}
-
-sub _unmatched
-{
- my $delimeter = shift ;
-
- _retError("Unmatched $delimeter");
- return undef ;
-}
-
-sub _parseBit
-{
- my $self = shift ;
-
- my $string = shift ;
-
- my $out = '';
- my $depth = 0 ;
-
- while ($string =~ s/(.*?)$noPreBS(,|$matchMetaRE)//)
- {
- $out .= quotemeta($1) ;
- $out .= $mapping{$2} if defined $mapping{$2};
-
- ++ $self->{WildCount} if $wildCount{$2} ;
-
- if ($2 eq ',')
- {
- return _unmatched("(")
- if $depth ;
-
- $out .= '|';
- }
- elsif ($2 eq '(')
- {
- ++ $depth ;
- }
- elsif ($2 eq ')')
- {
- return _unmatched(")")
- if ! $depth ;
-
- -- $depth ;
- }
- elsif ($2 eq '[')
- {
- # TODO -- quotemeta & check no '/'
- # TODO -- check for \] & other \ within the []
- $string =~ s#(.*?\])##
- or return _unmatched("[");
- $out .= "$1)" ;
- }
- elsif ($2 eq ']')
- {
- return _unmatched("]");
- }
- elsif ($2 eq '{' || $2 eq '}')
- {
- return _retError("Nested {} not allowed");
- }
- }
-
- $out .= quotemeta $string;
-
- return _unmatched("(")
- if $depth ;
-
- return $out ;
-}
-
-sub _parseInputGlob
-{
- my $self = shift ;
-
- my $string = $self->{InputGlob} ;
- my $inGlob = '';
-
- # Multiple concatenated *'s don't make sense
- #$string =~ s#\*\*+#*# ;
-
- # TODO -- Allow space to delimit patterns?
- #my @strings = split /\s+/, $string ;
- #for my $str (@strings)
- my $out = '';
- my $depth = 0 ;
-
- while ($string =~ s/(.*?)$noPreBS($matchMetaRE)//)
- {
- $out .= quotemeta($1) ;
- $out .= $mapping{$2} if defined $mapping{$2};
- ++ $self->{WildCount} if $wildCount{$2} ;
-
- if ($2 eq '(')
- {
- ++ $depth ;
- }
- elsif ($2 eq ')')
- {
- return _unmatched(")")
- if ! $depth ;
-
- -- $depth ;
- }
- elsif ($2 eq '[')
- {
- # TODO -- quotemeta & check no '/' or '(' or ')'
- # TODO -- check for \] & other \ within the []
- $string =~ s#(.*?\])##
- or return _unmatched("[");
- $out .= "$1)" ;
- }
- elsif ($2 eq ']')
- {
- return _unmatched("]");
- }
- elsif ($2 eq '}')
- {
- return _unmatched("}");
- }
- elsif ($2 eq '{')
- {
- # TODO -- check no '/' within the {}
- # TODO -- check for \} & other \ within the {}
-
- my $tmp ;
- unless ( $string =~ s/(.*?)$noPreBS\}//)
- {
- return _unmatched("{");
- }
- #$string =~ s#(.*?)\}##;
-
- #my $alt = join '|',
- # map { quotemeta $_ }
- # split "$noPreBS,", $1 ;
- my $alt = $self->_parseBit($1);
- defined $alt or return 0 ;
- $out .= "($alt)" ;
-
- ++ $self->{Braces} ;
- }
- }
-
- return _unmatched("(")
- if $depth ;
-
- $out .= quotemeta $string ;
-
-
- $self->{InputGlob} =~ s/$noPreBS[\(\)]//g;
- $self->{InputPattern} = $out ;
-
- #print "# INPUT '$self->{InputGlob}' => '$out'\n";
-
- return 1 ;
-
-}
-
-sub _parseOutputGlob
-{
- my $self = shift ;
-
- my $string = $self->{OutputGlob} ;
- my $maxwild = $self->{WildCount};
-
- if ($self->{GlobFlags} & GLOB_TILDE)
- #if (1)
- {
- $string =~ s{
- ^ ~ # find a leading tilde
- ( # save this in $1
- [^/] # a non-slash character
- * # repeated 0 or more times (0 means me)
- )
- }{
- $1
- ? (getpwnam($1))[7]
- : ( $ENV{HOME} || $ENV{LOGDIR} )
- }ex;
-
- }
-
- # max #1 must be == to max no of '*' in input
- while ( $string =~ m/#(\d)/g )
- {
- croak "Max wild is #$maxwild, you tried #$1"
- if $1 > $maxwild ;
- }
-
- my $noPreBS = '(?{OutputGlob}' => '$string'\n";
- $self->{OutputPattern} = $string ;
-
- return 1 ;
-}
-
-sub _getFiles
-{
- my $self = shift ;
-
- my %outInMapping = ();
- my %inFiles = () ;
-
- foreach my $inFile (@{ $self->{InputFiles} })
- {
- next if $inFiles{$inFile} ++ ;
-
- my $outFile = $inFile ;
-
- if ( $inFile =~ m/$self->{InputPattern}/ )
- {
- no warnings 'uninitialized';
- eval "\$outFile = $self->{OutputPattern};" ;
-
- if (defined $outInMapping{$outFile})
- {
- $Error = "multiple input files map to one output file";
- return undef ;
- }
- $outInMapping{$outFile} = $inFile;
- push @{ $self->{Pairs} }, [$inFile, $outFile];
- }
- }
-
- return 1 ;
-}
-
-sub getFileMap
-{
- my $self = shift ;
-
- return $self->{Pairs} ;
-}
-
-sub getHash
-{
- my $self = shift ;
-
- return { map { $_->[0] => $_->[1] } @{ $self->{Pairs} } } ;
-}
-
-1;
-
-__END__
-
-#line 680
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Listing.pm b/software/Slic3r-1.3.0.64bit/lib/File/Listing.pm
deleted file mode 100644
index f3eaf7df..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Listing.pm
+++ /dev/null
@@ -1,376 +0,0 @@
-#line 1 "File/Listing.pm"
-package File::Listing;
-
-sub Version { $VERSION; }
-$VERSION = "6.04";
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(parse_dir);
-
-use strict;
-
-use Carp ();
-use HTTP::Date qw(str2time);
-
-
-
-sub parse_dir ($;$$$)
-{
- my($dir, $tz, $fstype, $error) = @_;
-
- $fstype ||= 'unix';
- $fstype = "File::Listing::" . lc $fstype;
-
- my @args = $_[0];
- push(@args, $tz) if(@_ >= 2);
- push(@args, $error) if(@_ >= 4);
-
- $fstype->parse(@args);
-}
-
-
-sub line { Carp::croak("Not implemented yet"); }
-sub init { } # Dummy sub
-
-
-sub file_mode ($)
-{
- Carp::croak("Input to file_mode() must be a 10 character string.")
- unless length($_[0]) == 10;
-
- # This routine was originally borrowed from Graham Barr's
- # Net::FTP package.
-
- local $_ = shift;
- my $mode = 0;
- my($type);
-
- s/^(.)// and $type = $1;
-
- # When the set-group-ID bit (file mode bit 02000) is set, and the group
- # execution bit (file mode bit 00020) is unset, and it is a regular file,
- # some implementations of `ls' use the letter `S', others use `l' or `L'.
- # Convert this `S'.
-
- s/[Ll](...)$/S$1/;
-
- while (/(.)/g) {
- $mode <<= 1;
- $mode |= 1 if $1 ne "-" &&
- $1 ne 'S' &&
- $1 ne 'T';
- }
-
- $mode |= 0004000 if /^..s....../i;
- $mode |= 0002000 if /^.....s.../i;
- $mode |= 0001000 if /^........t/i;
-
- # De facto standard definitions. From 'stat.h' on Solaris 9.
-
- $type eq "p" and $mode |= 0010000 or # fifo
- $type eq "c" and $mode |= 0020000 or # character special
- $type eq "d" and $mode |= 0040000 or # directory
- $type eq "b" and $mode |= 0060000 or # block special
- $type eq "-" and $mode |= 0100000 or # regular
- $type eq "l" and $mode |= 0120000 or # symbolic link
- $type eq "s" and $mode |= 0140000 or # socket
- $type eq "D" and $mode |= 0150000 or # door
- Carp::croak("Unknown file type: $type");
-
- $mode;
-}
-
-
-sub parse
-{
- my($pkg, $dir, $tz, $error) = @_;
-
- # First let's try to determine what kind of dir parameter we have
- # received. We allow both listings, reference to arrays and
- # file handles to read from.
-
- if (ref($dir) eq 'ARRAY') {
- # Already splitted up
- }
- elsif (ref($dir) eq 'GLOB') {
- # A file handle
- }
- elsif (ref($dir)) {
- Carp::croak("Illegal argument to parse_dir()");
- }
- elsif ($dir =~ /^\*\w+(::\w+)+$/) {
- # This scalar looks like a file handle, so we assume it is
- }
- else {
- # A normal scalar listing
- $dir = [ split(/\n/, $dir) ];
- }
-
- $pkg->init();
-
- my @files = ();
- if (ref($dir) eq 'ARRAY') {
- for (@$dir) {
- push(@files, $pkg->line($_, $tz, $error));
- }
- }
- else {
- local($_);
- while (<$dir>) {
- chomp;
- push(@files, $pkg->line($_, $tz, $error));
- }
- }
- wantarray ? @files : \@files;
-}
-
-
-
-package File::Listing::unix;
-
-use HTTP::Date qw(str2time);
-
-# A place to remember current directory from last line parsed.
-use vars qw($curdir @ISA);
-
-@ISA = qw(File::Listing);
-
-
-
-sub init
-{
- $curdir = '';
-}
-
-
-sub line
-{
- shift; # package name
- local($_) = shift;
- my($tz, $error) = @_;
-
- s/\015//g;
- #study;
-
- my ($kind, $size, $date, $name);
- if (($kind, $size, $date, $name) =
- /^([\-FlrwxsStTdD]{10}) # Type and permission bits
- .* # Graps
- \D(\d+) # File size
- \s+ # Some space
- (\w{3}\s+\d+\s+(?:\d{1,2}:\d{2}|\d{4})|\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}) # Date
- \s+ # Some more space
- (.*)$ # File name
- /x )
-
- {
- return if $name eq '.' || $name eq '..';
- $name = "$curdir/$name" if length $curdir;
- my $type = '?';
- if ($kind =~ /^l/ && $name =~ /(.*) -> (.*)/ ) {
- $name = $1;
- $type = "l $2";
- }
- elsif ($kind =~ /^[\-F]/) { # (hopefully) a regular file
- $type = 'f';
- }
- elsif ($kind =~ /^[dD]/) {
- $type = 'd';
- $size = undef; # Don't believe the reported size
- }
- return [$name, $type, $size, str2time($date, $tz),
- File::Listing::file_mode($kind)];
-
- }
- elsif (/^(.+):$/ && !/^[dcbsp].*\s.*\s.*:$/ ) {
- my $dir = $1;
- return () if $dir eq '.';
- $curdir = $dir;
- return ();
- }
- elsif (/^[Tt]otal\s+(\d+)$/ || /^\s*$/) {
- return ();
- }
- elsif (/not found/ || # OSF1, HPUX, and SunOS return
- # "$file not found"
- /No such file/ || # IRIX returns
- # "UX:ls: ERROR: Cannot access $file: No such file or directory"
- # Solaris returns
- # "$file: No such file or directory"
- /cannot find/ # Windows NT returns
- # "The system cannot find the path specified."
- ) {
- return () unless defined $error;
- &$error($_) if ref($error) eq 'CODE';
- warn "Error: $_\n" if $error eq 'warn';
- return ();
- }
- elsif ($_ eq '') { # AIX, and Linux return nothing
- return () unless defined $error;
- &$error("No such file or directory") if ref($error) eq 'CODE';
- warn "Warning: No such file or directory\n" if $error eq 'warn';
- return ();
- }
- else {
- # parse failed, check if the dosftp parse understands it
- File::Listing::dosftp->init();
- return(File::Listing::dosftp->line($_,$tz,$error));
- }
-
-}
-
-
-
-package File::Listing::dosftp;
-
-use HTTP::Date qw(str2time);
-
-# A place to remember current directory from last line parsed.
-use vars qw($curdir @ISA);
-
-@ISA = qw(File::Listing);
-
-
-
-sub init
-{
- $curdir = '';
-}
-
-
-sub line
-{
- shift; # package name
- local($_) = shift;
- my($tz, $error) = @_;
-
- s/\015//g;
-
- my ($date, $size_or_dir, $name, $size);
-
- # 02-05-96 10:48AM 1415 src.slf
- # 09-10-96 09:18AM sl_util
- if (($date, $size_or_dir, $name) =
- /^(\d\d-\d\d-\d\d\s+\d\d:\d\d\wM) # Date and time info
- \s+ # Some space
- (<\w{3}>|\d+) # Dir or Size
- \s+ # Some more space
- (.+)$ # File name
- /x )
- {
- return if $name eq '.' || $name eq '..';
- $name = "$curdir/$name" if length $curdir;
- my $type = '?';
- if ($size_or_dir eq '') {
- $type = "d";
- $size = ""; # directories have no size in the pc listing
- }
- else {
- $type = 'f';
- $size = $size_or_dir;
- }
- return [$name, $type, $size, str2time($date, $tz), undef];
- }
- else {
- return () unless defined $error;
- &$error($_) if ref($error) eq 'CODE';
- warn "Can't parse: $_\n" if $error eq 'warn';
- return ();
- }
-
-}
-
-
-
-package File::Listing::vms;
-@File::Listing::vms::ISA = qw(File::Listing);
-
-package File::Listing::netware;
-@File::Listing::netware::ISA = qw(File::Listing);
-
-
-
-package File::Listing::apache;
-
-use vars qw(@ISA);
-
-@ISA = qw(File::Listing);
-
-
-sub init { }
-
-
-sub line {
- shift; # package name
- local($_) = shift;
- my($tz, $error) = @_; # ignored for now...
-
- s!?t[rd][^>]*>! !g; # clean away various table stuff
- if (m!.* .*?(\d+)-([a-zA-Z]+|\d+)-(\d+)\s+(\d+):(\d+)\s+(?:([\d\.]+[kMG]?|-))!i) {
- my($filename, $filesize) = ($1, $7);
- my($d,$m,$y, $H,$M) = ($2,$3,$4,$5,$6);
- if ($m =~ /^\d+$/) {
- ($d,$y) = ($y,$d) # iso date
- }
- else {
- $m = _monthabbrev_number($m);
- }
-
- $filesize = 0 if $filesize eq '-';
- if ($filesize =~ s/k$//i) {
- $filesize *= 1024;
- }
- elsif ($filesize =~ s/M$//) {
- $filesize *= 1024*1024;
- }
- elsif ($filesize =~ s/G$//) {
- $filesize *= 1024*1024*1024;
- }
- $filesize = int $filesize;
-
- require Time::Local;
- my $filetime = Time::Local::timelocal(0,$M,$H,$d,$m-1,_guess_year($y)-1900);
- my $filetype = ($filename =~ s|/$|| ? "d" : "f");
- return [$filename, $filetype, $filesize, $filetime, undef];
- }
-
- return ();
-}
-
-
-sub _guess_year {
- my $y = shift;
- if ($y >= 90) {
- $y = 1900+$y;
- }
- elsif ($y < 100) {
- $y = 2000+$y;
- }
- $y;
-}
-
-
-sub _monthabbrev_number {
- my $mon = shift;
- +{'Jan' => 1,
- 'Feb' => 2,
- 'Mar' => 3,
- 'Apr' => 4,
- 'May' => 5,
- 'Jun' => 6,
- 'Jul' => 7,
- 'Aug' => 8,
- 'Sep' => 9,
- 'Oct' => 10,
- 'Nov' => 11,
- 'Dec' => 12,
- }->{$mon};
-}
-
-
-1;
-
-__END__
-
-#line 436
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Spec.pm b/software/Slic3r-1.3.0.64bit/lib/File/Spec.pm
deleted file mode 100644
index 05c6b227..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Spec.pm
+++ /dev/null
@@ -1,31 +0,0 @@
-#line 1 "File/Spec.pm"
-package File::Spec;
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-$VERSION = '3.63_01';
-$VERSION =~ tr/_//d;
-
-my %module = (MacOS => 'Mac',
- MSWin32 => 'Win32',
- os2 => 'OS2',
- VMS => 'VMS',
- epoc => 'Epoc',
- NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
- symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
- dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
- cygwin => 'Cygwin',
- amigaos => 'AmigaOS');
-
-
-my $module = $module{$^O} || 'Unix';
-
-require "File/Spec/$module.pm";
-@ISA = ("File::Spec::$module");
-
-1;
-
-__END__
-
-#line 341
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Spec/Unix.pm b/software/Slic3r-1.3.0.64bit/lib/File/Spec/Unix.pm
deleted file mode 100644
index 217eb20f..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Spec/Unix.pm
+++ /dev/null
@@ -1,385 +0,0 @@
-#line 1 "File/Spec/Unix.pm"
-package File::Spec::Unix;
-
-use strict;
-use vars qw($VERSION);
-
-$VERSION = '3.63_01';
-my $xs_version = $VERSION;
-$VERSION =~ tr/_//d;
-
-#dont try to load XSLoader and DynaLoader only to ultimately fail on miniperl
-if(!defined &canonpath && defined &DynaLoader::boot_DynaLoader) {
- eval {#eval is questionable since we are handling potential errors like
- #"Cwd object version 3.48 does not match bootstrap parameter 3.50
- #at lib/DynaLoader.pm line 216." by having this eval
- if ( $] >= 5.006 ) {
- require XSLoader;
- XSLoader::load("Cwd", $xs_version);
- } else {
- require Cwd;
- }
- };
-}
-
-#line 57
-
-sub _pp_canonpath {
- my ($self,$path) = @_;
- return unless defined $path;
-
- # Handle POSIX-style node names beginning with double slash (qnx, nto)
- # (POSIX says: "a pathname that begins with two successive slashes
- # may be interpreted in an implementation-defined manner, although
- # more than two leading slashes shall be treated as a single slash.")
- my $node = '';
- my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto';
-
-
- if ( $double_slashes_special
- && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) {
- $node = $1;
- }
- # This used to be
- # $path =~ s|/+|/|g unless ($^O eq 'cygwin');
- # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
- # (Mainly because trailing "" directories didn't get stripped).
- # Why would cygwin avoid collapsing multiple slashes into one? --jhi
- $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx
- $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx
- $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx
- $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx
- $path =~ s|^/\.\.$|/|; # /.. -> /
- $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
- return "$node$path";
-}
-*canonpath = \&_pp_canonpath unless defined &canonpath;
-
-#line 98
-
-sub _pp_catdir {
- my $self = shift;
-
- $self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
-}
-*catdir = \&_pp_catdir unless defined &catdir;
-
-#line 112
-
-sub _pp_catfile {
- my $self = shift;
- my $file = $self->canonpath(pop @_);
- return $file unless @_;
- my $dir = $self->catdir(@_);
- $dir .= "/" unless substr($dir,-1) eq "/";
- return $dir.$file;
-}
-*catfile = \&_pp_catfile unless defined &catfile;
-
-#line 128
-
-sub curdir { '.' }
-use constant _fn_curdir => ".";
-
-#line 137
-
-sub devnull { '/dev/null' }
-use constant _fn_devnull => "/dev/null";
-
-#line 146
-
-sub rootdir { '/' }
-use constant _fn_rootdir => "/";
-
-#line 163
-
-my ($tmpdir, %tmpenv);
-# Cache and return the calculated tmpdir, recording which env vars
-# determined it.
-sub _cache_tmpdir {
- @tmpenv{@_[2..$#_]} = @ENV{@_[2..$#_]};
- return $tmpdir = $_[1];
-}
-# Retrieve the cached tmpdir, checking first whether relevant env vars have
-# changed and invalidated the cache.
-sub _cached_tmpdir {
- shift;
- local $^W;
- return if grep $ENV{$_} ne $tmpenv{$_}, @_;
- return $tmpdir;
-}
-sub _tmpdir {
- my $self = shift;
- my @dirlist = @_;
- my $taint = do { no strict 'refs'; ${"\cTAINT"} };
- if ($taint) { # Check for taint mode on perl >= 5.8.0
- require Scalar::Util;
- @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
- }
- elsif ($] < 5.007) { # No ${^TAINT} before 5.8
- @dirlist = grep { eval { eval('1'.substr $_,0,0) } } @dirlist;
- }
-
- foreach (@dirlist) {
- next unless defined && -d && -w _;
- $tmpdir = $_;
- last;
- }
- $tmpdir = $self->curdir unless defined $tmpdir;
- $tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
- if ( !$self->file_name_is_absolute($tmpdir) ) {
- # See [perl #120593] for the full details
- # If possible, return a full path, rather than '.' or 'lib', but
- # jump through some hoops to avoid returning a tainted value.
- ($tmpdir) = grep {
- $taint ? ! Scalar::Util::tainted($_) :
- $] < 5.007 ? eval { eval('1'.substr $_,0,0) } : 1
- } $self->rel2abs($tmpdir), $tmpdir;
- }
- return $tmpdir;
-}
-
-sub tmpdir {
- my $cached = $_[0]->_cached_tmpdir('TMPDIR');
- return $cached if defined $cached;
- $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ), 'TMPDIR');
-}
-
-#line 221
-
-sub updir { '..' }
-use constant _fn_updir => "..";
-
-#line 231
-
-sub no_upwards {
- my $self = shift;
- return grep(!/^\.{1,2}\z/s, @_);
-}
-
-#line 243
-
-sub case_tolerant { 0 }
-use constant _fn_case_tolerant => 0;
-
-#line 256
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- return scalar($file =~ m:^/:s);
-}
-
-#line 267
-
-sub path {
- return () unless exists $ENV{PATH};
- my @path = split(':', $ENV{PATH});
- foreach (@path) { $_ = '.' if $_ eq '' }
- return @path;
-}
-
-#line 280
-
-sub join {
- my $self = shift;
- return $self->catfile(@_);
-}
-
-#line 306
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
-
- my ($volume,$directory,$file) = ('','','');
-
- if ( $nofile ) {
- $directory = $path;
- }
- else {
- $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
- $directory = $1;
- $file = $2;
- }
-
- return ($volume,$directory,$file);
-}
-
-
-#line 348
-
-sub splitdir {
- return split m|/|, $_[1], -1; # Preserve trailing fields
-}
-
-
-#line 362
-
-sub catpath {
- my ($self,$volume,$directory,$file) = @_;
-
- if ( $directory ne '' &&
- $file ne '' &&
- substr( $directory, -1 ) ne '/' &&
- substr( $file, 0, 1 ) ne '/'
- ) {
- $directory .= "/$file" ;
- }
- else {
- $directory .= $file ;
- }
-
- return $directory ;
-}
-
-#line 409
-
-sub abs2rel {
- my($self,$path,$base) = @_;
- $base = $self->_cwd() unless defined $base and length $base;
-
- ($path, $base) = map $self->canonpath($_), $path, $base;
-
- my $path_directories;
- my $base_directories;
-
- if (grep $self->file_name_is_absolute($_), $path, $base) {
- ($path, $base) = map $self->rel2abs($_), $path, $base;
-
- my ($path_volume) = $self->splitpath($path, 1);
- my ($base_volume) = $self->splitpath($base, 1);
-
- # Can't relativize across volumes
- return $path unless $path_volume eq $base_volume;
-
- $path_directories = ($self->splitpath($path, 1))[1];
- $base_directories = ($self->splitpath($base, 1))[1];
-
- # For UNC paths, the user might give a volume like //foo/bar that
- # strictly speaking has no directory portion. Treat it as if it
- # had the root directory for that volume.
- if (!length($base_directories) and $self->file_name_is_absolute($base)) {
- $base_directories = $self->rootdir;
- }
- }
- else {
- my $wd= ($self->splitpath($self->_cwd(), 1))[1];
- $path_directories = $self->catdir($wd, $path);
- $base_directories = $self->catdir($wd, $base);
- }
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path_directories );
- my @basechunks = $self->splitdir( $base_directories );
-
- if ($base_directories eq $self->rootdir) {
- return $self->curdir if $path_directories eq $self->rootdir;
- shift @pathchunks;
- return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') );
- }
-
- my @common;
- while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) {
- push @common, shift @pathchunks ;
- shift @basechunks ;
- }
- return $self->curdir unless @pathchunks || @basechunks;
-
- # @basechunks now contains the directories the resulting relative path
- # must ascend out of before it can descend to $path_directory. If there
- # are updir components, we must descend into the corresponding directories
- # (this only works if they are no symlinks).
- my @reverse_base;
- while( defined(my $dir= shift @basechunks) ) {
- if( $dir ne $self->updir ) {
- unshift @reverse_base, $self->updir;
- push @common, $dir;
- }
- elsif( @common ) {
- if( @reverse_base && $reverse_base[0] eq $self->updir ) {
- shift @reverse_base;
- pop @common;
- }
- else {
- unshift @reverse_base, pop @common;
- }
- }
- }
- my $result_dirs = $self->catdir( @reverse_base, @pathchunks );
- return $self->canonpath( $self->catpath('', $result_dirs, '') );
-}
-
-sub _same {
- $_[1] eq $_[2];
-}
-
-#line 514
-
-sub rel2abs {
- my ($self,$path,$base ) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = $self->_cwd();
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Glom them together
- $path = $self->catdir( $base, $path ) ;
- }
-
- return $self->canonpath( $path ) ;
-}
-
-#line 554
-
-# Internal routine to File::Spec, no point in making this public since
-# it is the standard Cwd interface. Most of the platform-specific
-# File::Spec subclasses use this.
-sub _cwd {
- require Cwd;
- Cwd::getcwd();
-}
-
-
-# Internal method to reduce xx\..\yy -> yy
-sub _collapse {
- my($fs, $path) = @_;
-
- my $updir = $fs->updir;
- my $curdir = $fs->curdir;
-
- my($vol, $dirs, $file) = $fs->splitpath($path);
- my @dirs = $fs->splitdir($dirs);
- pop @dirs if @dirs && $dirs[-1] eq '';
-
- my @collapsed;
- foreach my $dir (@dirs) {
- if( $dir eq $updir and # if we have an updir
- @collapsed and # and something to collapse
- length $collapsed[-1] and # and its not the rootdir
- $collapsed[-1] ne $updir and # nor another updir
- $collapsed[-1] ne $curdir # nor the curdir
- )
- { # then
- pop @collapsed; # collapse
- }
- else { # else
- push @collapsed, $dir; # just hang onto it
- }
- }
-
- return $fs->catpath($vol,
- $fs->catdir(@collapsed),
- $file
- );
-}
-
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/Spec/Win32.pm b/software/Slic3r-1.3.0.64bit/lib/File/Spec/Win32.pm
deleted file mode 100644
index 157cef7b..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/Spec/Win32.pm
+++ /dev/null
@@ -1,322 +0,0 @@
-#line 1 "File/Spec/Win32.pm"
-package File::Spec::Win32;
-
-use strict;
-
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '3.63_01';
-$VERSION =~ tr/_//d;
-
-@ISA = qw(File::Spec::Unix);
-
-# Some regexes we use for path splitting
-my $DRIVE_RX = '[a-zA-Z]:';
-my $UNC_RX = '(?:\\\\\\\\|//)[^\\\\/]+[\\\\/][^\\\\/]+';
-my $VOL_RX = "(?:$DRIVE_RX|$UNC_RX)";
-
-
-#line 40
-
-sub devnull {
- return "nul";
-}
-
-sub rootdir { '\\' }
-
-
-#line 69
-
-sub tmpdir {
- my $tmpdir = $_[0]->_cached_tmpdir(qw(TMPDIR TEMP TMP));
- return $tmpdir if defined $tmpdir;
- $tmpdir = $_[0]->_tmpdir( map( $ENV{$_}, qw(TMPDIR TEMP TMP) ),
- 'SYS:/temp',
- 'C:\system\temp',
- 'C:/temp',
- '/tmp',
- '/' );
- $_[0]->_cache_tmpdir($tmpdir, qw(TMPDIR TEMP TMP));
-}
-
-#line 91
-
-sub case_tolerant {
- eval {
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- require Win32API::File;
- } or return 1;
- my $drive = shift || "C:";
- my $osFsType = "\0"x256;
- my $osVolName = "\0"x256;
- my $ouFsFlags = 0;
- Win32API::File::GetVolumeInformation($drive, $osVolName, 256, [], [], $ouFsFlags, $osFsType, 256 );
- if ($ouFsFlags & Win32API::File::FS_CASE_SENSITIVE()) { return 0; }
- else { return 1; }
-}
-
-#line 113
-
-sub file_name_is_absolute {
-
- my ($self,$file) = @_;
-
- if ($file =~ m{^($VOL_RX)}o) {
- my $vol = $1;
- return ($vol =~ m{^$UNC_RX}o ? 2
- : $file =~ m{^$DRIVE_RX[\\/]}o ? 2
- : 0);
- }
- return $file =~ m{^[\\/]} ? 1 : 0;
-}
-
-#line 133
-
-sub catfile {
- shift;
-
- # Legacy / compatibility support
- #
- shift, return _canon_cat( "/", @_ )
- if $_[0] eq "";
-
- # Compatibility with File::Spec <= 3.26:
- # catfile('A:', 'foo') should return 'A:\foo'.
- return _canon_cat( ($_[0].'\\'), @_[1..$#_] )
- if $_[0] =~ m{^$DRIVE_RX\z}o;
-
- return _canon_cat( @_ );
-}
-
-sub catdir {
- shift;
-
- # Legacy / compatibility support
- #
- return ""
- unless @_;
- shift, return _canon_cat( "/", @_ )
- if $_[0] eq "";
-
- # Compatibility with File::Spec <= 3.26:
- # catdir('A:', 'foo') should return 'A:\foo'.
- return _canon_cat( ($_[0].'\\'), @_[1..$#_] )
- if $_[0] =~ m{^$DRIVE_RX\z}o;
-
- return _canon_cat( @_ );
-}
-
-sub path {
- my @path = split(';', $ENV{PATH});
- s/"//g for @path;
- @path = grep length, @path;
- unshift(@path, ".");
- return @path;
-}
-
-#line 186
-
-sub canonpath {
- # Legacy / compatibility support
- #
- return $_[1] if !defined($_[1]) or $_[1] eq '';
- return _canon_cat( $_[1] );
-}
-
-#line 213
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
- my ($volume,$directory,$file) = ('','','');
- if ( $nofile ) {
- $path =~
- m{^ ( $VOL_RX ? ) (.*) }sox;
- $volume = $1;
- $directory = $2;
- }
- else {
- $path =~
- m{^ ( $VOL_RX ? )
- ( (?:.*[\\/](?:\.\.?\Z(?!\n))?)? )
- (.*)
- }sox;
- $volume = $1;
- $directory = $2;
- $file = $3;
- }
-
- return ($volume,$directory,$file);
-}
-
-
-#line 259
-
-sub splitdir {
- my ($self,$directories) = @_ ;
- #
- # split() likes to forget about trailing null fields, so here we
- # check to be sure that there will not be any before handling the
- # simple case.
- #
- if ( $directories !~ m|[\\/]\Z(?!\n)| ) {
- return split( m|[\\/]|, $directories );
- }
- else {
- #
- # since there was a trailing separator, add a file name to the end,
- # then do the split, then replace it with ''.
- #
- my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
- $directories[ $#directories ]= '' ;
- return @directories ;
- }
-}
-
-
-#line 289
-
-sub catpath {
- my ($self,$volume,$directory,$file) = @_;
-
- # If it's UNC, make sure the glue separator is there, reusing
- # whatever separator is first in the $volume
- my $v;
- $volume .= $v
- if ( (($v) = $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s) &&
- $directory =~ m@^[^\\/]@s
- ) ;
-
- $volume .= $directory ;
-
- # If the volume is not just A:, make sure the glue separator is
- # there, reusing whatever separator is first in the $volume if possible.
- if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
- $volume =~ m@[^\\/]\Z(?!\n)@ &&
- $file =~ m@[^\\/]@
- ) {
- $volume =~ m@([\\/])@ ;
- my $sep = $1 ? $1 : '\\' ;
- $volume .= $sep ;
- }
-
- $volume .= $file ;
-
- return $volume ;
-}
-
-sub _same {
- lc($_[1]) eq lc($_[2]);
-}
-
-sub rel2abs {
- my ($self,$path,$base ) = @_;
-
- my $is_abs = $self->file_name_is_absolute($path);
-
- # Check for volume (should probably document the '2' thing...)
- return $self->canonpath( $path ) if $is_abs == 2;
-
- if ($is_abs) {
- # It's missing a volume, add one
- my $vol = ($self->splitpath( $self->_cwd() ))[0];
- return $self->canonpath( $vol . $path );
- }
-
- if ( !defined( $base ) || $base eq '' ) {
- require Cwd ;
- $base = Cwd::getdcwd( ($self->splitpath( $path ))[0] ) if defined &Cwd::getdcwd ;
- $base = $self->_cwd() unless defined $base ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- my ( $path_directories, $path_file ) =
- ($self->splitpath( $path, 1 ))[1,2] ;
-
- my ( $base_volume, $base_directories ) =
- $self->splitpath( $base, 1 ) ;
-
- $path = $self->catpath(
- $base_volume,
- $self->catdir( $base_directories, $path_directories ),
- $path_file
- ) ;
-
- return $self->canonpath( $path ) ;
-}
-
-#line 383
-
-
-sub _canon_cat # @path -> path
-{
- my ($first, @rest) = @_;
-
- my $volume = $first =~ s{ \A ([A-Za-z]:) ([\\/]?) }{}x # drive letter
- ? ucfirst( $1 ).( $2 ? "\\" : "" )
- : $first =~ s{ \A (?:\\\\|//) ([^\\/]+)
- (?: [\\/] ([^\\/]+) )?
- [\\/]? }{}xs # UNC volume
- ? "\\\\$1".( defined $2 ? "\\$2" : "" )."\\"
- : $first =~ s{ \A [\\/] }{}x # root dir
- ? "\\"
- : "";
- my $path = join "\\", $first, @rest;
-
- $path =~ tr#\\/#\\\\#s; # xx/yy --> xx\yy & xx\\yy --> xx\yy
-
- # xx/././yy --> xx/yy
- $path =~ s{(?:
- (?:\A|\\) # at begin or after a slash
- \.
- (?:\\\.)* # and more
- (?:\\|\z) # at end or followed by slash
- )+ # performance boost -- I do not know why
- }{\\}gx;
-
- # XXX I do not know whether more dots are supported by the OS supporting
- # this ... annotation (NetWare or symbian but not MSWin32).
- # Then .... could easily become ../../.. etc:
- # Replace \.\.\. by (\.\.\.+) and substitute with
- # { $1 . ".." . "\\.." x (length($2)-2) }gex
- # ... --> ../..
- $path =~ s{ (\A|\\) # at begin or after a slash
- \.\.\.
- (?=\\|\z) # at end or followed by slash
- }{$1..\\..}gx;
- # xx\yy\..\zz --> xx\zz
- while ( $path =~ s{(?:
- (?:\A|\\) # at begin or after a slash
- [^\\]+ # rip this 'yy' off
- \\\.\.
- (? xx NOTE: this is *not* root
- $path =~ s#\\\z##; # xx\ --> xx
-
- if ( $volume =~ m#\\\z# )
- { # \.. --> \
- $path =~ s{ \A # at begin
- \.\.
- (?:\\\.\.)* # and more
- (?:\\|\z) # at end or followed by slash
- }{}x;
-
- return $1 # \\HOST\SHARE\ --> \\HOST\SHARE
- if $path eq ""
- and $volume =~ m#\A(\\\\.*)\\\z#s;
- }
- return $path ne "" || $volume ? $volume.$path : ".";
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/File/stat.pm b/software/Slic3r-1.3.0.64bit/lib/File/stat.pm
deleted file mode 100644
index dc318a3e..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/File/stat.pm
+++ /dev/null
@@ -1,223 +0,0 @@
-#line 1 "File/stat.pm"
-package File::stat;
-use 5.006;
-
-use strict;
-use warnings;
-use warnings::register;
-use Carp;
-
-BEGIN { *warnif = \&warnings::warnif }
-
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
-our $VERSION = '1.07';
-
-my @fields;
-BEGIN {
- use Exporter ();
- @EXPORT = qw(stat lstat);
- @fields = qw( $st_dev $st_ino $st_mode
- $st_nlink $st_uid $st_gid
- $st_rdev $st_size
- $st_atime $st_mtime $st_ctime
- $st_blksize $st_blocks
- );
- @EXPORT_OK = ( @fields, "stat_cando" );
- %EXPORT_TAGS = ( FIELDS => [ @fields, @EXPORT ] );
-}
-use vars @fields;
-
-use Fcntl qw(S_IRUSR S_IWUSR S_IXUSR);
-
-BEGIN {
- # These constants will croak on use if the platform doesn't define
- # them. It's important to avoid inflicting that on the user.
- no strict 'refs';
- for (qw(suid sgid svtx)) {
- my $val = eval { &{"Fcntl::S_I\U$_"} };
- *{"_$_"} = defined $val ? sub { $_[0] & $val ? 1 : "" } : sub { "" };
- }
- for (qw(SOCK CHR BLK REG DIR LNK)) {
- *{"S_IS$_"} = defined eval { &{"Fcntl::S_IF$_"} }
- ? \&{"Fcntl::S_IS$_"} : sub { "" };
- }
- # FIFO flag and macro don't quite follow the S_IF/S_IS pattern above
- # RT #111638
- *{"S_ISFIFO"} = defined &Fcntl::S_IFIFO
- ? \&Fcntl::S_ISFIFO : sub { "" };
-}
-
-# from doio.c
-sub _ingroup {
- my ($gid, $eff) = @_;
-
- # I am assuming that since VMS doesn't have getgroups(2), $) will
- # always only contain a single entry.
- $^O eq "VMS" and return $_[0] == $);
-
- my ($egid, @supp) = split " ", $);
- my ($rgid) = split " ", $(;
-
- $gid == ($eff ? $egid : $rgid) and return 1;
- grep $gid == $_, @supp and return 1;
-
- return "";
-}
-
-# VMS uses the Unix version of the routine, even though this is very
-# suboptimal. VMS has a permissions structure that doesn't really fit
-# into struct stat, and unlike on Win32 the normal -X operators respect
-# that, but unfortunately by the time we get here we've already lost the
-# information we need. It looks to me as though if we were to preserve
-# the st_devnam entry of vmsish.h's fake struct stat (which actually
-# holds the filename) it might be possible to do this right, but both
-# getting that value out of the struct (perl's stat doesn't return it)
-# and interpreting it later would require this module to have an XS
-# component (at which point we might as well just call Perl_cando and
-# have done with it).
-
-if (grep $^O eq $_, qw/os2 MSWin32 dos/) {
-
- # from doio.c
- *cando = sub { ($_[0][2] & $_[1]) ? 1 : "" };
-}
-else {
-
- # from doio.c
- *cando = sub {
- my ($s, $mode, $eff) = @_;
- my $uid = $eff ? $> : $<;
- my ($stmode, $stuid, $stgid) = @$s[2,4,5];
-
- # This code basically assumes that the rwx bits of the mode are
- # the 0777 bits, but so does Perl_cando.
-
- if ($uid == 0 && $^O ne "VMS") {
- # If we're root on unix
- # not testing for executable status => all file tests are true
- return 1 if !($mode & 0111);
- # testing for executable status =>
- # for a file, any x bit will do
- # for a directory, always true
- return 1 if $stmode & 0111 || S_ISDIR($stmode);
- return "";
- }
-
- if ($stuid == $uid) {
- $stmode & $mode and return 1;
- }
- elsif (_ingroup($stgid, $eff)) {
- $stmode & ($mode >> 3) and return 1;
- }
- else {
- $stmode & ($mode >> 6) and return 1;
- }
- return "";
- };
-}
-
-# alias for those who don't like objects
-*stat_cando = \&cando;
-
-my %op = (
- r => sub { cando($_[0], S_IRUSR, 1) },
- w => sub { cando($_[0], S_IWUSR, 1) },
- x => sub { cando($_[0], S_IXUSR, 1) },
- o => sub { $_[0][4] == $> },
-
- R => sub { cando($_[0], S_IRUSR, 0) },
- W => sub { cando($_[0], S_IWUSR, 0) },
- X => sub { cando($_[0], S_IXUSR, 0) },
- O => sub { $_[0][4] == $< },
-
- e => sub { 1 },
- z => sub { $_[0][7] == 0 },
- s => sub { $_[0][7] },
-
- f => sub { S_ISREG ($_[0][2]) },
- d => sub { S_ISDIR ($_[0][2]) },
- l => sub { S_ISLNK ($_[0][2]) },
- p => sub { S_ISFIFO($_[0][2]) },
- S => sub { S_ISSOCK($_[0][2]) },
- b => sub { S_ISBLK ($_[0][2]) },
- c => sub { S_ISCHR ($_[0][2]) },
-
- u => sub { _suid($_[0][2]) },
- g => sub { _sgid($_[0][2]) },
- k => sub { _svtx($_[0][2]) },
-
- M => sub { ($^T - $_[0][9] ) / 86400 },
- C => sub { ($^T - $_[0][10]) / 86400 },
- A => sub { ($^T - $_[0][8] ) / 86400 },
-);
-
-use constant HINT_FILETEST_ACCESS => 0x00400000;
-
-# we need fallback=>1 or stringifying breaks
-use overload
- fallback => 1,
- -X => sub {
- my ($s, $op) = @_;
-
- if (index("rwxRWX", $op) >= 0) {
- (caller 0)[8] & HINT_FILETEST_ACCESS
- and warnif("File::stat ignores use filetest 'access'");
-
- $^O eq "VMS" and warnif("File::stat ignores VMS ACLs");
-
- # It would be nice to have a warning about using -l on a
- # non-lstat, but that would require an extra member in the
- # object.
- }
-
- if ($op{$op}) {
- return $op{$op}->($_[0]);
- }
- else {
- croak "-$op is not implemented on a File::stat object";
- }
- };
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'File::stat' => [
- map { $_ => '$' } qw{
- dev ino mode nlink uid gid rdev size
- atime mtime ctime blksize blocks
- }
-];
-
-sub populate (@) {
- return unless @_;
- my $stob = new();
- @$stob = (
- $st_dev, $st_ino, $st_mode, $st_nlink, $st_uid, $st_gid, $st_rdev,
- $st_size, $st_atime, $st_mtime, $st_ctime, $st_blksize, $st_blocks )
- = @_;
- return $stob;
-}
-
-sub lstat ($) { populate(CORE::lstat(shift)) }
-
-sub stat ($) {
- my $arg = shift;
- my $st = populate(CORE::stat $arg);
- return $st if defined $st;
- my $fh;
- {
- local $!;
- no strict 'refs';
- require Symbol;
- $fh = \*{ Symbol::qualify( $arg, caller() )};
- return unless defined fileno $fh;
- }
- return populate(CORE::stat $fh);
-}
-
-1;
-__END__
-
-#line 357
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/FileHandle.pm b/software/Slic3r-1.3.0.64bit/lib/FileHandle.pm
deleted file mode 100644
index 7d3a2515..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/FileHandle.pm
+++ /dev/null
@@ -1,107 +0,0 @@
-#line 1 "FileHandle.pm"
-package FileHandle;
-
-use 5.006;
-use strict;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
-
-$VERSION = "2.02";
-
-require IO::File;
-@ISA = qw(IO::File);
-
-@EXPORT = qw(_IOFBF _IOLBF _IONBF);
-
-@EXPORT_OK = qw(
- pipe
-
- autoflush
- output_field_separator
- output_record_separator
- input_record_separator
- input_line_number
- format_page_number
- format_lines_per_page
- format_lines_left
- format_name
- format_top_name
- format_line_break_characters
- format_formfeed
-
- print
- printf
- getline
- getlines
-);
-
-#
-# Everything we're willing to export, we must first import.
-#
-import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK;
-
-#
-# Some people call "FileHandle::function", so all the functions
-# that were in the old FileHandle class must be imported, too.
-#
-{
- no strict 'refs';
-
- my %import = (
- 'IO::Handle' =>
- [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
- eof flush error clearerr setbuf setvbuf _open_mode_string)],
- 'IO::Seekable' =>
- [qw(seek tell getpos setpos)],
- 'IO::File' =>
- [qw(new new_tmpfile open)]
- );
- for my $pkg (keys %import) {
- for my $func (@{$import{$pkg}}) {
- my $c = *{"${pkg}::$func"}{CODE}
- or die "${pkg}::$func missing";
- *$func = $c;
- }
- }
-}
-
-#
-# Specialized importer for Fcntl magic.
-#
-sub import {
- my $pkg = shift;
- my $callpkg = caller;
- require Exporter;
- Exporter::export($pkg, $callpkg, @_);
-
- #
- # If the Fcntl extension is available,
- # export its constants.
- #
- eval {
- require Fcntl;
- Exporter::export('Fcntl', $callpkg);
- };
-}
-
-################################################
-# This is the only exported function we define;
-# the rest come from other classes.
-#
-
-sub pipe {
- my $r = new IO::Handle;
- my $w = new IO::Handle;
- CORE::pipe($r, $w) or return undef;
- ($r, $w);
-}
-
-# Rebless standard file handles
-bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
-bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
-bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
-
-1;
-
-__END__
-
-#line 263
diff --git a/software/Slic3r-1.3.0.64bit/lib/FindBin.pm b/software/Slic3r-1.3.0.64bit/lib/FindBin.pm
deleted file mode 100644
index 0b249f6c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/FindBin.pm
+++ /dev/null
@@ -1,101 +0,0 @@
-#line 1 "FindBin.pm"
-# FindBin.pm
-#
-# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-#line 78
-
-package FindBin;
-use Carp;
-require 5.000;
-require Exporter;
-use Cwd qw(getcwd cwd abs_path);
-use File::Basename;
-use File::Spec;
-
-@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
-%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
-@ISA = qw(Exporter);
-
-$VERSION = "1.51";
-
-
-# needed for VMS-specific filename translation
-if( $^O eq 'VMS' ) {
- require VMS::Filespec;
- VMS::Filespec->import;
-}
-
-sub cwd2 {
- my $cwd = getcwd();
- # getcwd might fail if it hasn't access to the current directory.
- # try harder.
- defined $cwd or $cwd = cwd();
- $cwd;
-}
-
-sub init
-{
- *Dir = \$Bin;
- *RealDir = \$RealBin;
-
- if($0 eq '-e' || $0 eq '-')
- {
- # perl invoked with -e or script is on C
- $Script = $RealScript = $0;
- $Bin = $RealBin = cwd2();
- $Bin = VMS::Filespec::unixify($Bin) if $^O eq 'VMS';
- }
- else
- {
- my $script = $0;
-
- if ($^O eq 'VMS')
- {
- ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*[\]>\/]+)(.*)/s;
- # C isn't going to work, so unixify first
- ($Bin = VMS::Filespec::unixify($Bin)) =~ s/\/\z//;
- ($RealBin,$RealScript) = ($Bin,$Script);
- }
- else
- {
- croak("Cannot find current script '$0'") unless(-f $script);
-
- # Ensure $script contains the complete path in case we C
-
- $script = File::Spec->catfile(cwd2(), $script)
- unless File::Spec->file_name_is_absolute($script);
-
- ($Script,$Bin) = fileparse($script);
-
- # Resolve $script if it is a link
- while(1)
- {
- my $linktext = readlink($script);
-
- ($RealScript,$RealBin) = fileparse($script);
- last unless defined $linktext;
-
- $script = (File::Spec->file_name_is_absolute($linktext))
- ? $linktext
- : File::Spec->catfile($RealBin, $linktext);
- }
-
- # Get absolute paths to directories
- if ($Bin) {
- my $BinOld = $Bin;
- $Bin = abs_path($Bin);
- defined $Bin or $Bin = File::Spec->canonpath($BinOld);
- }
- $RealBin = abs_path($RealBin) if($RealBin);
- }
- }
-}
-
-BEGIN { init }
-
-*again = \&init;
-
-1; # Keep require happy
diff --git a/software/Slic3r-1.3.0.64bit/lib/Getopt/Long.pm b/software/Slic3r-1.3.0.64bit/lib/Getopt/Long.pm
deleted file mode 100644
index e05fabf2..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Getopt/Long.pm
+++ /dev/null
@@ -1,1556 +0,0 @@
-#! perl
-#line 2 "Getopt/Long.pm"
-
-# Getopt::Long.pm -- Universal options parsing
-# Author : Johan Vromans
-# Created On : Tue Sep 11 15:00:12 1990
-# Last Modified By: Johan Vromans
-# Last Modified On: Thu Jun 9 14:50:37 2016
-# Update Count : 1699
-# Status : Released
-
-################ Module Preamble ################
-
-package Getopt::Long;
-
-use 5.004;
-
-use strict;
-
-use vars qw($VERSION);
-$VERSION = 2.49;
-# For testing versions only.
-use vars qw($VERSION_STRING);
-$VERSION_STRING = "2.49";
-
-use Exporter;
-use vars qw(@ISA @EXPORT @EXPORT_OK);
-@ISA = qw(Exporter);
-
-# Exported subroutines.
-sub GetOptions(@); # always
-sub GetOptionsFromArray(@); # on demand
-sub GetOptionsFromString(@); # on demand
-sub Configure(@); # on demand
-sub HelpMessage(@); # on demand
-sub VersionMessage(@); # in demand
-
-BEGIN {
- # Init immediately so their contents can be used in the 'use vars' below.
- @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
- @EXPORT_OK = qw(&HelpMessage &VersionMessage &Configure
- &GetOptionsFromArray &GetOptionsFromString);
-}
-
-# User visible variables.
-use vars @EXPORT, @EXPORT_OK;
-use vars qw($error $debug $major_version $minor_version);
-# Deprecated visible variables.
-use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
- $passthrough);
-# Official invisible variables.
-use vars qw($genprefix $caller $gnu_compat $auto_help $auto_version $longprefix);
-
-# Really invisible variables.
-my $bundling_values;
-
-# Public subroutines.
-sub config(@); # deprecated name
-
-# Private subroutines.
-sub ConfigDefaults();
-sub ParseOptionSpec($$);
-sub OptCtl($);
-sub FindOption($$$$$);
-sub ValidValue ($$$$$);
-
-################ Local Variables ################
-
-# $requested_version holds the version that was mentioned in the 'use'
-# or 'require', if any. It can be used to enable or disable specific
-# features.
-my $requested_version = 0;
-
-################ Resident subroutines ################
-
-sub ConfigDefaults() {
- # Handle POSIX compliancy.
- if ( defined $ENV{"POSIXLY_CORRECT"} ) {
- $genprefix = "(--|-)";
- $autoabbrev = 0; # no automatic abbrev of options
- $bundling = 0; # no bundling of single letter switches
- $getopt_compat = 0; # disallow '+' to start options
- $order = $REQUIRE_ORDER;
- }
- else {
- $genprefix = "(--|-|\\+)";
- $autoabbrev = 1; # automatic abbrev of options
- $bundling = 0; # bundling off by default
- $getopt_compat = 1; # allow '+' to start options
- $order = $PERMUTE;
- }
- # Other configurable settings.
- $debug = 0; # for debugging
- $error = 0; # error tally
- $ignorecase = 1; # ignore case when matching options
- $passthrough = 0; # leave unrecognized options alone
- $gnu_compat = 0; # require --opt=val if value is optional
- $longprefix = "(--)"; # what does a long prefix look like
- $bundling_values = 0; # no bundling of values
-}
-
-# Override import.
-sub import {
- my $pkg = shift; # package
- my @syms = (); # symbols to import
- my @config = (); # configuration
- my $dest = \@syms; # symbols first
- for ( @_ ) {
- if ( $_ eq ':config' ) {
- $dest = \@config; # config next
- next;
- }
- push(@$dest, $_); # push
- }
- # Hide one level and call super.
- local $Exporter::ExportLevel = 1;
- push(@syms, qw(&GetOptions)) if @syms; # always export GetOptions
- $requested_version = 0;
- $pkg->SUPER::import(@syms);
- # And configure.
- Configure(@config) if @config;
-}
-
-################ Initialization ################
-
-# Values for $order. See GNU getopt.c for details.
-($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
-# Version major/minor numbers.
-($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
-
-ConfigDefaults();
-
-################ OO Interface ################
-
-package Getopt::Long::Parser;
-
-# Store a copy of the default configuration. Since ConfigDefaults has
-# just been called, what we get from Configure is the default.
-my $default_config = do {
- Getopt::Long::Configure ()
-};
-
-sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my %atts = @_;
-
- # Register the callers package.
- my $self = { caller_pkg => (caller)[0] };
-
- bless ($self, $class);
-
- # Process config attributes.
- if ( defined $atts{config} ) {
- my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
- $self->{settings} = Getopt::Long::Configure ($save);
- delete ($atts{config});
- }
- # Else use default config.
- else {
- $self->{settings} = $default_config;
- }
-
- if ( %atts ) { # Oops
- die(__PACKAGE__.": unhandled attributes: ".
- join(" ", sort(keys(%atts)))."\n");
- }
-
- $self;
-}
-
-sub configure {
- my ($self) = shift;
-
- # Restore settings, merge new settings in.
- my $save = Getopt::Long::Configure ($self->{settings}, @_);
-
- # Restore orig config and save the new config.
- $self->{settings} = Getopt::Long::Configure ($save);
-}
-
-sub getoptions {
- my ($self) = shift;
-
- return $self->getoptionsfromarray(\@ARGV, @_);
-}
-
-sub getoptionsfromarray {
- my ($self) = shift;
-
- # Restore config settings.
- my $save = Getopt::Long::Configure ($self->{settings});
-
- # Call main routine.
- my $ret = 0;
- $Getopt::Long::caller = $self->{caller_pkg};
-
- eval {
- # Locally set exception handler to default, otherwise it will
- # be called implicitly here, and again explicitly when we try
- # to deliver the messages.
- local ($SIG{__DIE__}) = 'DEFAULT';
- $ret = Getopt::Long::GetOptionsFromArray (@_);
- };
-
- # Restore saved settings.
- Getopt::Long::Configure ($save);
-
- # Handle errors and return value.
- die ($@) if $@;
- return $ret;
-}
-
-package Getopt::Long;
-
-################ Back to Normal ################
-
-# Indices in option control info.
-# Note that ParseOptions uses the fields directly. Search for 'hard-wired'.
-use constant CTL_TYPE => 0;
-#use constant CTL_TYPE_FLAG => '';
-#use constant CTL_TYPE_NEG => '!';
-#use constant CTL_TYPE_INCR => '+';
-#use constant CTL_TYPE_INT => 'i';
-#use constant CTL_TYPE_INTINC => 'I';
-#use constant CTL_TYPE_XINT => 'o';
-#use constant CTL_TYPE_FLOAT => 'f';
-#use constant CTL_TYPE_STRING => 's';
-
-use constant CTL_CNAME => 1;
-
-use constant CTL_DEFAULT => 2;
-
-use constant CTL_DEST => 3;
- use constant CTL_DEST_SCALAR => 0;
- use constant CTL_DEST_ARRAY => 1;
- use constant CTL_DEST_HASH => 2;
- use constant CTL_DEST_CODE => 3;
-
-use constant CTL_AMIN => 4;
-use constant CTL_AMAX => 5;
-
-# FFU.
-#use constant CTL_RANGE => ;
-#use constant CTL_REPEAT => ;
-
-# Rather liberal patterns to match numbers.
-use constant PAT_INT => "[-+]?_*[0-9][0-9_]*";
-use constant PAT_XINT =>
- "(?:".
- "[-+]?_*[1-9][0-9_]*".
- "|".
- "0x_*[0-9a-f][0-9a-f_]*".
- "|".
- "0b_*[01][01_]*".
- "|".
- "0[0-7_]*".
- ")";
-use constant PAT_FLOAT =>
- "[-+]?". # optional sign
- "(?=[0-9.])". # must start with digit or dec.point
- "[0-9_]*". # digits before the dec.point
- "(\.[0-9_]+)?". # optional fraction
- "([eE][-+]?[0-9_]+)?"; # optional exponent
-
-sub GetOptions(@) {
- # Shift in default array.
- unshift(@_, \@ARGV);
- # Try to keep caller() and Carp consistent.
- goto &GetOptionsFromArray;
-}
-
-sub GetOptionsFromString(@) {
- my ($string) = shift;
- require Text::ParseWords;
- my $args = [ Text::ParseWords::shellwords($string) ];
- $caller ||= (caller)[0]; # current context
- my $ret = GetOptionsFromArray($args, @_);
- return ( $ret, $args ) if wantarray;
- if ( @$args ) {
- $ret = 0;
- warn("GetOptionsFromString: Excess data \"@$args\" in string \"$string\"\n");
- }
- $ret;
-}
-
-sub GetOptionsFromArray(@) {
-
- my ($argv, @optionlist) = @_; # local copy of the option descriptions
- my $argend = '--'; # option list terminator
- my %opctl = (); # table of option specs
- my $pkg = $caller || (caller)[0]; # current context
- # Needed if linkage is omitted.
- my @ret = (); # accum for non-options
- my %linkage; # linkage
- my $userlinkage; # user supplied HASH
- my $opt; # current option
- my $prefix = $genprefix; # current prefix
-
- $error = '';
-
- if ( $debug ) {
- # Avoid some warnings if debugging.
- local ($^W) = 0;
- print STDERR
- ("Getopt::Long $Getopt::Long::VERSION ",
- "called from package \"$pkg\".",
- "\n ",
- "argv: ",
- defined($argv)
- ? UNIVERSAL::isa( $argv, 'ARRAY' ) ? "(@$argv)" : $argv
- : "",
- "\n ",
- "autoabbrev=$autoabbrev,".
- "bundling=$bundling,",
- "bundling_values=$bundling_values,",
- "getopt_compat=$getopt_compat,",
- "gnu_compat=$gnu_compat,",
- "order=$order,",
- "\n ",
- "ignorecase=$ignorecase,",
- "requested_version=$requested_version,",
- "passthrough=$passthrough,",
- "genprefix=\"$genprefix\",",
- "longprefix=\"$longprefix\".",
- "\n");
- }
-
- # Check for ref HASH as first argument.
- # First argument may be an object. It's OK to use this as long
- # as it is really a hash underneath.
- $userlinkage = undef;
- if ( @optionlist && ref($optionlist[0]) and
- UNIVERSAL::isa($optionlist[0],'HASH') ) {
- $userlinkage = shift (@optionlist);
- print STDERR ("=> user linkage: $userlinkage\n") if $debug;
- }
-
- # See if the first element of the optionlist contains option
- # starter characters.
- # Be careful not to interpret '<>' as option starters.
- if ( @optionlist && $optionlist[0] =~ /^\W+$/
- && !($optionlist[0] eq '<>'
- && @optionlist > 0
- && ref($optionlist[1])) ) {
- $prefix = shift (@optionlist);
- # Turn into regexp. Needs to be parenthesized!
- $prefix =~ s/(\W)/\\$1/g;
- $prefix = "([" . $prefix . "])";
- print STDERR ("=> prefix=\"$prefix\"\n") if $debug;
- }
-
- # Verify correctness of optionlist.
- %opctl = ();
- while ( @optionlist ) {
- my $opt = shift (@optionlist);
-
- unless ( defined($opt) ) {
- $error .= "Undefined argument in option spec\n";
- next;
- }
-
- # Strip leading prefix so people can specify "--foo=i" if they like.
- $opt = $+ if $opt =~ /^$prefix+(.*)$/s;
-
- if ( $opt eq '<>' ) {
- if ( (defined $userlinkage)
- && !(@optionlist > 0 && ref($optionlist[0]))
- && (exists $userlinkage->{$opt})
- && ref($userlinkage->{$opt}) ) {
- unshift (@optionlist, $userlinkage->{$opt});
- }
- unless ( @optionlist > 0
- && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
- $error .= "Option spec <> requires a reference to a subroutine\n";
- # Kill the linkage (to avoid another error).
- shift (@optionlist)
- if @optionlist && ref($optionlist[0]);
- next;
- }
- $linkage{'<>'} = shift (@optionlist);
- next;
- }
-
- # Parse option spec.
- my ($name, $orig) = ParseOptionSpec ($opt, \%opctl);
- unless ( defined $name ) {
- # Failed. $orig contains the error message. Sorry for the abuse.
- $error .= $orig;
- # Kill the linkage (to avoid another error).
- shift (@optionlist)
- if @optionlist && ref($optionlist[0]);
- next;
- }
-
- # If no linkage is supplied in the @optionlist, copy it from
- # the userlinkage if available.
- if ( defined $userlinkage ) {
- unless ( @optionlist > 0 && ref($optionlist[0]) ) {
- if ( exists $userlinkage->{$orig} &&
- ref($userlinkage->{$orig}) ) {
- print STDERR ("=> found userlinkage for \"$orig\": ",
- "$userlinkage->{$orig}\n")
- if $debug;
- unshift (@optionlist, $userlinkage->{$orig});
- }
- else {
- # Do nothing. Being undefined will be handled later.
- next;
- }
- }
- }
-
- # Copy the linkage. If omitted, link to global variable.
- if ( @optionlist > 0 && ref($optionlist[0]) ) {
- print STDERR ("=> link \"$orig\" to $optionlist[0]\n")
- if $debug;
- my $rl = ref($linkage{$orig} = shift (@optionlist));
-
- if ( $rl eq "ARRAY" ) {
- $opctl{$name}[CTL_DEST] = CTL_DEST_ARRAY;
- }
- elsif ( $rl eq "HASH" ) {
- $opctl{$name}[CTL_DEST] = CTL_DEST_HASH;
- }
- elsif ( $rl eq "SCALAR" || $rl eq "REF" ) {
-# if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
-# my $t = $linkage{$orig};
-# $$t = $linkage{$orig} = [];
-# }
-# elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
-# }
-# else {
- # Ok.
-# }
- }
- elsif ( $rl eq "CODE" ) {
- # Ok.
- }
- else {
- $error .= "Invalid option linkage for \"$opt\"\n";
- }
- }
- else {
- # Link to global $opt_XXX variable.
- # Make sure a valid perl identifier results.
- my $ov = $orig;
- $ov =~ s/\W/_/g;
- if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
- print STDERR ("=> link \"$orig\" to \@$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$orig} = \\\@".$pkg."::opt_$ov;");
- }
- elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
- print STDERR ("=> link \"$orig\" to \%$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$orig} = \\\%".$pkg."::opt_$ov;");
- }
- else {
- print STDERR ("=> link \"$orig\" to \$$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$orig} = \\\$".$pkg."::opt_$ov;");
- }
- }
-
- if ( $opctl{$name}[CTL_TYPE] eq 'I'
- && ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY
- || $opctl{$name}[CTL_DEST] == CTL_DEST_HASH )
- ) {
- $error .= "Invalid option linkage for \"$opt\"\n";
- }
-
- }
-
- $error .= "GetOptionsFromArray: 1st parameter is not an array reference\n"
- unless $argv && UNIVERSAL::isa( $argv, 'ARRAY' );
-
- # Bail out if errors found.
- die ($error) if $error;
- $error = 0;
-
- # Supply --version and --help support, if needed and allowed.
- if ( defined($auto_version) ? $auto_version : ($requested_version >= 2.3203) ) {
- if ( !defined($opctl{version}) ) {
- $opctl{version} = ['','version',0,CTL_DEST_CODE,undef];
- $linkage{version} = \&VersionMessage;
- }
- $auto_version = 1;
- }
- if ( defined($auto_help) ? $auto_help : ($requested_version >= 2.3203) ) {
- if ( !defined($opctl{help}) && !defined($opctl{'?'}) ) {
- $opctl{help} = $opctl{'?'} = ['','help',0,CTL_DEST_CODE,undef];
- $linkage{help} = \&HelpMessage;
- }
- $auto_help = 1;
- }
-
- # Show the options tables if debugging.
- if ( $debug ) {
- my ($arrow, $k, $v);
- $arrow = "=> ";
- while ( ($k,$v) = each(%opctl) ) {
- print STDERR ($arrow, "\$opctl{$k} = $v ", OptCtl($v), "\n");
- $arrow = " ";
- }
- }
-
- # Process argument list
- my $goon = 1;
- while ( $goon && @$argv > 0 ) {
-
- # Get next argument.
- $opt = shift (@$argv);
- print STDERR ("=> arg \"", $opt, "\"\n") if $debug;
-
- # Double dash is option list terminator.
- if ( defined($opt) && $opt eq $argend ) {
- push (@ret, $argend) if $passthrough;
- last;
- }
-
- # Look it up.
- my $tryopt = $opt;
- my $found; # success status
- my $key; # key (if hash type)
- my $arg; # option argument
- my $ctl; # the opctl entry
-
- ($found, $opt, $ctl, $arg, $key) =
- FindOption ($argv, $prefix, $argend, $opt, \%opctl);
-
- if ( $found ) {
-
- # FindOption undefines $opt in case of errors.
- next unless defined $opt;
-
- my $argcnt = 0;
- while ( defined $arg ) {
-
- # Get the canonical name.
- print STDERR ("=> cname for \"$opt\" is ") if $debug;
- $opt = $ctl->[CTL_CNAME];
- print STDERR ("\"$ctl->[CTL_CNAME]\"\n") if $debug;
-
- if ( defined $linkage{$opt} ) {
- print STDERR ("=> ref(\$L{$opt}) -> ",
- ref($linkage{$opt}), "\n") if $debug;
-
- if ( ref($linkage{$opt}) eq 'SCALAR'
- || ref($linkage{$opt}) eq 'REF' ) {
- if ( $ctl->[CTL_TYPE] eq '+' ) {
- print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
- if $debug;
- if ( defined ${$linkage{$opt}} ) {
- ${$linkage{$opt}} += $arg;
- }
- else {
- ${$linkage{$opt}} = $arg;
- }
- }
- elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
- print STDERR ("=> ref(\$L{$opt}) auto-vivified",
- " to ARRAY\n")
- if $debug;
- my $t = $linkage{$opt};
- $$t = $linkage{$opt} = [];
- print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
- if $debug;
- push (@{$linkage{$opt}}, $arg);
- }
- elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
- print STDERR ("=> ref(\$L{$opt}) auto-vivified",
- " to HASH\n")
- if $debug;
- my $t = $linkage{$opt};
- $$t = $linkage{$opt} = {};
- print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
- if $debug;
- $linkage{$opt}->{$key} = $arg;
- }
- else {
- print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
- if $debug;
- ${$linkage{$opt}} = $arg;
- }
- }
- elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
- print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
- if $debug;
- push (@{$linkage{$opt}}, $arg);
- }
- elsif ( ref($linkage{$opt}) eq 'HASH' ) {
- print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
- if $debug;
- $linkage{$opt}->{$key} = $arg;
- }
- elsif ( ref($linkage{$opt}) eq 'CODE' ) {
- print STDERR ("=> &L{$opt}(\"$opt\"",
- $ctl->[CTL_DEST] == CTL_DEST_HASH ? ", \"$key\"" : "",
- ", \"$arg\")\n")
- if $debug;
- my $eval_error = do {
- local $@;
- local $SIG{__DIE__} = 'DEFAULT';
- eval {
- &{$linkage{$opt}}
- (Getopt::Long::CallBack->new
- (name => $opt,
- ctl => $ctl,
- opctl => \%opctl,
- linkage => \%linkage,
- prefix => $prefix,
- ),
- $ctl->[CTL_DEST] == CTL_DEST_HASH ? ($key) : (),
- $arg);
- };
- $@;
- };
- print STDERR ("=> die($eval_error)\n")
- if $debug && $eval_error ne '';
- if ( $eval_error =~ /^!/ ) {
- if ( $eval_error =~ /^!FINISH\b/ ) {
- $goon = 0;
- }
- }
- elsif ( $eval_error ne '' ) {
- warn ($eval_error);
- $error++;
- }
- }
- else {
- print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
- "\" in linkage\n");
- die("Getopt::Long -- internal error!\n");
- }
- }
- # No entry in linkage means entry in userlinkage.
- elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
- if ( defined $userlinkage->{$opt} ) {
- print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
- if $debug;
- push (@{$userlinkage->{$opt}}, $arg);
- }
- else {
- print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
- if $debug;
- $userlinkage->{$opt} = [$arg];
- }
- }
- elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
- if ( defined $userlinkage->{$opt} ) {
- print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
- if $debug;
- $userlinkage->{$opt}->{$key} = $arg;
- }
- else {
- print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
- if $debug;
- $userlinkage->{$opt} = {$key => $arg};
- }
- }
- else {
- if ( $ctl->[CTL_TYPE] eq '+' ) {
- print STDERR ("=> \$L{$opt} += \"$arg\"\n")
- if $debug;
- if ( defined $userlinkage->{$opt} ) {
- $userlinkage->{$opt} += $arg;
- }
- else {
- $userlinkage->{$opt} = $arg;
- }
- }
- else {
- print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
- $userlinkage->{$opt} = $arg;
- }
- }
-
- $argcnt++;
- last if $argcnt >= $ctl->[CTL_AMAX] && $ctl->[CTL_AMAX] != -1;
- undef($arg);
-
- # Need more args?
- if ( $argcnt < $ctl->[CTL_AMIN] ) {
- if ( @$argv ) {
- if ( ValidValue($ctl, $argv->[0], 1, $argend, $prefix) ) {
- $arg = shift(@$argv);
- if ( $ctl->[CTL_TYPE] =~ /^[iIo]$/ ) {
- $arg =~ tr/_//d;
- $arg = $ctl->[CTL_TYPE] eq 'o' && $arg =~ /^0/
- ? oct($arg)
- : 0+$arg
- }
- ($key,$arg) = $arg =~ /^([^=]+)=(.*)/
- if $ctl->[CTL_DEST] == CTL_DEST_HASH;
- next;
- }
- warn("Value \"$$argv[0]\" invalid for option $opt\n");
- $error++;
- }
- else {
- warn("Insufficient arguments for option $opt\n");
- $error++;
- }
- }
-
- # Any more args?
- if ( @$argv && ValidValue($ctl, $argv->[0], 0, $argend, $prefix) ) {
- $arg = shift(@$argv);
- if ( $ctl->[CTL_TYPE] =~ /^[iIo]$/ ) {
- $arg =~ tr/_//d;
- $arg = $ctl->[CTL_TYPE] eq 'o' && $arg =~ /^0/
- ? oct($arg)
- : 0+$arg
- }
- ($key,$arg) = $arg =~ /^([^=]+)=(.*)/
- if $ctl->[CTL_DEST] == CTL_DEST_HASH;
- next;
- }
- }
- }
-
- # Not an option. Save it if we $PERMUTE and don't have a <>.
- elsif ( $order == $PERMUTE ) {
- # Try non-options call-back.
- my $cb;
- if ( defined ($cb = $linkage{'<>'}) ) {
- print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n")
- if $debug;
- my $eval_error = do {
- local $@;
- local $SIG{__DIE__} = 'DEFAULT';
- eval {
- # The arg to <> cannot be the CallBack object
- # since it may be passed to other modules that
- # get confused (e.g., Archive::Tar). Well,
- # it's not relevant for this callback anyway.
- &$cb($tryopt);
- };
- $@;
- };
- print STDERR ("=> die($eval_error)\n")
- if $debug && $eval_error ne '';
- if ( $eval_error =~ /^!/ ) {
- if ( $eval_error =~ /^!FINISH\b/ ) {
- $goon = 0;
- }
- }
- elsif ( $eval_error ne '' ) {
- warn ($eval_error);
- $error++;
- }
- }
- else {
- print STDERR ("=> saving \"$tryopt\" ",
- "(not an option, may permute)\n") if $debug;
- push (@ret, $tryopt);
- }
- next;
- }
-
- # ...otherwise, terminate.
- else {
- # Push this one back and exit.
- unshift (@$argv, $tryopt);
- return ($error == 0);
- }
-
- }
-
- # Finish.
- if ( @ret && $order == $PERMUTE ) {
- # Push back accumulated arguments
- print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
- if $debug;
- unshift (@$argv, @ret);
- }
-
- return ($error == 0);
-}
-
-# A readable representation of what's in an optbl.
-sub OptCtl ($) {
- my ($v) = @_;
- my @v = map { defined($_) ? ($_) : ("") } @$v;
- "[".
- join(",",
- "\"$v[CTL_TYPE]\"",
- "\"$v[CTL_CNAME]\"",
- "\"$v[CTL_DEFAULT]\"",
- ("\$","\@","\%","\&")[$v[CTL_DEST] || 0],
- $v[CTL_AMIN] || '',
- $v[CTL_AMAX] || '',
-# $v[CTL_RANGE] || '',
-# $v[CTL_REPEAT] || '',
- ). "]";
-}
-
-# Parse an option specification and fill the tables.
-sub ParseOptionSpec ($$) {
- my ($opt, $opctl) = @_;
-
- # Match option spec.
- if ( $opt !~ m;^
- (
- # Option name
- (?: \w+[-\w]* )
- # Alias names, or "?"
- (?: \| (?: \? | \w[-\w]* ) )*
- # Aliases
- (?: \| (?: [^-|!+=:][^|!+=:]* )? )*
- )?
- (
- # Either modifiers ...
- [!+]
- |
- # ... or a value/dest/repeat specification
- [=:] [ionfs] [@%]? (?: \{\d*,?\d*\} )?
- |
- # ... or an optional-with-default spec
- : (?: -?\d+ | \+ ) [@%]?
- )?
- $;x ) {
- return (undef, "Error in option spec: \"$opt\"\n");
- }
-
- my ($names, $spec) = ($1, $2);
- $spec = '' unless defined $spec;
-
- # $orig keeps track of the primary name the user specified.
- # This name will be used for the internal or external linkage.
- # In other words, if the user specifies "FoO|BaR", it will
- # match any case combinations of 'foo' and 'bar', but if a global
- # variable needs to be set, it will be $opt_FoO in the exact case
- # as specified.
- my $orig;
-
- my @names;
- if ( defined $names ) {
- @names = split (/\|/, $names);
- $orig = $names[0];
- }
- else {
- @names = ('');
- $orig = '';
- }
-
- # Construct the opctl entries.
- my $entry;
- if ( $spec eq '' || $spec eq '+' || $spec eq '!' ) {
- # Fields are hard-wired here.
- $entry = [$spec,$orig,undef,CTL_DEST_SCALAR,0,0];
- }
- elsif ( $spec =~ /^:(-?\d+|\+)([@%])?$/ ) {
- my $def = $1;
- my $dest = $2;
- my $type = $def eq '+' ? 'I' : 'i';
- $dest ||= '$';
- $dest = $dest eq '@' ? CTL_DEST_ARRAY
- : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
- # Fields are hard-wired here.
- $entry = [$type,$orig,$def eq '+' ? undef : $def,
- $dest,0,1];
- }
- else {
- my ($mand, $type, $dest) =
- $spec =~ /^([=:])([ionfs])([@%])?(\{(\d+)?(,)?(\d+)?\})?$/;
- return (undef, "Cannot repeat while bundling: \"$opt\"\n")
- if $bundling && defined($4);
- my ($mi, $cm, $ma) = ($5, $6, $7);
- return (undef, "{0} is useless in option spec: \"$opt\"\n")
- if defined($mi) && !$mi && !defined($ma) && !defined($cm);
-
- $type = 'i' if $type eq 'n';
- $dest ||= '$';
- $dest = $dest eq '@' ? CTL_DEST_ARRAY
- : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
- # Default minargs to 1/0 depending on mand status.
- $mi = $mand eq '=' ? 1 : 0 unless defined $mi;
- # Adjust mand status according to minargs.
- $mand = $mi ? '=' : ':';
- # Adjust maxargs.
- $ma = $mi ? $mi : 1 unless defined $ma || defined $cm;
- return (undef, "Max must be greater than zero in option spec: \"$opt\"\n")
- if defined($ma) && !$ma;
- return (undef, "Max less than min in option spec: \"$opt\"\n")
- if defined($ma) && $ma < $mi;
-
- # Fields are hard-wired here.
- $entry = [$type,$orig,undef,$dest,$mi,$ma||-1];
- }
-
- # Process all names. First is canonical, the rest are aliases.
- my $dups = '';
- foreach ( @names ) {
-
- $_ = lc ($_)
- if $ignorecase > (($bundling && length($_) == 1) ? 1 : 0);
-
- if ( exists $opctl->{$_} ) {
- $dups .= "Duplicate specification \"$opt\" for option \"$_\"\n";
- }
-
- if ( $spec eq '!' ) {
- $opctl->{"no$_"} = $entry;
- $opctl->{"no-$_"} = $entry;
- $opctl->{$_} = [@$entry];
- $opctl->{$_}->[CTL_TYPE] = '';
- }
- else {
- $opctl->{$_} = $entry;
- }
- }
-
- if ( $dups && $^W ) {
- foreach ( split(/\n+/, $dups) ) {
- warn($_."\n");
- }
- }
- ($names[0], $orig);
-}
-
-# Option lookup.
-sub FindOption ($$$$$) {
-
- # returns (1, $opt, $ctl, $arg, $key) if okay,
- # returns (1, undef) if option in error,
- # returns (0) otherwise.
-
- my ($argv, $prefix, $argend, $opt, $opctl) = @_;
-
- print STDERR ("=> find \"$opt\"\n") if $debug;
-
- return (0) unless defined($opt);
- return (0) unless $opt =~ /^($prefix)(.*)$/s;
- return (0) if $opt eq "-" && !defined $opctl->{''};
-
- $opt = substr( $opt, length($1) ); # retain taintedness
- my $starter = $1;
-
- print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
-
- my $optarg; # value supplied with --opt=value
- my $rest; # remainder from unbundling
-
- # If it is a long option, it may include the value.
- # With getopt_compat, only if not bundling.
- if ( ($starter=~/^$longprefix$/
- || ($getopt_compat && ($bundling == 0 || $bundling == 2)))
- && (my $oppos = index($opt, '=', 1)) > 0) {
- my $optorg = $opt;
- $opt = substr($optorg, 0, $oppos);
- $optarg = substr($optorg, $oppos + 1); # retain tainedness
- print STDERR ("=> option \"", $opt,
- "\", optarg = \"$optarg\"\n") if $debug;
- }
-
- #### Look it up ###
-
- my $tryopt = $opt; # option to try
-
- if ( ( $bundling || $bundling_values ) && $starter eq '-' ) {
-
- # To try overrides, obey case ignore.
- $tryopt = $ignorecase ? lc($opt) : $opt;
-
- # If bundling == 2, long options can override bundles.
- if ( $bundling == 2 && length($tryopt) > 1
- && defined ($opctl->{$tryopt}) ) {
- print STDERR ("=> $starter$tryopt overrides unbundling\n")
- if $debug;
- }
-
- # If bundling_values, option may be followed by the value.
- elsif ( $bundling_values ) {
- $tryopt = $opt;
- # Unbundle single letter option.
- $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
- $tryopt = substr ($tryopt, 0, 1);
- $tryopt = lc ($tryopt) if $ignorecase > 1;
- print STDERR ("=> $starter$tryopt unbundled from ",
- "$starter$tryopt$rest\n") if $debug;
- # Whatever remains may not be considered an option.
- $optarg = $rest eq '' ? undef : $rest;
- $rest = undef;
- }
-
- # Split off a single letter and leave the rest for
- # further processing.
- else {
- $tryopt = $opt;
- # Unbundle single letter option.
- $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
- $tryopt = substr ($tryopt, 0, 1);
- $tryopt = lc ($tryopt) if $ignorecase > 1;
- print STDERR ("=> $starter$tryopt unbundled from ",
- "$starter$tryopt$rest\n") if $debug;
- $rest = undef unless $rest ne '';
- }
- }
-
- # Try auto-abbreviation.
- elsif ( $autoabbrev && $opt ne "" ) {
- # Sort the possible long option names.
- my @names = sort(keys (%$opctl));
- # Downcase if allowed.
- $opt = lc ($opt) if $ignorecase;
- $tryopt = $opt;
- # Turn option name into pattern.
- my $pat = quotemeta ($opt);
- # Look up in option names.
- my @hits = grep (/^$pat/, @names);
- print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
- "out of ", scalar(@names), "\n") if $debug;
-
- # Check for ambiguous results.
- unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
- # See if all matches are for the same option.
- my %hit;
- foreach ( @hits ) {
- my $hit = $opctl->{$_}->[CTL_CNAME]
- if defined $opctl->{$_}->[CTL_CNAME];
- $hit = "no" . $hit if $opctl->{$_}->[CTL_TYPE] eq '!';
- $hit{$hit} = 1;
- }
- # Remove auto-supplied options (version, help).
- if ( keys(%hit) == 2 ) {
- if ( $auto_version && exists($hit{version}) ) {
- delete $hit{version};
- }
- elsif ( $auto_help && exists($hit{help}) ) {
- delete $hit{help};
- }
- }
- # Now see if it really is ambiguous.
- unless ( keys(%hit) == 1 ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " is ambiguous (",
- join(", ", @hits), ")\n");
- $error++;
- return (1, undef);
- }
- @hits = keys(%hit);
- }
-
- # Complete the option name, if appropriate.
- if ( @hits == 1 && $hits[0] ne $opt ) {
- $tryopt = $hits[0];
- $tryopt = lc ($tryopt) if $ignorecase;
- print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
- if $debug;
- }
- }
-
- # Map to all lowercase if ignoring case.
- elsif ( $ignorecase ) {
- $tryopt = lc ($opt);
- }
-
- # Check validity by fetching the info.
- my $ctl = $opctl->{$tryopt};
- unless ( defined $ctl ) {
- return (0) if $passthrough;
- # Pretend one char when bundling.
- if ( $bundling == 1 && length($starter) == 1 ) {
- $opt = substr($opt,0,1);
- unshift (@$argv, $starter.$rest) if defined $rest;
- }
- if ( $opt eq "" ) {
- warn ("Missing option after ", $starter, "\n");
- }
- else {
- warn ("Unknown option: ", $opt, "\n");
- }
- $error++;
- return (1, undef);
- }
- # Apparently valid.
- $opt = $tryopt;
- print STDERR ("=> found ", OptCtl($ctl),
- " for \"", $opt, "\"\n") if $debug;
-
- #### Determine argument status ####
-
- # If it is an option w/o argument, we're almost finished with it.
- my $type = $ctl->[CTL_TYPE];
- my $arg;
-
- if ( $type eq '' || $type eq '!' || $type eq '+' ) {
- if ( defined $optarg ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " does not take an argument\n");
- $error++;
- undef $opt;
- undef $optarg if $bundling_values;
- }
- elsif ( $type eq '' || $type eq '+' ) {
- # Supply explicit value.
- $arg = 1;
- }
- else {
- $opt =~ s/^no-?//i; # strip NO prefix
- $arg = 0; # supply explicit value
- }
- unshift (@$argv, $starter.$rest) if defined $rest;
- return (1, $opt, $ctl, $arg);
- }
-
- # Get mandatory status and type info.
- my $mand = $ctl->[CTL_AMIN];
-
- # Check if there is an option argument available.
- if ( $gnu_compat ) {
- my $optargtype = 0; # 0 = none, 1 = empty, 2 = nonempty
- $optargtype = ( !defined($optarg) ? 0 : ( (length($optarg) == 0) ? 1 : 2 ) );
- return (1, $opt, $ctl, defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : undef)
- if (($optargtype == 0) && !$mand);
- return (1, $opt, $ctl, $type eq 's' ? '' : 0)
- if $optargtype == 1; # --foo= -> return nothing
- }
-
- # Check if there is an option argument available.
- if ( defined $optarg
- ? ($optarg eq '')
- : !(defined $rest || @$argv > 0) ) {
- # Complain if this option needs an argument.
-# if ( $mand && !($type eq 's' ? defined($optarg) : 0) ) {
- if ( $mand ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " requires an argument\n");
- $error++;
- return (1, undef);
- }
- if ( $type eq 'I' ) {
- # Fake incremental type.
- my @c = @$ctl;
- $c[CTL_TYPE] = '+';
- return (1, $opt, \@c, 1);
- }
- return (1, $opt, $ctl,
- defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
- $type eq 's' ? '' : 0);
- }
-
- # Get (possibly optional) argument.
- $arg = (defined $rest ? $rest
- : (defined $optarg ? $optarg : shift (@$argv)));
-
- # Get key if this is a "name=value" pair for a hash option.
- my $key;
- if ($ctl->[CTL_DEST] == CTL_DEST_HASH && defined $arg) {
- ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2)
- : ($arg, defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
- ($mand ? undef : ($type eq 's' ? "" : 1)));
- if (! defined $arg) {
- warn ("Option $opt, key \"$key\", requires a value\n");
- $error++;
- # Push back.
- unshift (@$argv, $starter.$rest) if defined $rest;
- return (1, undef);
- }
- }
-
- #### Check if the argument is valid for this option ####
-
- my $key_valid = $ctl->[CTL_DEST] == CTL_DEST_HASH ? "[^=]+=" : "";
-
- if ( $type eq 's' ) { # string
- # A mandatory string takes anything.
- return (1, $opt, $ctl, $arg, $key) if $mand;
-
- # Same for optional string as a hash value
- return (1, $opt, $ctl, $arg, $key)
- if $ctl->[CTL_DEST] == CTL_DEST_HASH;
-
- # An optional string takes almost anything.
- return (1, $opt, $ctl, $arg, $key)
- if defined $optarg || defined $rest;
- return (1, $opt, $ctl, $arg, $key) if $arg eq "-"; # ??
-
- # Check for option or option list terminator.
- if ($arg eq $argend ||
- $arg =~ /^$prefix.+/) {
- # Push back.
- unshift (@$argv, $arg);
- # Supply empty value.
- $arg = '';
- }
- }
-
- elsif ( $type eq 'i' # numeric/integer
- || $type eq 'I' # numeric/integer w/ incr default
- || $type eq 'o' ) { # dec/oct/hex/bin value
-
- my $o_valid = $type eq 'o' ? PAT_XINT : PAT_INT;
-
- if ( $bundling && defined $rest
- && $rest =~ /^($key_valid)($o_valid)(.*)$/si ) {
- ($key, $arg, $rest) = ($1, $2, $+);
- chop($key) if $key;
- $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
- unshift (@$argv, $starter.$rest) if defined $rest && $rest ne '';
- }
- elsif ( $arg =~ /^$o_valid$/si ) {
- $arg =~ tr/_//d;
- $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
- }
- else {
- if ( defined $optarg || $mand ) {
- if ( $passthrough ) {
- unshift (@$argv, defined $rest ? $starter.$rest : $arg)
- unless defined $optarg;
- return (0);
- }
- warn ("Value \"", $arg, "\" invalid for option ",
- $opt, " (",
- $type eq 'o' ? "extended " : '',
- "number expected)\n");
- $error++;
- # Push back.
- unshift (@$argv, $starter.$rest) if defined $rest;
- return (1, undef);
- }
- else {
- # Push back.
- unshift (@$argv, defined $rest ? $starter.$rest : $arg);
- if ( $type eq 'I' ) {
- # Fake incremental type.
- my @c = @$ctl;
- $c[CTL_TYPE] = '+';
- return (1, $opt, \@c, 1);
- }
- # Supply default value.
- $arg = defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : 0;
- }
- }
- }
-
- elsif ( $type eq 'f' ) { # real number, int is also ok
- my $o_valid = PAT_FLOAT;
- if ( $bundling && defined $rest &&
- $rest =~ /^($key_valid)($o_valid)(.*)$/s ) {
- $arg =~ tr/_//d;
- ($key, $arg, $rest) = ($1, $2, $+);
- chop($key) if $key;
- unshift (@$argv, $starter.$rest) if defined $rest && $rest ne '';
- }
- elsif ( $arg =~ /^$o_valid$/ ) {
- $arg =~ tr/_//d;
- }
- else {
- if ( defined $optarg || $mand ) {
- if ( $passthrough ) {
- unshift (@$argv, defined $rest ? $starter.$rest : $arg)
- unless defined $optarg;
- return (0);
- }
- warn ("Value \"", $arg, "\" invalid for option ",
- $opt, " (real number expected)\n");
- $error++;
- # Push back.
- unshift (@$argv, $starter.$rest) if defined $rest;
- return (1, undef);
- }
- else {
- # Push back.
- unshift (@$argv, defined $rest ? $starter.$rest : $arg);
- # Supply default value.
- $arg = 0.0;
- }
- }
- }
- else {
- die("Getopt::Long internal error (Can't happen)\n");
- }
- return (1, $opt, $ctl, $arg, $key);
-}
-
-sub ValidValue ($$$$$) {
- my ($ctl, $arg, $mand, $argend, $prefix) = @_;
-
- if ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
- return 0 unless $arg =~ /[^=]+=(.*)/;
- $arg = $1;
- }
-
- my $type = $ctl->[CTL_TYPE];
-
- if ( $type eq 's' ) { # string
- # A mandatory string takes anything.
- return (1) if $mand;
-
- return (1) if $arg eq "-";
-
- # Check for option or option list terminator.
- return 0 if $arg eq $argend || $arg =~ /^$prefix.+/;
- return 1;
- }
-
- elsif ( $type eq 'i' # numeric/integer
- || $type eq 'I' # numeric/integer w/ incr default
- || $type eq 'o' ) { # dec/oct/hex/bin value
-
- my $o_valid = $type eq 'o' ? PAT_XINT : PAT_INT;
- return $arg =~ /^$o_valid$/si;
- }
-
- elsif ( $type eq 'f' ) { # real number, int is also ok
- my $o_valid = PAT_FLOAT;
- return $arg =~ /^$o_valid$/;
- }
- die("ValidValue: Cannot happen\n");
-}
-
-# Getopt::Long Configuration.
-sub Configure (@) {
- my (@options) = @_;
-
- my $prevconfig =
- [ $error, $debug, $major_version, $minor_version, $caller,
- $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
- $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
- $longprefix, $bundling_values ];
-
- if ( ref($options[0]) eq 'ARRAY' ) {
- ( $error, $debug, $major_version, $minor_version, $caller,
- $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
- $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
- $longprefix, $bundling_values ) = @{shift(@options)};
- }
-
- my $opt;
- foreach $opt ( @options ) {
- my $try = lc ($opt);
- my $action = 1;
- if ( $try =~ /^no_?(.*)$/s ) {
- $action = 0;
- $try = $+;
- }
- if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
- ConfigDefaults ();
- }
- elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
- local $ENV{POSIXLY_CORRECT};
- $ENV{POSIXLY_CORRECT} = 1 if $action;
- ConfigDefaults ();
- }
- elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
- $autoabbrev = $action;
- }
- elsif ( $try eq 'getopt_compat' ) {
- $getopt_compat = $action;
- $genprefix = $action ? "(--|-|\\+)" : "(--|-)";
- }
- elsif ( $try eq 'gnu_getopt' ) {
- if ( $action ) {
- $gnu_compat = 1;
- $bundling = 1;
- $getopt_compat = 0;
- $genprefix = "(--|-)";
- $order = $PERMUTE;
- $bundling_values = 0;
- }
- }
- elsif ( $try eq 'gnu_compat' ) {
- $gnu_compat = $action;
- $bundling = 0;
- $bundling_values = 1;
- }
- elsif ( $try =~ /^(auto_?)?version$/ ) {
- $auto_version = $action;
- }
- elsif ( $try =~ /^(auto_?)?help$/ ) {
- $auto_help = $action;
- }
- elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
- $ignorecase = $action;
- }
- elsif ( $try eq 'ignorecase_always' or $try eq 'ignore_case_always' ) {
- $ignorecase = $action ? 2 : 0;
- }
- elsif ( $try eq 'bundling' ) {
- $bundling = $action;
- $bundling_values = 0 if $action;
- }
- elsif ( $try eq 'bundling_override' ) {
- $bundling = $action ? 2 : 0;
- $bundling_values = 0 if $action;
- }
- elsif ( $try eq 'bundling_values' ) {
- $bundling_values = $action;
- $bundling = 0 if $action;
- }
- elsif ( $try eq 'require_order' ) {
- $order = $action ? $REQUIRE_ORDER : $PERMUTE;
- }
- elsif ( $try eq 'permute' ) {
- $order = $action ? $PERMUTE : $REQUIRE_ORDER;
- }
- elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
- $passthrough = $action;
- }
- elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
- $genprefix = $1;
- # Turn into regexp. Needs to be parenthesized!
- $genprefix = "(" . quotemeta($genprefix) . ")";
- eval { '' =~ /$genprefix/; };
- die("Getopt::Long: invalid pattern \"$genprefix\"\n") if $@;
- }
- elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
- $genprefix = $1;
- # Parenthesize if needed.
- $genprefix = "(" . $genprefix . ")"
- unless $genprefix =~ /^\(.*\)$/;
- eval { '' =~ m"$genprefix"; };
- die("Getopt::Long: invalid pattern \"$genprefix\"\n") if $@;
- }
- elsif ( $try =~ /^long_prefix_pattern=(.+)$/ && $action ) {
- $longprefix = $1;
- # Parenthesize if needed.
- $longprefix = "(" . $longprefix . ")"
- unless $longprefix =~ /^\(.*\)$/;
- eval { '' =~ m"$longprefix"; };
- die("Getopt::Long: invalid long prefix pattern \"$longprefix\"\n") if $@;
- }
- elsif ( $try eq 'debug' ) {
- $debug = $action;
- }
- else {
- die("Getopt::Long: unknown or erroneous config parameter \"$opt\"\n")
- }
- }
- $prevconfig;
-}
-
-# Deprecated name.
-sub config (@) {
- Configure (@_);
-}
-
-# Issue a standard message for --version.
-#
-# The arguments are mostly the same as for Pod::Usage::pod2usage:
-#
-# - a number (exit value)
-# - a string (lead in message)
-# - a hash with options. See Pod::Usage for details.
-#
-sub VersionMessage(@) {
- # Massage args.
- my $pa = setup_pa_args("version", @_);
-
- my $v = $main::VERSION;
- my $fh = $pa->{-output} ||
- ( ($pa->{-exitval} eq "NOEXIT" || $pa->{-exitval} < 2) ? \*STDOUT : \*STDERR );
-
- print $fh (defined($pa->{-message}) ? $pa->{-message} : (),
- $0, defined $v ? " version $v" : (),
- "\n",
- "(", __PACKAGE__, "::", "GetOptions",
- " version ",
- defined($Getopt::Long::VERSION_STRING)
- ? $Getopt::Long::VERSION_STRING : $VERSION, ";",
- " Perl version ",
- $] >= 5.006 ? sprintf("%vd", $^V) : $],
- ")\n");
- exit($pa->{-exitval}) unless $pa->{-exitval} eq "NOEXIT";
-}
-
-# Issue a standard message for --help.
-#
-# The arguments are the same as for Pod::Usage::pod2usage:
-#
-# - a number (exit value)
-# - a string (lead in message)
-# - a hash with options. See Pod::Usage for details.
-#
-sub HelpMessage(@) {
- eval {
- require Pod::Usage;
- import Pod::Usage;
- 1;
- } || die("Cannot provide help: cannot load Pod::Usage\n");
-
- # Note that pod2usage will issue a warning if -exitval => NOEXIT.
- pod2usage(setup_pa_args("help", @_));
-
-}
-
-# Helper routine to set up a normalized hash ref to be used as
-# argument to pod2usage.
-sub setup_pa_args($@) {
- my $tag = shift; # who's calling
-
- # If called by direct binding to an option, it will get the option
- # name and value as arguments. Remove these, if so.
- @_ = () if @_ == 2 && $_[0] eq $tag;
-
- my $pa;
- if ( @_ > 1 ) {
- $pa = { @_ };
- }
- else {
- $pa = shift || {};
- }
-
- # At this point, $pa can be a number (exit value), string
- # (message) or hash with options.
-
- if ( UNIVERSAL::isa($pa, 'HASH') ) {
- # Get rid of -msg vs. -message ambiguity.
- $pa->{-message} = $pa->{-msg};
- delete($pa->{-msg});
- }
- elsif ( $pa =~ /^-?\d+$/ ) {
- $pa = { -exitval => $pa };
- }
- else {
- $pa = { -message => $pa };
- }
-
- # These are _our_ defaults.
- $pa->{-verbose} = 0 unless exists($pa->{-verbose});
- $pa->{-exitval} = 0 unless exists($pa->{-exitval});
- $pa;
-}
-
-# Sneak way to know what version the user requested.
-sub VERSION {
- $requested_version = $_[1];
- shift->SUPER::VERSION(@_);
-}
-
-package Getopt::Long::CallBack;
-
-sub new {
- my ($pkg, %atts) = @_;
- bless { %atts }, $pkg;
-}
-
-sub name {
- my $self = shift;
- ''.$self->{name};
-}
-
-use overload
- # Treat this object as an ordinary string for legacy API.
- '""' => \&name,
- fallback => 1;
-
-1;
-
-################ Documentation ################
-
-#line 2749
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTML/Entities.pm b/software/Slic3r-1.3.0.64bit/lib/HTML/Entities.pm
deleted file mode 100644
index 297fc33e..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTML/Entities.pm
+++ /dev/null
@@ -1,353 +0,0 @@
-#line 1 "HTML/Entities.pm"
-package HTML::Entities;
-
-
-
-#line 137
-
-use strict;
-use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
-use vars qw(%entity2char %char2entity);
-
-require 5.004;
-require Exporter;
-@ISA = qw(Exporter);
-
-@EXPORT = qw(encode_entities decode_entities _decode_entities);
-@EXPORT_OK = qw(%entity2char %char2entity encode_entities_numeric);
-
-$VERSION = "3.69";
-sub Version { $VERSION; }
-
-require HTML::Parser; # for fast XS implemented decode_entities
-
-
-%entity2char = (
- # Some normal chars that have special meaning in SGML context
- amp => '&', # ampersand
-'gt' => '>', # greater than
-'lt' => '<', # less than
- quot => '"', # double quote
- apos => "'", # single quote
-
- # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
- AElig => chr(198), # capital AE diphthong (ligature)
- Aacute => chr(193), # capital A, acute accent
- Acirc => chr(194), # capital A, circumflex accent
- Agrave => chr(192), # capital A, grave accent
- Aring => chr(197), # capital A, ring
- Atilde => chr(195), # capital A, tilde
- Auml => chr(196), # capital A, dieresis or umlaut mark
- Ccedil => chr(199), # capital C, cedilla
- ETH => chr(208), # capital Eth, Icelandic
- Eacute => chr(201), # capital E, acute accent
- Ecirc => chr(202), # capital E, circumflex accent
- Egrave => chr(200), # capital E, grave accent
- Euml => chr(203), # capital E, dieresis or umlaut mark
- Iacute => chr(205), # capital I, acute accent
- Icirc => chr(206), # capital I, circumflex accent
- Igrave => chr(204), # capital I, grave accent
- Iuml => chr(207), # capital I, dieresis or umlaut mark
- Ntilde => chr(209), # capital N, tilde
- Oacute => chr(211), # capital O, acute accent
- Ocirc => chr(212), # capital O, circumflex accent
- Ograve => chr(210), # capital O, grave accent
- Oslash => chr(216), # capital O, slash
- Otilde => chr(213), # capital O, tilde
- Ouml => chr(214), # capital O, dieresis or umlaut mark
- THORN => chr(222), # capital THORN, Icelandic
- Uacute => chr(218), # capital U, acute accent
- Ucirc => chr(219), # capital U, circumflex accent
- Ugrave => chr(217), # capital U, grave accent
- Uuml => chr(220), # capital U, dieresis or umlaut mark
- Yacute => chr(221), # capital Y, acute accent
- aacute => chr(225), # small a, acute accent
- acirc => chr(226), # small a, circumflex accent
- aelig => chr(230), # small ae diphthong (ligature)
- agrave => chr(224), # small a, grave accent
- aring => chr(229), # small a, ring
- atilde => chr(227), # small a, tilde
- auml => chr(228), # small a, dieresis or umlaut mark
- ccedil => chr(231), # small c, cedilla
- eacute => chr(233), # small e, acute accent
- ecirc => chr(234), # small e, circumflex accent
- egrave => chr(232), # small e, grave accent
- eth => chr(240), # small eth, Icelandic
- euml => chr(235), # small e, dieresis or umlaut mark
- iacute => chr(237), # small i, acute accent
- icirc => chr(238), # small i, circumflex accent
- igrave => chr(236), # small i, grave accent
- iuml => chr(239), # small i, dieresis or umlaut mark
- ntilde => chr(241), # small n, tilde
- oacute => chr(243), # small o, acute accent
- ocirc => chr(244), # small o, circumflex accent
- ograve => chr(242), # small o, grave accent
- oslash => chr(248), # small o, slash
- otilde => chr(245), # small o, tilde
- ouml => chr(246), # small o, dieresis or umlaut mark
- szlig => chr(223), # small sharp s, German (sz ligature)
- thorn => chr(254), # small thorn, Icelandic
- uacute => chr(250), # small u, acute accent
- ucirc => chr(251), # small u, circumflex accent
- ugrave => chr(249), # small u, grave accent
- uuml => chr(252), # small u, dieresis or umlaut mark
- yacute => chr(253), # small y, acute accent
- yuml => chr(255), # small y, dieresis or umlaut mark
-
- # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
- copy => chr(169), # copyright sign
- reg => chr(174), # registered sign
- nbsp => chr(160), # non breaking space
-
- # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
- iexcl => chr(161),
- cent => chr(162),
- pound => chr(163),
- curren => chr(164),
- yen => chr(165),
- brvbar => chr(166),
- sect => chr(167),
- uml => chr(168),
- ordf => chr(170),
- laquo => chr(171),
-'not' => chr(172), # not is a keyword in perl
- shy => chr(173),
- macr => chr(175),
- deg => chr(176),
- plusmn => chr(177),
- sup1 => chr(185),
- sup2 => chr(178),
- sup3 => chr(179),
- acute => chr(180),
- micro => chr(181),
- para => chr(182),
- middot => chr(183),
- cedil => chr(184),
- ordm => chr(186),
- raquo => chr(187),
- frac14 => chr(188),
- frac12 => chr(189),
- frac34 => chr(190),
- iquest => chr(191),
-'times' => chr(215), # times is a keyword in perl
- divide => chr(247),
-
- ( $] > 5.007 ? (
- 'OElig;' => chr(338),
- 'oelig;' => chr(339),
- 'Scaron;' => chr(352),
- 'scaron;' => chr(353),
- 'Yuml;' => chr(376),
- 'fnof;' => chr(402),
- 'circ;' => chr(710),
- 'tilde;' => chr(732),
- 'Alpha;' => chr(913),
- 'Beta;' => chr(914),
- 'Gamma;' => chr(915),
- 'Delta;' => chr(916),
- 'Epsilon;' => chr(917),
- 'Zeta;' => chr(918),
- 'Eta;' => chr(919),
- 'Theta;' => chr(920),
- 'Iota;' => chr(921),
- 'Kappa;' => chr(922),
- 'Lambda;' => chr(923),
- 'Mu;' => chr(924),
- 'Nu;' => chr(925),
- 'Xi;' => chr(926),
- 'Omicron;' => chr(927),
- 'Pi;' => chr(928),
- 'Rho;' => chr(929),
- 'Sigma;' => chr(931),
- 'Tau;' => chr(932),
- 'Upsilon;' => chr(933),
- 'Phi;' => chr(934),
- 'Chi;' => chr(935),
- 'Psi;' => chr(936),
- 'Omega;' => chr(937),
- 'alpha;' => chr(945),
- 'beta;' => chr(946),
- 'gamma;' => chr(947),
- 'delta;' => chr(948),
- 'epsilon;' => chr(949),
- 'zeta;' => chr(950),
- 'eta;' => chr(951),
- 'theta;' => chr(952),
- 'iota;' => chr(953),
- 'kappa;' => chr(954),
- 'lambda;' => chr(955),
- 'mu;' => chr(956),
- 'nu;' => chr(957),
- 'xi;' => chr(958),
- 'omicron;' => chr(959),
- 'pi;' => chr(960),
- 'rho;' => chr(961),
- 'sigmaf;' => chr(962),
- 'sigma;' => chr(963),
- 'tau;' => chr(964),
- 'upsilon;' => chr(965),
- 'phi;' => chr(966),
- 'chi;' => chr(967),
- 'psi;' => chr(968),
- 'omega;' => chr(969),
- 'thetasym;' => chr(977),
- 'upsih;' => chr(978),
- 'piv;' => chr(982),
- 'ensp;' => chr(8194),
- 'emsp;' => chr(8195),
- 'thinsp;' => chr(8201),
- 'zwnj;' => chr(8204),
- 'zwj;' => chr(8205),
- 'lrm;' => chr(8206),
- 'rlm;' => chr(8207),
- 'ndash;' => chr(8211),
- 'mdash;' => chr(8212),
- 'lsquo;' => chr(8216),
- 'rsquo;' => chr(8217),
- 'sbquo;' => chr(8218),
- 'ldquo;' => chr(8220),
- 'rdquo;' => chr(8221),
- 'bdquo;' => chr(8222),
- 'dagger;' => chr(8224),
- 'Dagger;' => chr(8225),
- 'bull;' => chr(8226),
- 'hellip;' => chr(8230),
- 'permil;' => chr(8240),
- 'prime;' => chr(8242),
- 'Prime;' => chr(8243),
- 'lsaquo;' => chr(8249),
- 'rsaquo;' => chr(8250),
- 'oline;' => chr(8254),
- 'frasl;' => chr(8260),
- 'euro;' => chr(8364),
- 'image;' => chr(8465),
- 'weierp;' => chr(8472),
- 'real;' => chr(8476),
- 'trade;' => chr(8482),
- 'alefsym;' => chr(8501),
- 'larr;' => chr(8592),
- 'uarr;' => chr(8593),
- 'rarr;' => chr(8594),
- 'darr;' => chr(8595),
- 'harr;' => chr(8596),
- 'crarr;' => chr(8629),
- 'lArr;' => chr(8656),
- 'uArr;' => chr(8657),
- 'rArr;' => chr(8658),
- 'dArr;' => chr(8659),
- 'hArr;' => chr(8660),
- 'forall;' => chr(8704),
- 'part;' => chr(8706),
- 'exist;' => chr(8707),
- 'empty;' => chr(8709),
- 'nabla;' => chr(8711),
- 'isin;' => chr(8712),
- 'notin;' => chr(8713),
- 'ni;' => chr(8715),
- 'prod;' => chr(8719),
- 'sum;' => chr(8721),
- 'minus;' => chr(8722),
- 'lowast;' => chr(8727),
- 'radic;' => chr(8730),
- 'prop;' => chr(8733),
- 'infin;' => chr(8734),
- 'ang;' => chr(8736),
- 'and;' => chr(8743),
- 'or;' => chr(8744),
- 'cap;' => chr(8745),
- 'cup;' => chr(8746),
- 'int;' => chr(8747),
- 'there4;' => chr(8756),
- 'sim;' => chr(8764),
- 'cong;' => chr(8773),
- 'asymp;' => chr(8776),
- 'ne;' => chr(8800),
- 'equiv;' => chr(8801),
- 'le;' => chr(8804),
- 'ge;' => chr(8805),
- 'sub;' => chr(8834),
- 'sup;' => chr(8835),
- 'nsub;' => chr(8836),
- 'sube;' => chr(8838),
- 'supe;' => chr(8839),
- 'oplus;' => chr(8853),
- 'otimes;' => chr(8855),
- 'perp;' => chr(8869),
- 'sdot;' => chr(8901),
- 'lceil;' => chr(8968),
- 'rceil;' => chr(8969),
- 'lfloor;' => chr(8970),
- 'rfloor;' => chr(8971),
- 'lang;' => chr(9001),
- 'rang;' => chr(9002),
- 'loz;' => chr(9674),
- 'spades;' => chr(9824),
- 'clubs;' => chr(9827),
- 'hearts;' => chr(9829),
- 'diams;' => chr(9830),
- ) : ())
-);
-
-
-# Make the opposite mapping
-while (my($entity, $char) = each(%entity2char)) {
- $entity =~ s/;\z//;
- $char2entity{$char} = "&$entity;";
-}
-delete $char2entity{"'"}; # only one-way decoding
-
-# Fill in missing entities
-for (0 .. 255) {
- next if exists $char2entity{chr($_)};
- $char2entity{chr($_)} = "$_;";
-}
-
-my %subst; # compiled encoding regexps
-
-sub encode_entities
-{
- return undef unless defined $_[0];
- my $ref;
- if (defined wantarray) {
- my $x = $_[0];
- $ref = \$x; # copy
- } else {
- $ref = \$_[0]; # modify in-place
- }
- if (defined $_[1] and length $_[1]) {
- unless (exists $subst{$_[1]}) {
- # Because we can't compile regex we fake it with a cached sub
- my $chars = $_[1];
- $chars =~ s,(?', ''' and '"'
- $$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge;
- }
- $$ref;
-}
-
-sub encode_entities_numeric {
- local %char2entity;
- return &encode_entities; # a goto &encode_entities wouldn't work
-}
-
-
-sub num_entity {
- sprintf "%X;", ord($_[0]);
-}
-
-# Set up aliases
-*encode = \&encode_entities;
-*encode_numeric = \&encode_entities_numeric;
-*encode_numerically = \&encode_entities_numeric;
-*decode = \&decode_entities;
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTML/HeadParser.pm b/software/Slic3r-1.3.0.64bit/lib/HTML/HeadParser.pm
deleted file mode 100644
index 0993f2aa..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTML/HeadParser.pm
+++ /dev/null
@@ -1,184 +0,0 @@
-#line 1 "HTML/HeadParser.pm"
-package HTML::HeadParser;
-
-#line 84
-
-
-require HTML::Parser;
-@ISA = qw(HTML::Parser);
-
-use HTML::Entities ();
-
-use strict;
-use vars qw($VERSION $DEBUG);
-#$DEBUG = 1;
-$VERSION = "3.71";
-
-#line 109
-
-sub new
-{
- my($class, $header) = @_;
- unless ($header) {
- require HTTP::Headers;
- $header = HTTP::Headers->new;
- }
-
- my $self = $class->SUPER::new(api_version => 3,
- start_h => ["start", "self,tagname,attr"],
- end_h => ["end", "self,tagname"],
- text_h => ["text", "self,text"],
- ignore_elements => [qw(script style)],
- );
- $self->{'header'} = $header;
- $self->{'tag'} = ''; # name of active element that takes textual content
- $self->{'text'} = ''; # the accumulated text associated with the element
- $self;
-}
-
-#line 140
-
-sub header
-{
- my $self = shift;
- return $self->{'header'} unless @_;
- $self->{'header'}->header(@_);
-}
-
-sub as_string # legacy
-{
- my $self = shift;
- $self->{'header'}->as_string;
-}
-
-sub flush_text # internal
-{
- my $self = shift;
- my $tag = $self->{'tag'};
- my $text = $self->{'text'};
- $text =~ s/^\s+//;
- $text =~ s/\s+$//;
- $text =~ s/\s+/ /g;
- print "FLUSH $tag => '$text'\n" if $DEBUG;
- if ($tag eq 'title') {
- my $decoded;
- $decoded = utf8::decode($text) if $self->utf8_mode && defined &utf8::decode;
- HTML::Entities::decode($text);
- utf8::encode($text) if $decoded;
- $self->{'header'}->push_header(Title => $text);
- }
- $self->{'tag'} = $self->{'text'} = '';
-}
-
-# This is an quote from the HTML3.2 DTD which shows which elements
-# that might be present in a .... Also note that the
-# tags themselves might be missing:
-#
-#
-#
-#
-#
-# From HTML 4.01:
-#
-#
-#
-#
-#
-# From HTML 5 as of WD-html5-20090825:
-#
-# One or more elements of metadata content, [...]
-# => base, command, link, meta, noscript, script, style, title
-
-sub start
-{
- my($self, $tag, $attr) = @_; # $attr is reference to a HASH
- print "START[$tag]\n" if $DEBUG;
- $self->flush_text if $self->{'tag'};
- if ($tag eq 'meta') {
- my $key = $attr->{'http-equiv'};
- if (!defined($key) || !length($key)) {
- if ($attr->{name}) {
- $key = "X-Meta-\u$attr->{name}";
- } elsif ($attr->{charset}) { # HTML 5
- $key = "X-Meta-Charset";
- $self->{header}->push_header($key => $attr->{charset});
- return;
- } else {
- return;
- }
- }
- $key =~ s/:/-/g;
- $self->{'header'}->push_header($key => $attr->{content});
- } elsif ($tag eq 'base') {
- return unless exists $attr->{href};
- (my $base = $attr->{href}) =~ s/^\s+//; $base =~ s/\s+$//; # HTML5
- $self->{'header'}->push_header('Content-Base' => $base);
- } elsif ($tag eq 'isindex') {
- # This is a non-standard header. Perhaps we should just ignore
- # this element
- $self->{'header'}->push_header(Isindex => $attr->{prompt} || '?');
- } elsif ($tag =~ /^(?:title|noscript|object|command)$/) {
- # Just remember tag. Initialize header when we see the end tag.
- $self->{'tag'} = $tag;
- } elsif ($tag eq 'link') {
- return unless exists $attr->{href};
- #
- my $href = delete($attr->{href});
- $href =~ s/^\s+//; $href =~ s/\s+$//; # HTML5
- my $h_val = "<$href>";
- for (sort keys %{$attr}) {
- next if $_ eq "/"; # XHTML junk
- $h_val .= qq(; $_="$attr->{$_}");
- }
- $self->{'header'}->push_header(Link => $h_val);
- } elsif ($tag eq 'head' || $tag eq 'html') {
- # ignore
- } else {
- # stop parsing
- $self->eof;
- }
-}
-
-sub end
-{
- my($self, $tag) = @_;
- print "END[$tag]\n" if $DEBUG;
- $self->flush_text if $self->{'tag'};
- $self->eof if $tag eq 'head';
-}
-
-sub text
-{
- my($self, $text) = @_;
- print "TEXT[$text]\n" if $DEBUG;
- unless ($self->{first_chunk}) {
- # drop Unicode BOM if found
- if ($self->utf8_mode) {
- $text =~ s/^\xEF\xBB\xBF//;
- }
- else {
- $text =~ s/^\x{FEFF}//;
- }
- $self->{first_chunk}++;
- }
- my $tag = $self->{tag};
- if (!$tag && $text =~ /\S/) {
- # Normal text means start of body
- $self->eof;
- return;
- }
- return if $tag ne 'title';
- $self->{'text'} .= $text;
-}
-
-BEGIN {
- *utf8_mode = sub { 1 } unless HTML::Entities::UNICODE_SUPPORT;
-}
-
-1;
-
-__END__
-
-#line 315
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTML/Parser.pm b/software/Slic3r-1.3.0.64bit/lib/HTML/Parser.pm
deleted file mode 100644
index 47c831c1..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTML/Parser.pm
+++ /dev/null
@@ -1,128 +0,0 @@
-#line 1 "HTML/Parser.pm"
-package HTML::Parser;
-
-use strict;
-use vars qw($VERSION @ISA);
-
-$VERSION = "3.72";
-
-require HTML::Entities;
-
-require XSLoader;
-XSLoader::load('HTML::Parser', $VERSION);
-
-sub new
-{
- my $class = shift;
- my $self = bless {}, $class;
- return $self->init(@_);
-}
-
-
-sub init
-{
- my $self = shift;
- $self->_alloc_pstate;
-
- my %arg = @_;
- my $api_version = delete $arg{api_version} || (@_ ? 3 : 2);
- if ($api_version >= 4) {
- require Carp;
- Carp::croak("API version $api_version not supported " .
- "by HTML::Parser $VERSION");
- }
-
- if ($api_version < 3) {
- # Set up method callbacks compatible with HTML-Parser-2.xx
- $self->handler(text => "text", "self,text,is_cdata");
- $self->handler(end => "end", "self,tagname,text");
- $self->handler(process => "process", "self,token0,text");
- $self->handler(start => "start",
- "self,tagname,attr,attrseq,text");
-
- $self->handler(comment =>
- sub {
- my($self, $tokens) = @_;
- for (@$tokens) {
- $self->comment($_);
- }
- }, "self,tokens");
-
- $self->handler(declaration =>
- sub {
- my $self = shift;
- $self->declaration(substr($_[0], 2, -1));
- }, "self,text");
- }
-
- if (my $h = delete $arg{handlers}) {
- $h = {@$h} if ref($h) eq "ARRAY";
- while (my($event, $cb) = each %$h) {
- $self->handler($event => @$cb);
- }
- }
-
- # In the end we try to assume plain attribute or handler
- while (my($option, $val) = each %arg) {
- if ($option =~ /^(\w+)_h$/) {
- $self->handler($1 => @$val);
- }
- elsif ($option =~ /^(text|start|end|process|declaration|comment)$/) {
- require Carp;
- Carp::croak("Bad constructor option '$option'");
- }
- else {
- $self->$option($val);
- }
- }
-
- return $self;
-}
-
-
-sub parse_file
-{
- my($self, $file) = @_;
- my $opened;
- if (!ref($file) && ref(\$file) ne "GLOB") {
- # Assume $file is a filename
- local(*F);
- open(F, "<", $file) || return undef;
- binmode(F); # should we? good for byte counts
- $opened++;
- $file = *F;
- }
- my $chunk = '';
- while (read($file, $chunk, 512)) {
- $self->parse($chunk) || last;
- }
- close($file) if $opened;
- $self->eof;
-}
-
-
-sub netscape_buggy_comment # legacy
-{
- my $self = shift;
- require Carp;
- Carp::carp("netscape_buggy_comment() is deprecated. " .
- "Please use the strict_comment() method instead");
- my $old = !$self->strict_comment;
- $self->strict_comment(!shift) if @_;
- return $old;
-}
-
-# set up method stubs
-sub text { }
-*start = \&text;
-*end = \&text;
-*comment = \&text;
-*declaration = \&text;
-*process = \&text;
-
-1;
-
-__END__
-
-
-#line 1235
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Config.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Config.pm
deleted file mode 100644
index de8188df..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Config.pm
+++ /dev/null
@@ -1,241 +0,0 @@
-#line 1 "HTTP/Config.pm"
-package HTTP::Config;
-
-use strict;
-use warnings;
-
-use URI;
-
-our $VERSION = "6.11";
-
-sub new {
- my $class = shift;
- return bless [], $class;
-}
-
-sub entries {
- my $self = shift;
- @$self;
-}
-
-sub empty {
- my $self = shift;
- not @$self;
-}
-
-sub add {
- if (@_ == 2) {
- my $self = shift;
- push(@$self, shift);
- return;
- }
- my($self, %spec) = @_;
- push(@$self, \%spec);
- return;
-}
-
-sub find2 {
- my($self, %spec) = @_;
- my @found;
- my @rest;
- ITEM:
- for my $item (@$self) {
- for my $k (keys %spec) {
- no warnings 'uninitialized';
- if (!exists $item->{$k} || $spec{$k} ne $item->{$k}) {
- push(@rest, $item);
- next ITEM;
- }
- }
- push(@found, $item);
- }
- return \@found unless wantarray;
- return \@found, \@rest;
-}
-
-sub find {
- my $self = shift;
- my $f = $self->find2(@_);
- return @$f if wantarray;
- return $f->[0];
-}
-
-sub remove {
- my($self, %spec) = @_;
- my($removed, $rest) = $self->find2(%spec);
- @$self = @$rest if @$removed;
- return @$removed;
-}
-
-my %MATCH = (
- m_scheme => sub {
- my($v, $uri) = @_;
- return $uri->_scheme eq $v; # URI known to be canonical
- },
- m_secure => sub {
- my($v, $uri) = @_;
- my $secure = $uri->can("secure") ? $uri->secure : $uri->_scheme eq "https";
- return $secure == !!$v;
- },
- m_host_port => sub {
- my($v, $uri) = @_;
- return unless $uri->can("host_port");
- return $uri->host_port eq $v, 7;
- },
- m_host => sub {
- my($v, $uri) = @_;
- return unless $uri->can("host");
- return $uri->host eq $v, 6;
- },
- m_port => sub {
- my($v, $uri) = @_;
- return unless $uri->can("port");
- return $uri->port eq $v;
- },
- m_domain => sub {
- my($v, $uri) = @_;
- return unless $uri->can("host");
- my $h = $uri->host;
- $h = "$h.local" unless $h =~ /\./;
- $v = ".$v" unless $v =~ /^\./;
- return length($v), 5 if substr($h, -length($v)) eq $v;
- return 0;
- },
- m_path => sub {
- my($v, $uri) = @_;
- return unless $uri->can("path");
- return $uri->path eq $v, 4;
- },
- m_path_prefix => sub {
- my($v, $uri) = @_;
- return unless $uri->can("path");
- my $path = $uri->path;
- my $len = length($v);
- return $len, 3 if $path eq $v;
- return 0 if length($path) <= $len;
- $v .= "/" unless $v =~ m,/\z,,;
- return $len, 3 if substr($path, 0, length($v)) eq $v;
- return 0;
- },
- m_path_match => sub {
- my($v, $uri) = @_;
- return unless $uri->can("path");
- return $uri->path =~ $v;
- },
- m_uri__ => sub {
- my($v, $k, $uri) = @_;
- return unless $uri->can($k);
- return 1 unless defined $v;
- return $uri->$k eq $v;
- },
- m_method => sub {
- my($v, $uri, $request) = @_;
- return $request && $request->method eq $v;
- },
- m_proxy => sub {
- my($v, $uri, $request) = @_;
- return $request && ($request->{proxy} || "") eq $v;
- },
- m_code => sub {
- my($v, $uri, $request, $response) = @_;
- $v =~ s/xx\z//;
- return unless $response;
- return length($v), 2 if substr($response->code, 0, length($v)) eq $v;
- },
- m_media_type => sub { # for request too??
- my($v, $uri, $request, $response) = @_;
- return unless $response;
- return 1, 1 if $v eq "*/*";
- my $ct = $response->content_type;
- return 2, 1 if $v =~ s,/\*\z,, && $ct =~ m,^\Q$v\E/,;
- return 3, 1 if $v eq "html" && $response->content_is_html;
- return 4, 1 if $v eq "xhtml" && $response->content_is_xhtml;
- return 10, 1 if $v eq $ct;
- return 0;
- },
- m_header__ => sub {
- my($v, $k, $uri, $request, $response) = @_;
- return unless $request;
- return 1 if $request->header($k) eq $v;
- return 1 if $response && $response->header($k) eq $v;
- return 0;
- },
- m_response_attr__ => sub {
- my($v, $k, $uri, $request, $response) = @_;
- return unless $response;
- return 1 if !defined($v) && exists $response->{$k};
- return 0 unless exists $response->{$k};
- return 1 if $response->{$k} eq $v;
- return 0;
- },
-);
-
-sub matching {
- my $self = shift;
- if (@_ == 1) {
- if ($_[0]->can("request")) {
- unshift(@_, $_[0]->request);
- unshift(@_, undef) unless defined $_[0];
- }
- unshift(@_, $_[0]->uri_canonical) if $_[0] && $_[0]->can("uri_canonical");
- }
- my($uri, $request, $response) = @_;
- $uri = URI->new($uri) unless ref($uri);
-
- my @m;
- ITEM:
- for my $item (@$self) {
- my $order;
- for my $ikey (keys %$item) {
- my $mkey = $ikey;
- my $k;
- $k = $1 if $mkey =~ s/__(.*)/__/;
- if (my $m = $MATCH{$mkey}) {
- #print "$ikey $mkey\n";
- my($c, $o);
- my @arg = (
- defined($k) ? $k : (),
- $uri, $request, $response
- );
- my $v = $item->{$ikey};
- $v = [$v] unless ref($v) eq "ARRAY";
- for (@$v) {
- ($c, $o) = $m->($_, @arg);
- #print " - $_ ==> $c $o\n";
- last if $c;
- }
- next ITEM unless $c;
- $order->[$o || 0] += $c;
- }
- }
- $order->[7] ||= 0;
- $item->{_order} = join(".", reverse map sprintf("%03d", $_ || 0), @$order);
- push(@m, $item);
- }
- @m = sort { $b->{_order} cmp $a->{_order} } @m;
- delete $_->{_order} for @m;
- return @m if wantarray;
- return $m[0];
-}
-
-sub add_item {
- my $self = shift;
- my $item = shift;
- return $self->add(item => $item, @_);
-}
-
-sub remove_items {
- my $self = shift;
- return map $_->{item}, $self->remove(@_);
-}
-
-sub matching_items {
- my $self = shift;
- return map $_->{item}, $self->matching(@_);
-}
-
-1;
-
-__END__
-
-#line 439
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies.pm
deleted file mode 100644
index 3a80953c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies.pm
+++ /dev/null
@@ -1,606 +0,0 @@
-#line 1 "HTTP/Cookies.pm"
-package HTTP::Cookies;
-
-use strict;
-use HTTP::Date qw(str2time parse_date time2str);
-use HTTP::Headers::Util qw(_split_header_words join_header_words);
-
-use vars qw($VERSION $EPOCH_OFFSET);
-$VERSION = "6.01";
-
-# Legacy: because "use "HTTP::Cookies" used be the ONLY way
-# to load the class HTTP::Cookies::Netscape.
-require HTTP::Cookies::Netscape;
-
-$EPOCH_OFFSET = 0; # difference from Unix epoch
-if ($^O eq "MacOS") {
- require Time::Local;
- $EPOCH_OFFSET = Time::Local::timelocal(0,0,0,1,0,70);
-}
-
-# A HTTP::Cookies object is a hash. The main attribute is the
-# COOKIES 3 level hash: $self->{COOKIES}{$domain}{$path}{$key}.
-
-sub new
-{
- my $class = shift;
- my $self = bless {
- COOKIES => {},
- }, $class;
- my %cnf = @_;
- for (keys %cnf) {
- $self->{lc($_)} = $cnf{$_};
- }
- $self->load;
- $self;
-}
-
-
-sub add_cookie_header
-{
- my $self = shift;
- my $request = shift || return;
- my $url = $request->uri;
- my $scheme = $url->scheme;
- unless ($scheme =~ /^https?\z/) {
- return;
- }
-
- my $domain = _host($request, $url);
- $domain = "$domain.local" unless $domain =~ /\./;
- my $secure_request = ($scheme eq "https");
- my $req_path = _url_path($url);
- my $req_port = $url->port;
- my $now = time();
- _normalize_path($req_path) if $req_path =~ /%/;
-
- my @cval; # cookie values for the "Cookie" header
- my $set_ver;
- my $netscape_only = 0; # An exact domain match applies to any cookie
-
- while ($domain =~ /\./) {
- # Checking $domain for cookies"
- my $cookies = $self->{COOKIES}{$domain};
- next unless $cookies;
- if ($self->{delayload} && defined($cookies->{'//+delayload'})) {
- my $cookie_data = $cookies->{'//+delayload'}{'cookie'};
- delete $self->{COOKIES}{$domain};
- $self->load_cookie($cookie_data->[1]);
- $cookies = $self->{COOKIES}{$domain};
- next unless $cookies; # should not really happen
- }
-
- # Want to add cookies corresponding to the most specific paths
- # first (i.e. longest path first)
- my $path;
- for $path (sort {length($b) <=> length($a) } keys %$cookies) {
- if (index($req_path, $path) != 0) {
- next;
- }
-
- my($key,$array);
- while (($key,$array) = each %{$cookies->{$path}}) {
- my($version,$val,$port,$path_spec,$secure,$expires) = @$array;
- if ($secure && !$secure_request) {
- next;
- }
- if ($expires && $expires < $now) {
- next;
- }
- if ($port) {
- my $found;
- if ($port =~ s/^_//) {
- # The corresponding Set-Cookie attribute was empty
- $found++ if $port eq $req_port;
- $port = "";
- }
- else {
- my $p;
- for $p (split(/,/, $port)) {
- $found++, last if $p eq $req_port;
- }
- }
- unless ($found) {
- next;
- }
- }
- if ($version > 0 && $netscape_only) {
- next;
- }
-
- # set version number of cookie header.
- # XXX: What should it be if multiple matching
- # Set-Cookie headers have different versions themselves
- if (!$set_ver++) {
- if ($version >= 1) {
- push(@cval, "\$Version=$version");
- }
- elsif (!$self->{hide_cookie2}) {
- $request->header(Cookie2 => '$Version="1"');
- }
- }
-
- # do we need to quote the value
- if ($val =~ /\W/ && $version) {
- $val =~ s/([\\\"])/\\$1/g;
- $val = qq("$val");
- }
-
- # and finally remember this cookie
- push(@cval, "$key=$val");
- if ($version >= 1) {
- push(@cval, qq(\$Path="$path")) if $path_spec;
- push(@cval, qq(\$Domain="$domain")) if $domain =~ /^\./;
- if (defined $port) {
- my $p = '$Port';
- $p .= qq(="$port") if length $port;
- push(@cval, $p);
- }
- }
-
- }
- }
-
- } continue {
- # Try with a more general domain, alternately stripping
- # leading name components and leading dots. When this
- # results in a domain with no leading dot, it is for
- # Netscape cookie compatibility only:
- #
- # a.b.c.net Any cookie
- # .b.c.net Any cookie
- # b.c.net Netscape cookie only
- # .c.net Any cookie
-
- if ($domain =~ s/^\.+//) {
- $netscape_only = 1;
- }
- else {
- $domain =~ s/[^.]*//;
- $netscape_only = 0;
- }
- }
-
- if (@cval) {
- if (my $old = $request->header("Cookie")) {
- unshift(@cval, $old);
- }
- $request->header(Cookie => join("; ", @cval));
- }
-
- $request;
-}
-
-
-sub extract_cookies
-{
- my $self = shift;
- my $response = shift || return;
-
- my @set = _split_header_words($response->_header("Set-Cookie2"));
- my @ns_set = $response->_header("Set-Cookie");
-
- return $response unless @set || @ns_set; # quick exit
-
- my $request = $response->request;
- my $url = $request->uri;
- my $req_host = _host($request, $url);
- $req_host = "$req_host.local" unless $req_host =~ /\./;
- my $req_port = $url->port;
- my $req_path = _url_path($url);
- _normalize_path($req_path) if $req_path =~ /%/;
-
- if (@ns_set) {
- # The old Netscape cookie format for Set-Cookie
- # http://curl.haxx.se/rfc/cookie_spec.html
- # can for instance contain an unquoted "," in the expires
- # field, so we have to use this ad-hoc parser.
- my $now = time();
-
- # Build a hash of cookies that was present in Set-Cookie2
- # headers. We need to skip them if we also find them in a
- # Set-Cookie header.
- my %in_set2;
- for (@set) {
- $in_set2{$_->[0]}++;
- }
-
- my $set;
- for $set (@ns_set) {
- $set =~ s/^\s+//;
- my @cur;
- my $param;
- my $expires;
- my $first_param = 1;
- for $param (split(/;\s*/, $set)) {
- next unless length($param);
- my($k,$v) = split(/\s*=\s*/, $param, 2);
- if (defined $v) {
- $v =~ s/\s+$//;
- #print "$k => $v\n";
- }
- else {
- $k =~ s/\s+$//;
- #print "$k => undef";
- }
- if (!$first_param && lc($k) eq "expires") {
- my $etime = str2time($v);
- if (defined $etime) {
- push(@cur, "Max-Age" => $etime - $now);
- $expires++;
- }
- else {
- # parse_date can deal with years outside the range of time_t,
- my($year, $mon, $day, $hour, $min, $sec, $tz) = parse_date($v);
- if ($year) {
- my $thisyear = (gmtime)[5] + 1900;
- if ($year < $thisyear) {
- push(@cur, "Max-Age" => -1); # any negative value will do
- $expires++;
- }
- elsif ($year >= $thisyear + 10) {
- # the date is at least 10 years into the future, just replace
- # it with something approximate
- push(@cur, "Max-Age" => 10 * 365 * 24 * 60 * 60);
- $expires++;
- }
- }
- }
- }
- elsif (!$first_param && lc($k) =~ /^(?:version|discard|ns-cookie)/) {
- # ignore
- }
- else {
- push(@cur, $k => $v);
- }
- $first_param = 0;
- }
- next unless @cur;
- next if $in_set2{$cur[0]};
-
-# push(@cur, "Port" => $req_port);
- push(@cur, "Discard" => undef) unless $expires;
- push(@cur, "Version" => 0);
- push(@cur, "ns-cookie" => 1);
- push(@set, \@cur);
- }
- }
-
- SET_COOKIE:
- for my $set (@set) {
- next unless @$set >= 2;
-
- my $key = shift @$set;
- my $val = shift @$set;
-
- my %hash;
- while (@$set) {
- my $k = shift @$set;
- my $v = shift @$set;
- my $lc = lc($k);
- # don't loose case distinction for unknown fields
- $k = $lc if $lc =~ /^(?:discard|domain|max-age|
- path|port|secure|version)$/x;
- if ($k eq "discard" || $k eq "secure") {
- $v = 1 unless defined $v;
- }
- next if exists $hash{$k}; # only first value is significant
- $hash{$k} = $v;
- };
-
- my %orig_hash = %hash;
- my $version = delete $hash{version};
- $version = 1 unless defined($version);
- my $discard = delete $hash{discard};
- my $secure = delete $hash{secure};
- my $maxage = delete $hash{'max-age'};
- my $ns_cookie = delete $hash{'ns-cookie'};
-
- # Check domain
- my $domain = delete $hash{domain};
- $domain = lc($domain) if defined $domain;
- if (defined($domain)
- && $domain ne $req_host && $domain ne ".$req_host") {
- if ($domain !~ /\./ && $domain ne "local") {
- next SET_COOKIE;
- }
- $domain = ".$domain" unless $domain =~ /^\./;
- if ($domain =~ /\.\d+$/) {
- next SET_COOKIE;
- }
- my $len = length($domain);
- unless (substr($req_host, -$len) eq $domain) {
- next SET_COOKIE;
- }
- my $hostpre = substr($req_host, 0, length($req_host) - $len);
- if ($hostpre =~ /\./ && !$ns_cookie) {
- next SET_COOKIE;
- }
- }
- else {
- $domain = $req_host;
- }
-
- my $path = delete $hash{path};
- my $path_spec;
- if (defined $path && $path ne '') {
- $path_spec++;
- _normalize_path($path) if $path =~ /%/;
- if (!$ns_cookie &&
- substr($req_path, 0, length($path)) ne $path) {
- next SET_COOKIE;
- }
- }
- else {
- $path = $req_path;
- $path =~ s,/[^/]*$,,;
- $path = "/" unless length($path);
- }
-
- my $port;
- if (exists $hash{port}) {
- $port = delete $hash{port};
- if (defined $port) {
- $port =~ s/\s+//g;
- my $found;
- for my $p (split(/,/, $port)) {
- unless ($p =~ /^\d+$/) {
- next SET_COOKIE;
- }
- $found++ if $p eq $req_port;
- }
- unless ($found) {
- next SET_COOKIE;
- }
- }
- else {
- $port = "_$req_port";
- }
- }
- $self->set_cookie($version,$key,$val,$path,$domain,$port,$path_spec,$secure,$maxage,$discard, \%hash)
- if $self->set_cookie_ok(\%orig_hash);
- }
-
- $response;
-}
-
-sub set_cookie_ok
-{
- 1;
-}
-
-
-sub set_cookie
-{
- my $self = shift;
- my($version,
- $key, $val, $path, $domain, $port,
- $path_spec, $secure, $maxage, $discard, $rest) = @_;
-
- # path and key can not be empty (key can't start with '$')
- return $self if !defined($path) || $path !~ m,^/, ||
- !defined($key) || $key =~ m,^\$,;
-
- # ensure legal port
- if (defined $port) {
- return $self unless $port =~ /^_?\d+(?:,\d+)*$/;
- }
-
- my $expires;
- if (defined $maxage) {
- if ($maxage <= 0) {
- delete $self->{COOKIES}{$domain}{$path}{$key};
- return $self;
- }
- $expires = time() + $maxage;
- }
- $version = 0 unless defined $version;
-
- my @array = ($version, $val,$port,
- $path_spec,
- $secure, $expires, $discard);
- push(@array, {%$rest}) if defined($rest) && %$rest;
- # trim off undefined values at end
- pop(@array) while !defined $array[-1];
-
- $self->{COOKIES}{$domain}{$path}{$key} = \@array;
- $self;
-}
-
-
-sub save
-{
- my $self = shift;
- my $file = shift || $self->{'file'} || return;
- local(*FILE);
- open(FILE, ">$file") or die "Can't open $file: $!";
- print FILE "#LWP-Cookies-1.0\n";
- print FILE $self->as_string(!$self->{ignore_discard});
- close(FILE);
- 1;
-}
-
-
-sub load
-{
- my $self = shift;
- my $file = shift || $self->{'file'} || return;
- local(*FILE, $_);
- local $/ = "\n"; # make sure we got standard record separator
- open(FILE, $file) or return;
- my $magic = ;
- unless ($magic =~ /^\#LWP-Cookies-(\d+\.\d+)/) {
- warn "$file does not seem to contain cookies";
- return;
- }
- while () {
- next unless s/^Set-Cookie3:\s*//;
- chomp;
- my $cookie;
- for $cookie (_split_header_words($_)) {
- my($key,$val) = splice(@$cookie, 0, 2);
- my %hash;
- while (@$cookie) {
- my $k = shift @$cookie;
- my $v = shift @$cookie;
- $hash{$k} = $v;
- }
- my $version = delete $hash{version};
- my $path = delete $hash{path};
- my $domain = delete $hash{domain};
- my $port = delete $hash{port};
- my $expires = str2time(delete $hash{expires});
-
- my $path_spec = exists $hash{path_spec}; delete $hash{path_spec};
- my $secure = exists $hash{secure}; delete $hash{secure};
- my $discard = exists $hash{discard}; delete $hash{discard};
-
- my @array = ($version,$val,$port,
- $path_spec,$secure,$expires,$discard);
- push(@array, \%hash) if %hash;
- $self->{COOKIES}{$domain}{$path}{$key} = \@array;
- }
- }
- close(FILE);
- 1;
-}
-
-
-sub revert
-{
- my $self = shift;
- $self->clear->load;
- $self;
-}
-
-
-sub clear
-{
- my $self = shift;
- if (@_ == 0) {
- $self->{COOKIES} = {};
- }
- elsif (@_ == 1) {
- delete $self->{COOKIES}{$_[0]};
- }
- elsif (@_ == 2) {
- delete $self->{COOKIES}{$_[0]}{$_[1]};
- }
- elsif (@_ == 3) {
- delete $self->{COOKIES}{$_[0]}{$_[1]}{$_[2]};
- }
- else {
- require Carp;
- Carp::carp('Usage: $c->clear([domain [,path [,key]]])');
- }
- $self;
-}
-
-
-sub clear_temporary_cookies
-{
- my($self) = @_;
-
- $self->scan(sub {
- if($_[9] or # "Discard" flag set
- not $_[8]) { # No expire field?
- $_[8] = -1; # Set the expire/max_age field
- $self->set_cookie(@_); # Clear the cookie
- }
- });
-}
-
-
-sub DESTROY
-{
- my $self = shift;
- local($., $@, $!, $^E, $?);
- $self->save if $self->{'autosave'};
-}
-
-
-sub scan
-{
- my($self, $cb) = @_;
- my($domain,$path,$key);
- for $domain (sort keys %{$self->{COOKIES}}) {
- for $path (sort keys %{$self->{COOKIES}{$domain}}) {
- for $key (sort keys %{$self->{COOKIES}{$domain}{$path}}) {
- my($version,$val,$port,$path_spec,
- $secure,$expires,$discard,$rest) =
- @{$self->{COOKIES}{$domain}{$path}{$key}};
- $rest = {} unless defined($rest);
- &$cb($version,$key,$val,$path,$domain,$port,
- $path_spec,$secure,$expires,$discard,$rest);
- }
- }
- }
-}
-
-
-sub as_string
-{
- my($self, $skip_discard) = @_;
- my @res;
- $self->scan(sub {
- my($version,$key,$val,$path,$domain,$port,
- $path_spec,$secure,$expires,$discard,$rest) = @_;
- return if $discard && $skip_discard;
- my @h = ($key, $val);
- push(@h, "path", $path);
- push(@h, "domain" => $domain);
- push(@h, "port" => $port) if defined $port;
- push(@h, "path_spec" => undef) if $path_spec;
- push(@h, "secure" => undef) if $secure;
- push(@h, "expires" => HTTP::Date::time2isoz($expires)) if $expires;
- push(@h, "discard" => undef) if $discard;
- my $k;
- for $k (sort keys %$rest) {
- push(@h, $k, $rest->{$k});
- }
- push(@h, "version" => $version);
- push(@res, "Set-Cookie3: " . join_header_words(\@h));
- });
- join("\n", @res, "");
-}
-
-sub _host
-{
- my($request, $url) = @_;
- if (my $h = $request->header("Host")) {
- $h =~ s/:\d+$//; # might have a port as well
- return lc($h);
- }
- return lc($url->host);
-}
-
-sub _url_path
-{
- my $url = shift;
- my $path;
- if($url->can('epath')) {
- $path = $url->epath; # URI::URL method
- }
- else {
- $path = $url->path; # URI::_generic method
- }
- $path = "/" unless length $path;
- $path;
-}
-
-sub _normalize_path # so that plain string compare can be used
-{
- my $x;
- $_[0] =~ s/%([0-9a-fA-F][0-9a-fA-F])/
- $x = uc($1);
- $x eq "2F" || $x eq "25" ? "%$x" :
- pack("C", hex($x));
- /eg;
- $_[0] =~ s/([\0-\x20\x7f-\xff])/sprintf("%%%02X",ord($1))/eg;
-}
-
-1;
-
-__END__
-
-#line 782
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies/Netscape.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies/Netscape.pm
deleted file mode 100644
index 6643a147..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Cookies/Netscape.pm
+++ /dev/null
@@ -1,74 +0,0 @@
-#line 1 "HTTP/Cookies/Netscape.pm"
-package HTTP::Cookies::Netscape;
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-$VERSION = "6.00";
-
-require HTTP::Cookies;
-@ISA=qw(HTTP::Cookies);
-
-sub load
-{
- my($self, $file) = @_;
- $file ||= $self->{'file'} || return;
- local(*FILE, $_);
- local $/ = "\n"; # make sure we got standard record separator
- my @cookies;
- open(FILE, $file) || return;
- my $magic = ;
- unless ($magic =~ /^\#(?: Netscape)? HTTP Cookie File/) {
- warn "$file does not look like a netscape cookies file" if $^W;
- close(FILE);
- return;
- }
- my $now = time() - $HTTP::Cookies::EPOCH_OFFSET;
- while () {
- next if /^\s*\#/;
- next if /^\s*$/;
- tr/\n\r//d;
- my($domain,$bool1,$path,$secure, $expires,$key,$val) = split(/\t/, $_);
- $secure = ($secure eq "TRUE");
- $self->set_cookie(undef,$key,$val,$path,$domain,undef,
- 0,$secure,$expires-$now, 0);
- }
- close(FILE);
- 1;
-}
-
-sub save
-{
- my($self, $file) = @_;
- $file ||= $self->{'file'} || return;
- local(*FILE, $_);
- open(FILE, ">$file") || return;
-
- # Use old, now broken link to the old cookie spec just in case something
- # else (not us!) requires the comment block exactly this way.
- print FILE <scan(sub {
- my($version,$key,$val,$path,$domain,$port,
- $path_spec,$secure,$expires,$discard,$rest) = @_;
- return if $discard && !$self->{ignore_discard};
- $expires = $expires ? $expires - $HTTP::Cookies::EPOCH_OFFSET : 0;
- return if $now > $expires;
- $secure = $secure ? "TRUE" : "FALSE";
- my $bool = $domain =~ /^\./ ? "TRUE" : "FALSE";
- print FILE join("\t", $domain, $bool, $path, $secure, $expires, $key, $val), "\n";
- });
- close(FILE);
- 1;
-}
-
-1;
-__END__
-
-#line 115
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Date.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Date.pm
deleted file mode 100644
index 6e32be51..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Date.pm
+++ /dev/null
@@ -1,264 +0,0 @@
-#line 1 "HTTP/Date.pm"
-package HTTP::Date;
-
-$VERSION = "6.02";
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(time2str str2time);
-@EXPORT_OK = qw(parse_date time2iso time2isoz);
-
-use strict;
-require Time::Local;
-
-use vars qw(@DoW @MoY %MoY);
-@DoW = qw(Sun Mon Tue Wed Thu Fri Sat);
-@MoY = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
-@MoY{@MoY} = (1..12);
-
-my %GMT_ZONE = (GMT => 1, UTC => 1, UT => 1, Z => 1);
-
-
-sub time2str (;$)
-{
- my $time = shift;
- $time = time unless defined $time;
- my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($time);
- sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
- $DoW[$wday],
- $mday, $MoY[$mon], $year+1900,
- $hour, $min, $sec);
-}
-
-
-sub str2time ($;$)
-{
- my $str = shift;
- return undef unless defined $str;
-
- # fast exit for strictly conforming string
- if ($str =~ /^[SMTWF][a-z][a-z], (\d\d) ([JFMAJSOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$/) {
- return eval {
- my $t = Time::Local::timegm($6, $5, $4, $1, $MoY{$2}-1, $3);
- $t < 0 ? undef : $t;
- };
- }
-
- my @d = parse_date($str);
- return undef unless @d;
- $d[1]--; # month
-
- my $tz = pop(@d);
- unless (defined $tz) {
- unless (defined($tz = shift)) {
- return eval { my $frac = $d[-1]; $frac -= ($d[-1] = int($frac));
- my $t = Time::Local::timelocal(reverse @d) + $frac;
- $t < 0 ? undef : $t;
- };
- }
- }
-
- my $offset = 0;
- if ($GMT_ZONE{uc $tz}) {
- # offset already zero
- }
- elsif ($tz =~ /^([-+])?(\d\d?):?(\d\d)?$/) {
- $offset = 3600 * $2;
- $offset += 60 * $3 if $3;
- $offset *= -1 if $1 && $1 eq '-';
- }
- else {
- eval { require Time::Zone } || return undef;
- $offset = Time::Zone::tz_offset($tz);
- return undef unless defined $offset;
- }
-
- return eval { my $frac = $d[-1]; $frac -= ($d[-1] = int($frac));
- my $t = Time::Local::timegm(reverse @d) + $frac;
- $t < 0 ? undef : $t - $offset;
- };
-}
-
-
-sub parse_date ($)
-{
- local($_) = shift;
- return unless defined;
-
- # More lax parsing below
- s/^\s+//; # kill leading space
- s/^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*//i; # Useless weekday
-
- my($day, $mon, $yr, $hr, $min, $sec, $tz, $ampm);
-
- # Then we are able to check for most of the formats with this regexp
- (($day,$mon,$yr,$hr,$min,$sec,$tz) =
- /^
- (\d\d?) # day
- (?:\s+|[-\/])
- (\w+) # month
- (?:\s+|[-\/])
- (\d+) # year
- (?:
- (?:\s+|:) # separator before clock
- (\d\d?):(\d\d) # hour:min
- (?::(\d\d))? # optional seconds
- )? # optional clock
- \s*
- ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone
- \s*
- (?:\(\w+\)|\w{3,})? # ASCII representation of timezone.
- \s*$
- /x)
-
- ||
-
- # Try the ctime and asctime format
- (($mon, $day, $hr, $min, $sec, $tz, $yr) =
- /^
- (\w{1,3}) # month
- \s+
- (\d\d?) # day
- \s+
- (\d\d?):(\d\d) # hour:min
- (?::(\d\d))? # optional seconds
- \s+
- (?:([A-Za-z]+)\s+)? # optional timezone
- (\d+) # year
- \s*$ # allow trailing whitespace
- /x)
-
- ||
-
- # Then the Unix 'ls -l' date format
- (($mon, $day, $yr, $hr, $min, $sec) =
- /^
- (\w{3}) # month
- \s+
- (\d\d?) # day
- \s+
- (?:
- (\d\d\d\d) | # year
- (\d{1,2}):(\d{2}) # hour:min
- (?::(\d\d))? # optional seconds
- )
- \s*$
- /x)
-
- ||
-
- # ISO 8601 format '1996-02-29 12:00:00 -0100' and variants
- (($yr, $mon, $day, $hr, $min, $sec, $tz) =
- /^
- (\d{4}) # year
- [-\/]?
- (\d\d?) # numerical month
- [-\/]?
- (\d\d?) # day
- (?:
- (?:\s+|[-:Tt]) # separator before clock
- (\d\d?):?(\d\d) # hour:min
- (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional)
- )? # optional clock
- \s*
- ([-+]?\d\d?:?(:?\d\d)?
- |Z|z)? # timezone (Z is "zero meridian", i.e. GMT)
- \s*$
- /x)
-
- ||
-
- # Windows 'dir' 11-12-96 03:52PM
- (($mon, $day, $yr, $hr, $min, $ampm) =
- /^
- (\d{2}) # numerical month
- -
- (\d{2}) # day
- -
- (\d{2}) # year
- \s+
- (\d\d?):(\d\d)([APap][Mm]) # hour:min AM or PM
- \s*$
- /x)
-
- ||
- return; # unrecognized format
-
- # Translate month name to number
- $mon = $MoY{$mon} ||
- $MoY{"\u\L$mon"} ||
- ($mon =~ /^\d\d?$/ && $mon >= 1 && $mon <= 12 && int($mon)) ||
- return;
-
- # If the year is missing, we assume first date before the current,
- # because of the formats we support such dates are mostly present
- # on "ls -l" listings.
- unless (defined $yr) {
- my $cur_mon;
- ($cur_mon, $yr) = (localtime)[4, 5];
- $yr += 1900;
- $cur_mon++;
- $yr-- if $mon > $cur_mon;
- }
- elsif (length($yr) < 3) {
- # Find "obvious" year
- my $cur_yr = (localtime)[5] + 1900;
- my $m = $cur_yr % 100;
- my $tmp = $yr;
- $yr += $cur_yr - $m;
- $m -= $tmp;
- $yr += ($m > 0) ? 100 : -100
- if abs($m) > 50;
- }
-
- # Make sure clock elements are defined
- $hr = 0 unless defined($hr);
- $min = 0 unless defined($min);
- $sec = 0 unless defined($sec);
-
- # Compensate for AM/PM
- if ($ampm) {
- $ampm = uc $ampm;
- $hr = 0 if $hr == 12 && $ampm eq 'AM';
- $hr += 12 if $ampm eq 'PM' && $hr != 12;
- }
-
- return($yr, $mon, $day, $hr, $min, $sec, $tz)
- if wantarray;
-
- if (defined $tz) {
- $tz = "Z" if $tz =~ /^(GMT|UTC?|[-+]?0+)$/;
- }
- else {
- $tz = "";
- }
- return sprintf("%04d-%02d-%02d %02d:%02d:%02d%s",
- $yr, $mon, $day, $hr, $min, $sec, $tz);
-}
-
-
-sub time2iso (;$)
-{
- my $time = shift;
- $time = time unless defined $time;
- my($sec,$min,$hour,$mday,$mon,$year) = localtime($time);
- sprintf("%04d-%02d-%02d %02d:%02d:%02d",
- $year+1900, $mon+1, $mday, $hour, $min, $sec);
-}
-
-
-sub time2isoz (;$)
-{
- my $time = shift;
- $time = time unless defined $time;
- my($sec,$min,$hour,$mday,$mon,$year) = gmtime($time);
- sprintf("%04d-%02d-%02d %02d:%02d:%02dZ",
- $year+1900, $mon+1, $mday, $hour, $min, $sec);
-}
-
-1;
-
-
-__END__
-
-#line 389
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers.pm
deleted file mode 100644
index e444af7d..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers.pm
+++ /dev/null
@@ -1,471 +0,0 @@
-#line 1 "HTTP/Headers.pm"
-package HTTP::Headers;
-
-use strict;
-use warnings;
-
-use Carp ();
-
-our $VERSION = "6.11";
-
-# The $TRANSLATE_UNDERSCORE variable controls whether '_' can be used
-# as a replacement for '-' in header field names.
-our $TRANSLATE_UNDERSCORE = 1 unless defined $TRANSLATE_UNDERSCORE;
-
-# "Good Practice" order of HTTP message headers:
-# - General-Headers
-# - Request-Headers
-# - Response-Headers
-# - Entity-Headers
-
-my @general_headers = qw(
- Cache-Control Connection Date Pragma Trailer Transfer-Encoding Upgrade
- Via Warning
-);
-
-my @request_headers = qw(
- Accept Accept-Charset Accept-Encoding Accept-Language
- Authorization Expect From Host
- If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since
- Max-Forwards Proxy-Authorization Range Referer TE User-Agent
-);
-
-my @response_headers = qw(
- Accept-Ranges Age ETag Location Proxy-Authenticate Retry-After Server
- Vary WWW-Authenticate
-);
-
-my @entity_headers = qw(
- Allow Content-Encoding Content-Language Content-Length Content-Location
- Content-MD5 Content-Range Content-Type Expires Last-Modified
-);
-
-my %entity_header = map { lc($_) => 1 } @entity_headers;
-
-my @header_order = (
- @general_headers,
- @request_headers,
- @response_headers,
- @entity_headers,
-);
-
-# Make alternative representations of @header_order. This is used
-# for sorting and case matching.
-my %header_order;
-my %standard_case;
-
-{
- my $i = 0;
- for (@header_order) {
- my $lc = lc $_;
- $header_order{$lc} = ++$i;
- $standard_case{$lc} = $_;
- }
-}
-
-
-
-sub new
-{
- my($class) = shift;
- my $self = bless {}, $class;
- $self->header(@_) if @_; # set up initial headers
- $self;
-}
-
-
-sub header
-{
- my $self = shift;
- Carp::croak('Usage: $h->header($field, ...)') unless @_;
- my(@old);
- my %seen;
- while (@_) {
- my $field = shift;
- my $op = @_ ? ($seen{lc($field)}++ ? 'PUSH' : 'SET') : 'GET';
- @old = $self->_header($field, shift, $op);
- }
- return @old if wantarray;
- return $old[0] if @old <= 1;
- join(", ", @old);
-}
-
-sub clear
-{
- my $self = shift;
- %$self = ();
-}
-
-
-sub push_header
-{
- my $self = shift;
- return $self->_header(@_, 'PUSH_H') if @_ == 2;
- while (@_) {
- $self->_header(splice(@_, 0, 2), 'PUSH_H');
- }
-}
-
-
-sub init_header
-{
- Carp::croak('Usage: $h->init_header($field, $val)') if @_ != 3;
- shift->_header(@_, 'INIT');
-}
-
-
-sub remove_header
-{
- my($self, @fields) = @_;
- my $field;
- my @values;
- foreach $field (@fields) {
- $field =~ tr/_/-/ if $field !~ /^:/ && $TRANSLATE_UNDERSCORE;
- my $v = delete $self->{lc $field};
- push(@values, ref($v) eq 'ARRAY' ? @$v : $v) if defined $v;
- }
- return @values;
-}
-
-sub remove_content_headers
-{
- my $self = shift;
- unless (defined(wantarray)) {
- # fast branch that does not create return object
- delete @$self{grep $entity_header{$_} || /^content-/, keys %$self};
- return;
- }
-
- my $c = ref($self)->new;
- for my $f (grep $entity_header{$_} || /^content-/, keys %$self) {
- $c->{$f} = delete $self->{$f};
- }
- if (exists $self->{'::std_case'}) {
- $c->{'::std_case'} = $self->{'::std_case'};
- }
- $c;
-}
-
-
-sub _header
-{
- my($self, $field, $val, $op) = @_;
-
- Carp::croak("Illegal field name '$field'")
- if rindex($field, ':') > 1 || !length($field);
-
- unless ($field =~ /^:/) {
- $field =~ tr/_/-/ if $TRANSLATE_UNDERSCORE;
- my $old = $field;
- $field = lc $field;
- unless($standard_case{$field} || $self->{'::std_case'}{$field}) {
- # generate a %std_case entry for this field
- $old =~ s/\b(\w)/\u$1/g;
- $self->{'::std_case'}{$field} = $old;
- }
- }
-
- $op ||= defined($val) ? 'SET' : 'GET';
- if ($op eq 'PUSH_H') {
- # Like PUSH but where we don't care about the return value
- if (exists $self->{$field}) {
- my $h = $self->{$field};
- if (ref($h) eq 'ARRAY') {
- push(@$h, ref($val) eq "ARRAY" ? @$val : $val);
- }
- else {
- $self->{$field} = [$h, ref($val) eq "ARRAY" ? @$val : $val]
- }
- return;
- }
- $self->{$field} = $val;
- return;
- }
-
- my $h = $self->{$field};
- my @old = ref($h) eq 'ARRAY' ? @$h : (defined($h) ? ($h) : ());
-
- unless ($op eq 'GET' || ($op eq 'INIT' && @old)) {
- if (defined($val)) {
- my @new = ($op eq 'PUSH') ? @old : ();
- if (ref($val) ne 'ARRAY') {
- push(@new, $val);
- }
- else {
- push(@new, @$val);
- }
- $self->{$field} = @new > 1 ? \@new : $new[0];
- }
- elsif ($op ne 'PUSH') {
- delete $self->{$field};
- }
- }
- @old;
-}
-
-
-sub _sorted_field_names
-{
- my $self = shift;
- return [ sort {
- ($header_order{$a} || 999) <=> ($header_order{$b} || 999) ||
- $a cmp $b
- } grep !/^::/, keys %$self ];
-}
-
-
-sub header_field_names {
- my $self = shift;
- return map $standard_case{$_} || $self->{'::std_case'}{$_} || $_, @{ $self->_sorted_field_names },
- if wantarray;
- return grep !/^::/, keys %$self;
-}
-
-
-sub scan
-{
- my($self, $sub) = @_;
- my $key;
- for $key (@{ $self->_sorted_field_names }) {
- my $vals = $self->{$key};
- if (ref($vals) eq 'ARRAY') {
- my $val;
- for $val (@$vals) {
- $sub->($standard_case{$key} || $self->{'::std_case'}{$key} || $key, $val);
- }
- }
- else {
- $sub->($standard_case{$key} || $self->{'::std_case'}{$key} || $key, $vals);
- }
- }
-}
-
-sub flatten {
- my($self)=@_;
-
- (
- map {
- my $k = $_;
- map {
- ( $k => $_ )
- } $self->header($_);
- } $self->header_field_names
- );
-}
-
-sub as_string
-{
- my($self, $endl) = @_;
- $endl = "\n" unless defined $endl;
-
- my @result = ();
- for my $key (@{ $self->_sorted_field_names }) {
- next if index($key, '_') == 0;
- my $vals = $self->{$key};
- if ( ref($vals) eq 'ARRAY' ) {
- for my $val (@$vals) {
- $val = '' if not defined $val;
- my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
- $field =~ s/^://;
- if ( index($val, "\n") >= 0 ) {
- $val = _process_newline($val, $endl);
- }
- push @result, $field . ': ' . $val;
- }
- }
- else {
- $vals = '' if not defined $vals;
- my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
- $field =~ s/^://;
- if ( index($vals, "\n") >= 0 ) {
- $vals = _process_newline($vals, $endl);
- }
- push @result, $field . ': ' . $vals;
- }
- }
-
- join($endl, @result, '');
-}
-
-sub _process_newline {
- local $_ = shift;
- my $endl = shift;
- # must handle header values with embedded newlines with care
- s/\s+$//; # trailing newlines and space must go
- s/\n(\x0d?\n)+/\n/g; # no empty lines
- s/\n([^\040\t])/\n $1/g; # initial space for continuation
- s/\n/$endl/g; # substitute with requested line ending
- $_;
-}
-
-
-
-if (eval { require Storable; 1 }) {
- *clone = \&Storable::dclone;
-} else {
- *clone = sub {
- my $self = shift;
- my $clone = HTTP::Headers->new;
- $self->scan(sub { $clone->push_header(@_);} );
- $clone;
- };
-}
-
-
-sub _date_header
-{
- require HTTP::Date;
- my($self, $header, $time) = @_;
- my($old) = $self->_header($header);
- if (defined $time) {
- $self->_header($header, HTTP::Date::time2str($time));
- }
- $old =~ s/;.*// if defined($old);
- HTTP::Date::str2time($old);
-}
-
-
-sub date { shift->_date_header('Date', @_); }
-sub expires { shift->_date_header('Expires', @_); }
-sub if_modified_since { shift->_date_header('If-Modified-Since', @_); }
-sub if_unmodified_since { shift->_date_header('If-Unmodified-Since', @_); }
-sub last_modified { shift->_date_header('Last-Modified', @_); }
-
-# This is used as a private LWP extension. The Client-Date header is
-# added as a timestamp to a response when it has been received.
-sub client_date { shift->_date_header('Client-Date', @_); }
-
-# The retry_after field is dual format (can also be a expressed as
-# number of seconds from now), so we don't provide an easy way to
-# access it until we have know how both these interfaces can be
-# addressed. One possibility is to return a negative value for
-# relative seconds and a positive value for epoch based time values.
-#sub retry_after { shift->_date_header('Retry-After', @_); }
-
-sub content_type {
- my $self = shift;
- my $ct = $self->{'content-type'};
- $self->{'content-type'} = shift if @_;
- $ct = $ct->[0] if ref($ct) eq 'ARRAY';
- return '' unless defined($ct) && length($ct);
- my @ct = split(/;\s*/, $ct, 2);
- for ($ct[0]) {
- s/\s+//g;
- $_ = lc($_);
- }
- wantarray ? @ct : $ct[0];
-}
-
-sub content_type_charset {
- my $self = shift;
- require HTTP::Headers::Util;
- my $h = $self->{'content-type'};
- $h = $h->[0] if ref($h);
- $h = "" unless defined $h;
- my @v = HTTP::Headers::Util::split_header_words($h);
- if (@v) {
- my($ct, undef, %ct_param) = @{$v[0]};
- my $charset = $ct_param{charset};
- if ($ct) {
- $ct = lc($ct);
- $ct =~ s/\s+//;
- }
- if ($charset) {
- $charset = uc($charset);
- $charset =~ s/^\s+//; $charset =~ s/\s+\z//;
- undef($charset) if $charset eq "";
- }
- return $ct, $charset if wantarray;
- return $charset;
- }
- return undef, undef if wantarray;
- return undef;
-}
-
-sub content_is_text {
- my $self = shift;
- return $self->content_type =~ m,^text/,;
-}
-
-sub content_is_html {
- my $self = shift;
- return $self->content_type eq 'text/html' || $self->content_is_xhtml;
-}
-
-sub content_is_xhtml {
- my $ct = shift->content_type;
- return $ct eq "application/xhtml+xml" ||
- $ct eq "application/vnd.wap.xhtml+xml";
-}
-
-sub content_is_xml {
- my $ct = shift->content_type;
- return 1 if $ct eq "text/xml";
- return 1 if $ct eq "application/xml";
- return 1 if $ct =~ /\+xml$/;
- return 0;
-}
-
-sub referer {
- my $self = shift;
- if (@_ && $_[0] =~ /#/) {
- # Strip fragment per RFC 2616, section 14.36.
- my $uri = shift;
- if (ref($uri)) {
- $uri = $uri->clone;
- $uri->fragment(undef);
- }
- else {
- $uri =~ s/\#.*//;
- }
- unshift @_, $uri;
- }
- ($self->_header('Referer', @_))[0];
-}
-*referrer = \&referer; # on tchrist's request
-
-sub title { (shift->_header('Title', @_))[0] }
-sub content_encoding { (shift->_header('Content-Encoding', @_))[0] }
-sub content_language { (shift->_header('Content-Language', @_))[0] }
-sub content_length { (shift->_header('Content-Length', @_))[0] }
-
-sub user_agent { (shift->_header('User-Agent', @_))[0] }
-sub server { (shift->_header('Server', @_))[0] }
-
-sub from { (shift->_header('From', @_))[0] }
-sub warning { (shift->_header('Warning', @_))[0] }
-
-sub www_authenticate { (shift->_header('WWW-Authenticate', @_))[0] }
-sub authorization { (shift->_header('Authorization', @_))[0] }
-
-sub proxy_authenticate { (shift->_header('Proxy-Authenticate', @_))[0] }
-sub proxy_authorization { (shift->_header('Proxy-Authorization', @_))[0] }
-
-sub authorization_basic { shift->_basic_auth("Authorization", @_) }
-sub proxy_authorization_basic { shift->_basic_auth("Proxy-Authorization", @_) }
-
-sub _basic_auth {
- require MIME::Base64;
- my($self, $h, $user, $passwd) = @_;
- my($old) = $self->_header($h);
- if (defined $user) {
- Carp::croak("Basic authorization user name can't contain ':'")
- if $user =~ /:/;
- $passwd = '' unless defined $passwd;
- $self->_header($h => 'Basic ' .
- MIME::Base64::encode("$user:$passwd", ''));
- }
- if (defined $old && $old =~ s/^\s*Basic\s+//) {
- my $val = MIME::Base64::decode($old);
- return $val unless wantarray;
- return split(/:/, $val, 2);
- }
- return;
-}
-
-
-1;
-
-__END__
-
-#line 874
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers/Util.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers/Util.pm
deleted file mode 100644
index 0167f38c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Headers/Util.pm
+++ /dev/null
@@ -1,99 +0,0 @@
-#line 1 "HTTP/Headers/Util.pm"
-package HTTP::Headers::Util;
-
-use strict;
-use warnings;
-
-our $VERSION = "6.11";
-
-use base 'Exporter';
-
-our @EXPORT_OK=qw(split_header_words _split_header_words join_header_words);
-
-
-sub split_header_words {
- my @res = &_split_header_words;
- for my $arr (@res) {
- for (my $i = @$arr - 2; $i >= 0; $i -= 2) {
- $arr->[$i] = lc($arr->[$i]);
- }
- }
- return @res;
-}
-
-sub _split_header_words
-{
- my(@val) = @_;
- my @res;
- for (@val) {
- my @cur;
- while (length) {
- if (s/^\s*(=*[^\s=;,]+)//) { # 'token' or parameter 'attribute'
- push(@cur, $1);
- # a quoted value
- if (s/^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"//) {
- my $val = $1;
- $val =~ s/\\(.)/$1/g;
- push(@cur, $val);
- # some unquoted value
- }
- elsif (s/^\s*=\s*([^;,\s]*)//) {
- my $val = $1;
- $val =~ s/\s+$//;
- push(@cur, $val);
- # no value, a lone token
- }
- else {
- push(@cur, undef);
- }
- }
- elsif (s/^\s*,//) {
- push(@res, [@cur]) if @cur;
- @cur = ();
- }
- elsif (s/^\s*;// || s/^\s+//) {
- # continue
- }
- else {
- die "This should not happen: '$_'";
- }
- }
- push(@res, \@cur) if @cur;
- }
- @res;
-}
-
-
-sub join_header_words
-{
- @_ = ([@_]) if @_ && !ref($_[0]);
- my @res;
- for (@_) {
- my @cur = @$_;
- my @attr;
- while (@cur) {
- my $k = shift @cur;
- my $v = shift @cur;
- if (defined $v) {
- if ($v =~ /[\x00-\x20()<>@,;:\\\"\/\[\]?={}\x7F-\xFF]/ || !length($v)) {
- $v =~ s/([\"\\])/\\$1/g; # escape " and \
- $k .= qq(="$v");
- }
- else {
- # token
- $k .= "=$v";
- }
- }
- push(@attr, $k);
- }
- push(@res, join("; ", @attr)) if @attr;
- }
- join(", ", @res);
-}
-
-
-1;
-
-__END__
-
-#line 198
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Message.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Message.pm
deleted file mode 100644
index 8825c011..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Message.pm
+++ /dev/null
@@ -1,778 +0,0 @@
-#line 1 "HTTP/Message.pm"
-package HTTP::Message;
-
-use strict;
-use warnings;
-
-our $VERSION = "6.11";
-
-require HTTP::Headers;
-require Carp;
-
-my $CRLF = "\015\012"; # "\r\n" is not portable
-unless ($HTTP::URI_CLASS) {
- if ($ENV{PERL_HTTP_URI_CLASS}
- && $ENV{PERL_HTTP_URI_CLASS} =~ /^([\w:]+)$/) {
- $HTTP::URI_CLASS = $1;
- } else {
- $HTTP::URI_CLASS = "URI";
- }
-}
-eval "require $HTTP::URI_CLASS"; die $@ if $@;
-
-*_utf8_downgrade = defined(&utf8::downgrade) ?
- sub {
- utf8::downgrade($_[0], 1) or
- Carp::croak("HTTP::Message content must be bytes")
- }
- :
- sub {
- };
-
-sub new
-{
- my($class, $header, $content) = @_;
- if (defined $header) {
- Carp::croak("Bad header argument") unless ref $header;
- if (ref($header) eq "ARRAY") {
- $header = HTTP::Headers->new(@$header);
- }
- else {
- $header = $header->clone;
- }
- }
- else {
- $header = HTTP::Headers->new;
- }
- if (defined $content) {
- _utf8_downgrade($content);
- }
- else {
- $content = '';
- }
-
- bless {
- '_headers' => $header,
- '_content' => $content,
- }, $class;
-}
-
-
-sub parse
-{
- my($class, $str) = @_;
-
- my @hdr;
- while (1) {
- if ($str =~ s/^([^\s:]+)[ \t]*: ?(.*)\n?//) {
- push(@hdr, $1, $2);
- $hdr[-1] =~ s/\r\z//;
- }
- elsif (@hdr && $str =~ s/^([ \t].*)\n?//) {
- $hdr[-1] .= "\n$1";
- $hdr[-1] =~ s/\r\z//;
- }
- else {
- $str =~ s/^\r?\n//;
- last;
- }
- }
- local $HTTP::Headers::TRANSLATE_UNDERSCORE;
- new($class, \@hdr, $str);
-}
-
-
-sub clone
-{
- my $self = shift;
- my $clone = HTTP::Message->new($self->headers,
- $self->content);
- $clone->protocol($self->protocol);
- $clone;
-}
-
-
-sub clear {
- my $self = shift;
- $self->{_headers}->clear;
- $self->content("");
- delete $self->{_parts};
- return;
-}
-
-
-sub protocol {
- shift->_elem('_protocol', @_);
-}
-
-sub headers {
- my $self = shift;
-
- # recalculation of _content might change headers, so we
- # need to force it now
- $self->_content unless exists $self->{_content};
-
- $self->{_headers};
-}
-
-sub headers_as_string {
- shift->headers->as_string(@_);
-}
-
-
-sub content {
-
- my $self = $_[0];
- if (defined(wantarray)) {
- $self->_content unless exists $self->{_content};
- my $old = $self->{_content};
- $old = $$old if ref($old) eq "SCALAR";
- &_set_content if @_ > 1;
- return $old;
- }
-
- if (@_ > 1) {
- &_set_content;
- }
- else {
- Carp::carp("Useless content call in void context") if $^W;
- }
-}
-
-
-sub _set_content {
- my $self = $_[0];
- _utf8_downgrade($_[1]);
- if (!ref($_[1]) && ref($self->{_content}) eq "SCALAR") {
- ${$self->{_content}} = $_[1];
- }
- else {
- die "Can't set content to be a scalar reference" if ref($_[1]) eq "SCALAR";
- $self->{_content} = $_[1];
- delete $self->{_content_ref};
- }
- delete $self->{_parts} unless $_[2];
-}
-
-
-sub add_content
-{
- my $self = shift;
- $self->_content unless exists $self->{_content};
- my $chunkref = \$_[0];
- $chunkref = $$chunkref if ref($$chunkref); # legacy
-
- _utf8_downgrade($$chunkref);
-
- my $ref = ref($self->{_content});
- if (!$ref) {
- $self->{_content} .= $$chunkref;
- }
- elsif ($ref eq "SCALAR") {
- ${$self->{_content}} .= $$chunkref;
- }
- else {
- Carp::croak("Can't append to $ref content");
- }
- delete $self->{_parts};
-}
-
-sub add_content_utf8 {
- my($self, $buf) = @_;
- utf8::upgrade($buf);
- utf8::encode($buf);
- $self->add_content($buf);
-}
-
-sub content_ref
-{
- my $self = shift;
- $self->_content unless exists $self->{_content};
- delete $self->{_parts};
- my $old = \$self->{_content};
- my $old_cref = $self->{_content_ref};
- if (@_) {
- my $new = shift;
- Carp::croak("Setting content_ref to a non-ref") unless ref($new);
- delete $self->{_content}; # avoid modifying $$old
- $self->{_content} = $new;
- $self->{_content_ref}++;
- }
- $old = $$old if $old_cref;
- return $old;
-}
-
-
-sub content_charset
-{
- my $self = shift;
- if (my $charset = $self->content_type_charset) {
- return $charset;
- }
-
- # time to start guessing
- my $cref = $self->decoded_content(ref => 1, charset => "none");
-
- # Unicode BOM
- for ($$cref) {
- return "UTF-8" if /^\xEF\xBB\xBF/;
- return "UTF-32LE" if /^\xFF\xFE\x00\x00/;
- return "UTF-32BE" if /^\x00\x00\xFE\xFF/;
- return "UTF-16LE" if /^\xFF\xFE/;
- return "UTF-16BE" if /^\xFE\xFF/;
- }
-
- if ($self->content_is_xml) {
- # http://www.w3.org/TR/2006/REC-xml-20060816/#sec-guessing
- # XML entity not accompanied by external encoding information and not
- # in UTF-8 or UTF-16 encoding must begin with an XML encoding declaration,
- # in which the first characters must be ')/) {
- if ($1 =~ /\sencoding\s*=\s*(["'])(.*?)\1/) {
- my $enc = $2;
- $enc =~ s/^\s+//; $enc =~ s/\s+\z//;
- return $enc if $enc;
- }
- }
- }
- return "UTF-8";
- }
- elsif ($self->content_is_html) {
- # look for or
- # http://dev.w3.org/html5/spec/Overview.html#determining-the-character-encoding
- require IO::HTML;
- # Use relaxed search to match previous versions of HTTP::Message:
- my $encoding = IO::HTML::find_charset_in($$cref, { encoding => 1,
- need_pragma => 0 });
- return $encoding->mime_name if $encoding;
- }
- elsif ($self->content_type eq "application/json") {
- for ($$cref) {
- # RFC 4627, ch 3
- return "UTF-32BE" if /^\x00\x00\x00./s;
- return "UTF-32LE" if /^.\x00\x00\x00/s;
- return "UTF-16BE" if /^\x00.\x00./s;
- return "UTF-16LE" if /^.\x00.\x00/s;
- return "UTF-8";
- }
- }
- if ($self->content_type =~ /^text\//) {
- for ($$cref) {
- if (length) {
- return "US-ASCII" unless /[\x80-\xFF]/;
- require Encode;
- eval {
- Encode::decode_utf8($_, Encode::FB_CROAK() | Encode::LEAVE_SRC());
- };
- return "UTF-8" unless $@;
- return "ISO-8859-1";
- }
- }
- }
-
- return undef;
-}
-
-
-sub decoded_content
-{
- my($self, %opt) = @_;
- my $content_ref;
- my $content_ref_iscopy;
-
- eval {
- $content_ref = $self->content_ref;
- die "Can't decode ref content" if ref($content_ref) ne "SCALAR";
-
- if (my $h = $self->header("Content-Encoding")) {
- $h =~ s/^\s+//;
- $h =~ s/\s+$//;
- for my $ce (reverse split(/\s*,\s*/, lc($h))) {
- next unless $ce;
- next if $ce eq "identity" || $ce eq "none";
- if ($ce eq "gzip" || $ce eq "x-gzip") {
- require IO::Uncompress::Gunzip;
- my $output;
- IO::Uncompress::Gunzip::gunzip($content_ref, \$output, Transparent => 0)
- or die "Can't gunzip content: $IO::Uncompress::Gunzip::GunzipError";
- $content_ref = \$output;
- $content_ref_iscopy++;
- }
- elsif ($ce eq "x-bzip2" or $ce eq "bzip2") {
- require IO::Uncompress::Bunzip2;
- my $output;
- IO::Uncompress::Bunzip2::bunzip2($content_ref, \$output, Transparent => 0)
- or die "Can't bunzip content: $IO::Uncompress::Bunzip2::Bunzip2Error";
- $content_ref = \$output;
- $content_ref_iscopy++;
- }
- elsif ($ce eq "deflate") {
- require IO::Uncompress::Inflate;
- my $output;
- my $status = IO::Uncompress::Inflate::inflate($content_ref, \$output, Transparent => 0);
- my $error = $IO::Uncompress::Inflate::InflateError;
- unless ($status) {
- # "Content-Encoding: deflate" is supposed to mean the
- # "zlib" format of RFC 1950, but Microsoft got that
- # wrong, so some servers sends the raw compressed
- # "deflate" data. This tries to inflate this format.
- $output = undef;
- require IO::Uncompress::RawInflate;
- unless (IO::Uncompress::RawInflate::rawinflate($content_ref, \$output)) {
- $self->push_header("Client-Warning" =>
- "Could not raw inflate content: $IO::Uncompress::RawInflate::RawInflateError");
- $output = undef;
- }
- }
- die "Can't inflate content: $error" unless defined $output;
- $content_ref = \$output;
- $content_ref_iscopy++;
- }
- elsif ($ce eq "compress" || $ce eq "x-compress") {
- die "Can't uncompress content";
- }
- elsif ($ce eq "base64") { # not really C-T-E, but should be harmless
- require MIME::Base64;
- $content_ref = \MIME::Base64::decode($$content_ref);
- $content_ref_iscopy++;
- }
- elsif ($ce eq "quoted-printable") { # not really C-T-E, but should be harmless
- require MIME::QuotedPrint;
- $content_ref = \MIME::QuotedPrint::decode($$content_ref);
- $content_ref_iscopy++;
- }
- else {
- die "Don't know how to decode Content-Encoding '$ce'";
- }
- }
- }
-
- if ($self->content_is_text || (my $is_xml = $self->content_is_xml)) {
- my $charset = lc(
- $opt{charset} ||
- $self->content_type_charset ||
- $opt{default_charset} ||
- $self->content_charset ||
- "ISO-8859-1"
- );
- if ($charset eq "none") {
- # leave it as is
- }
- elsif ($charset eq "us-ascii" || $charset eq "iso-8859-1") {
- if ($$content_ref =~ /[^\x00-\x7F]/ && defined &utf8::upgrade) {
- unless ($content_ref_iscopy) {
- my $copy = $$content_ref;
- $content_ref = \$copy;
- $content_ref_iscopy++;
- }
- utf8::upgrade($$content_ref);
- }
- }
- else {
- require Encode;
- eval {
- $content_ref = \Encode::decode($charset, $$content_ref,
- ($opt{charset_strict} ? Encode::FB_CROAK() : 0) | Encode::LEAVE_SRC());
- };
- if ($@) {
- my $retried;
- if ($@ =~ /^Unknown encoding/) {
- my $alt_charset = lc($opt{alt_charset} || "");
- if ($alt_charset && $charset ne $alt_charset) {
- # Retry decoding with the alternative charset
- $content_ref = \Encode::decode($alt_charset, $$content_ref,
- ($opt{charset_strict} ? Encode::FB_CROAK() : 0) | Encode::LEAVE_SRC())
- unless $alt_charset eq "none";
- $retried++;
- }
- }
- die unless $retried;
- }
- die "Encode::decode() returned undef improperly" unless defined $$content_ref;
- if ($is_xml) {
- # Get rid of the XML encoding declaration if present
- $$content_ref =~ s/^\x{FEFF}//;
- if ($$content_ref =~ /^(\s*<\?xml[^\x00]*?\?>)/) {
- substr($$content_ref, 0, length($1)) =~ s/\sencoding\s*=\s*(["']).*?\1//;
- }
- }
- }
- }
- };
- if ($@) {
- Carp::croak($@) if $opt{raise_error};
- return undef;
- }
-
- return $opt{ref} ? $content_ref : $$content_ref;
-}
-
-
-sub decodable
-{
- # should match the Content-Encoding values that decoded_content can deal with
- my $self = shift;
- my @enc;
- # XXX preferably we should determine if the modules are available without loading
- # them here
- eval {
- require IO::Uncompress::Gunzip;
- push(@enc, "gzip", "x-gzip");
- };
- eval {
- require IO::Uncompress::Inflate;
- require IO::Uncompress::RawInflate;
- push(@enc, "deflate");
- };
- eval {
- require IO::Uncompress::Bunzip2;
- push(@enc, "x-bzip2");
- };
- # we don't care about announcing the 'identity', 'base64' and
- # 'quoted-printable' stuff
- return wantarray ? @enc : join(", ", @enc);
-}
-
-
-sub decode
-{
- my $self = shift;
- return 1 unless $self->header("Content-Encoding");
- if (defined(my $content = $self->decoded_content(charset => "none"))) {
- $self->remove_header("Content-Encoding", "Content-Length", "Content-MD5");
- $self->content($content);
- return 1;
- }
- return 0;
-}
-
-
-sub encode
-{
- my($self, @enc) = @_;
-
- Carp::croak("Can't encode multipart/* messages") if $self->content_type =~ m,^multipart/,;
- Carp::croak("Can't encode message/* messages") if $self->content_type =~ m,^message/,;
-
- return 1 unless @enc; # nothing to do
-
- my $content = $self->content;
- for my $encoding (@enc) {
- if ($encoding eq "identity") {
- # nothing to do
- }
- elsif ($encoding eq "base64") {
- require MIME::Base64;
- $content = MIME::Base64::encode($content);
- }
- elsif ($encoding eq "gzip" || $encoding eq "x-gzip") {
- require IO::Compress::Gzip;
- my $output;
- IO::Compress::Gzip::gzip(\$content, \$output, Minimal => 1)
- or die "Can't gzip content: $IO::Compress::Gzip::GzipError";
- $content = $output;
- }
- elsif ($encoding eq "deflate") {
- require IO::Compress::Deflate;
- my $output;
- IO::Compress::Deflate::deflate(\$content, \$output)
- or die "Can't deflate content: $IO::Compress::Deflate::DeflateError";
- $content = $output;
- }
- elsif ($encoding eq "x-bzip2") {
- require IO::Compress::Bzip2;
- my $output;
- IO::Compress::Bzip2::bzip2(\$content, \$output)
- or die "Can't bzip2 content: $IO::Compress::Bzip2::Bzip2Error";
- $content = $output;
- }
- elsif ($encoding eq "rot13") { # for the fun of it
- $content =~ tr/A-Za-z/N-ZA-Mn-za-m/;
- }
- else {
- return 0;
- }
- }
- my $h = $self->header("Content-Encoding");
- unshift(@enc, $h) if $h;
- $self->header("Content-Encoding", join(", ", @enc));
- $self->remove_header("Content-Length", "Content-MD5");
- $self->content($content);
- return 1;
-}
-
-
-sub as_string
-{
- my($self, $eol) = @_;
- $eol = "\n" unless defined $eol;
-
- # The calculation of content might update the headers
- # so we need to do that first.
- my $content = $self->content;
-
- return join("", $self->{'_headers'}->as_string($eol),
- $eol,
- $content,
- (@_ == 1 && length($content) &&
- $content !~ /\n\z/) ? "\n" : "",
- );
-}
-
-
-sub dump
-{
- my($self, %opt) = @_;
- my $content = $self->content;
- my $chopped = 0;
- if (!ref($content)) {
- my $maxlen = $opt{maxlength};
- $maxlen = 512 unless defined($maxlen);
- if ($maxlen && length($content) > $maxlen * 1.1 + 3) {
- $chopped = length($content) - $maxlen;
- $content = substr($content, 0, $maxlen) . "...";
- }
-
- $content =~ s/\\/\\\\/g;
- $content =~ s/\t/\\t/g;
- $content =~ s/\r/\\r/g;
-
- # no need for 3 digits in escape for these
- $content =~ s/([\0-\11\13-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
-
- $content =~ s/([\0-\11\13-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
- $content =~ s/([^\12\040-\176])/sprintf('\\x{%X}',ord($1))/eg;
-
- # remaining whitespace
- $content =~ s/( +)\n/("\\40" x length($1)) . "\n"/eg;
- $content =~ s/(\n+)\n/("\\n" x length($1)) . "\n"/eg;
- $content =~ s/\n\z/\\n/;
-
- my $no_content = $opt{no_content};
- $no_content = "(no content)" unless defined $no_content;
- if ($content eq $no_content) {
- # escape our $no_content marker
- $content =~ s/^(.)/sprintf('\\x%02X',ord($1))/eg;
- }
- elsif ($content eq "") {
- $content = $no_content;
- }
- }
-
- my @dump;
- push(@dump, $opt{preheader}) if $opt{preheader};
- push(@dump, $self->{_headers}->as_string, $content);
- push(@dump, "(+ $chopped more bytes not shown)") if $chopped;
-
- my $dump = join("\n", @dump, "");
- $dump =~ s/^/$opt{prefix}/gm if $opt{prefix};
-
- print $dump unless defined wantarray;
- return $dump;
-}
-
-# allow subclasses to override what will handle individual parts
-sub _part_class {
- return __PACKAGE__;
-}
-
-sub parts {
- my $self = shift;
- if (defined(wantarray) && (!exists $self->{_parts} || ref($self->{_content}) eq "SCALAR")) {
- $self->_parts;
- }
- my $old = $self->{_parts};
- if (@_) {
- my @parts = map { ref($_) eq 'ARRAY' ? @$_ : $_ } @_;
- my $ct = $self->content_type || "";
- if ($ct =~ m,^message/,) {
- Carp::croak("Only one part allowed for $ct content")
- if @parts > 1;
- }
- elsif ($ct !~ m,^multipart/,) {
- $self->remove_content_headers;
- $self->content_type("multipart/mixed");
- }
- $self->{_parts} = \@parts;
- _stale_content($self);
- }
- return @$old if wantarray;
- return $old->[0];
-}
-
-sub add_part {
- my $self = shift;
- if (($self->content_type || "") !~ m,^multipart/,) {
- my $p = $self->_part_class->new(
- $self->remove_content_headers,
- $self->content(""),
- );
- $self->content_type("multipart/mixed");
- $self->{_parts} = [];
- if ($p->headers->header_field_names || $p->content ne "") {
- push(@{$self->{_parts}}, $p);
- }
- }
- elsif (!exists $self->{_parts} || ref($self->{_content}) eq "SCALAR") {
- $self->_parts;
- }
-
- push(@{$self->{_parts}}, @_);
- _stale_content($self);
- return;
-}
-
-sub _stale_content {
- my $self = shift;
- if (ref($self->{_content}) eq "SCALAR") {
- # must recalculate now
- $self->_content;
- }
- else {
- # just invalidate cache
- delete $self->{_content};
- delete $self->{_content_ref};
- }
-}
-
-
-# delegate all other method calls to the headers object.
-our $AUTOLOAD;
-sub AUTOLOAD
-{
- my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
-
- # We create the function here so that it will not need to be
- # autoloaded the next time.
- no strict 'refs';
- *$method = sub { local $Carp::Internal{+__PACKAGE__} = 1; shift->headers->$method(@_) };
- goto &$method;
-}
-
-
-sub DESTROY {} # avoid AUTOLOADing it
-
-
-# Private method to access members in %$self
-sub _elem
-{
- my $self = shift;
- my $elem = shift;
- my $old = $self->{$elem};
- $self->{$elem} = $_[0] if @_;
- return $old;
-}
-
-
-# Create private _parts attribute from current _content
-sub _parts {
- my $self = shift;
- my $ct = $self->content_type;
- if ($ct =~ m,^multipart/,) {
- require HTTP::Headers::Util;
- my @h = HTTP::Headers::Util::split_header_words($self->header("Content-Type"));
- die "Assert" unless @h;
- my %h = @{$h[0]};
- if (defined(my $b = $h{boundary})) {
- my $str = $self->content;
- $str =~ s/\r?\n--\Q$b\E--.*//s;
- if ($str =~ s/(^|.*?\r?\n)--\Q$b\E\r?\n//s) {
- $self->{_parts} = [map $self->_part_class->parse($_),
- split(/\r?\n--\Q$b\E\r?\n/, $str)]
- }
- }
- }
- elsif ($ct eq "message/http") {
- require HTTP::Request;
- require HTTP::Response;
- my $content = $self->content;
- my $class = ($content =~ m,^(HTTP/.*)\n,) ?
- "HTTP::Response" : "HTTP::Request";
- $self->{_parts} = [$class->parse($content)];
- }
- elsif ($ct =~ m,^message/,) {
- $self->{_parts} = [ $self->_part_class->parse($self->content) ];
- }
-
- $self->{_parts} ||= [];
-}
-
-
-# Create private _content attribute from current _parts
-sub _content {
- my $self = shift;
- my $ct = $self->{_headers}->header("Content-Type") || "multipart/mixed";
- if ($ct =~ m,^\s*message/,i) {
- _set_content($self, $self->{_parts}[0]->as_string($CRLF), 1);
- return;
- }
-
- require HTTP::Headers::Util;
- my @v = HTTP::Headers::Util::split_header_words($ct);
- Carp::carp("Multiple Content-Type headers") if @v > 1;
- @v = @{$v[0]};
-
- my $boundary;
- my $boundary_index;
- for (my @tmp = @v; @tmp;) {
- my($k, $v) = splice(@tmp, 0, 2);
- if ($k eq "boundary") {
- $boundary = $v;
- $boundary_index = @v - @tmp - 1;
- last;
- }
- }
-
- my @parts = map $_->as_string($CRLF), @{$self->{_parts}};
-
- my $bno = 0;
- $boundary = _boundary() unless defined $boundary;
- CHECK_BOUNDARY:
- {
- for (@parts) {
- if (index($_, $boundary) >= 0) {
- # must have a better boundary
- $boundary = _boundary(++$bno);
- redo CHECK_BOUNDARY;
- }
- }
- }
-
- if ($boundary_index) {
- $v[$boundary_index] = $boundary;
- }
- else {
- push(@v, boundary => $boundary);
- }
-
- $ct = HTTP::Headers::Util::join_header_words(@v);
- $self->{_headers}->header("Content-Type", $ct);
-
- _set_content($self, "--$boundary$CRLF" .
- join("$CRLF--$boundary$CRLF", @parts) .
- "$CRLF--$boundary--$CRLF",
- 1);
-}
-
-
-sub _boundary
-{
- my $size = shift || return "xYzZY";
- require MIME::Base64;
- my $b = MIME::Base64::encode(join("", map chr(rand(256)), 1..$size*3), "");
- $b =~ s/[\W]/X/g; # ensure alnum only
- $b;
-}
-
-
-1;
-
-
-__END__
-
-#line 1115
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Negotiate.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Negotiate.pm
deleted file mode 100644
index 7c17fe4f..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Negotiate.pm
+++ /dev/null
@@ -1,307 +0,0 @@
-#line 1 "HTTP/Negotiate.pm"
-package HTTP::Negotiate;
-
-$VERSION = "6.01";
-sub Version { $VERSION; }
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(choose);
-
-require HTTP::Headers;
-
-$DEBUG = 0;
-
-sub choose ($;$)
-{
- my($variants, $request) = @_;
- my(%accept);
-
- unless (defined $request) {
- # Create a request object from the CGI environment variables
- $request = HTTP::Headers->new;
- $request->header('Accept', $ENV{HTTP_ACCEPT})
- if $ENV{HTTP_ACCEPT};
- $request->header('Accept-Charset', $ENV{HTTP_ACCEPT_CHARSET})
- if $ENV{HTTP_ACCEPT_CHARSET};
- $request->header('Accept-Encoding', $ENV{HTTP_ACCEPT_ENCODING})
- if $ENV{HTTP_ACCEPT_ENCODING};
- $request->header('Accept-Language', $ENV{HTTP_ACCEPT_LANGUAGE})
- if $ENV{HTTP_ACCEPT_LANGUAGE};
- }
-
- # Get all Accept values from the request. Build a hash initialized
- # like this:
- #
- # %accept = ( type => { 'audio/*' => { q => 0.2, mbx => 20000 },
- # 'audio/basic' => { q => 1 },
- # },
- # language => { 'no' => { q => 1 },
- # }
- # );
-
- $request->scan(sub {
- my($key, $val) = @_;
-
- my $type;
- if ($key =~ s/^Accept-//) {
- $type = lc($key);
- }
- elsif ($key eq "Accept") {
- $type = "type";
- }
- else {
- return;
- }
-
- $val =~ s/\s+//g;
- my $default_q = 1;
- for my $name (split(/,/, $val)) {
- my(%param, $param);
- if ($name =~ s/;(.*)//) {
- for $param (split(/;/, $1)) {
- my ($pk, $pv) = split(/=/, $param, 2);
- $param{lc $pk} = $pv;
- }
- }
- $name = lc $name;
- if (defined $param{'q'}) {
- $param{'q'} = 1 if $param{'q'} > 1;
- $param{'q'} = 0 if $param{'q'} < 0;
- }
- else {
- $param{'q'} = $default_q;
-
- # This makes sure that the first ones are slightly better off
- # and therefore more likely to be chosen.
- $default_q -= 0.0001;
- }
- $accept{$type}{$name} = \%param;
- }
- });
-
- # Check if any of the variants specify a language. We do this
- # because it influences how we treat those without (they default to
- # 0.5 instead of 1).
- my $any_lang = 0;
- for $var (@$variants) {
- if ($var->[5]) {
- $any_lang = 1;
- last;
- }
- }
-
- if ($DEBUG) {
- print "Negotiation parameters in the request\n";
- for $type (keys %accept) {
- print " $type:\n";
- for $name (keys %{$accept{$type}}) {
- print " $name\n";
- for $pv (keys %{$accept{$type}{$name}}) {
- print " $pv = $accept{$type}{$name}{$pv}\n";
- }
- }
- }
- }
-
- my @Q = (); # This is where we collect the results of the
- # quality calculations
-
- # Calculate quality for all the variants that are available.
- for (@$variants) {
- my($id, $qs, $ct, $enc, $cs, $lang, $bs) = @$_;
- $qs = 1 unless defined $qs;
- $ct = '' unless defined $ct;
- $bs = 0 unless defined $bs;
- $lang = lc($lang) if $lang; # lg tags are always case-insensitive
- if ($DEBUG) {
- print "\nEvaluating $id (ct='$ct')\n";
- printf " qs = %.3f\n", $qs;
- print " enc = $enc\n" if $enc && !ref($enc);
- print " enc = @$enc\n" if $enc && ref($enc);
- print " cs = $cs\n" if $cs;
- print " lang = $lang\n" if $lang;
- print " bs = $bs\n" if $bs;
- }
-
- # Calculate encoding quality
- my $qe = 1;
- # If the variant has no assigned Content-Encoding, or if no
- # Accept-Encoding field is present, then the value assigned
- # is "qe=1". If *all* of the variant's content encodings
- # are listed in the Accept-Encoding field, then the value
- # assigned is "qw=1". If *any* of the variant's content
- # encodings are not listed in the provided Accept-Encoding
- # field, then the value assigned is "qe=0"
- if (exists $accept{'encoding'} && $enc) {
- my @enc = ref($enc) ? @$enc : ($enc);
- for (@enc) {
- print "Is encoding $_ accepted? " if $DEBUG;
- unless(exists $accept{'encoding'}{$_}) {
- print "no\n" if $DEBUG;
- $qe = 0;
- last;
- }
- else {
- print "yes\n" if $DEBUG;
- }
- }
- }
-
- # Calculate charset quality
- my $qc = 1;
- # If the variant's media-type has no charset parameter,
- # or the variant's charset is US-ASCII, or if no Accept-Charset
- # field is present, then the value assigned is "qc=1". If the
- # variant's charset is listed in the Accept-Charset field,
- # then the value assigned is "qc=1. Otherwise, if the variant's
- # charset is not listed in the provided Accept-Encoding field,
- # then the value assigned is "qc=0".
- if (exists $accept{'charset'} && $cs && $cs ne 'us-ascii' ) {
- $qc = 0 unless $accept{'charset'}{$cs};
- }
-
- # Calculate language quality
- my $ql = 1;
- if ($lang && exists $accept{'language'}) {
- my @lang = ref($lang) ? @$lang : ($lang);
- # If any of the variant's content languages are listed
- # in the Accept-Language field, the the value assigned is
- # the largest of the "q" parameter values for those language
- # tags.
- my $q = undef;
- for (@lang) {
- next unless exists $accept{'language'}{$_};
- my $this_q = $accept{'language'}{$_}{'q'};
- $q = $this_q unless defined $q;
- $q = $this_q if $this_q > $q;
- }
- if(defined $q) {
- $DEBUG and print " -- Exact language match at q=$q\n";
- }
- else {
- # If there was no exact match and at least one of
- # the Accept-Language field values is a complete
- # subtag prefix of the content language tag(s), then
- # the "q" parameter value of the largest matching
- # prefix is used.
- $DEBUG and print " -- No exact language match\n";
- my $selected = undef;
- for $al (keys %{ $accept{'language'} }) {
- if (index($al, "$lang-") == 0) {
- # $lang starting with $al isn't enough, or else
- # Accept-Language: hu (Hungarian) would seem
- # to accept a document in hup (Hupa)
- $DEBUG and print " -- $al ISA $lang\n";
- $selected = $al unless defined $selected;
- $selected = $al if length($al) > length($selected);
- }
- else {
- $DEBUG and print " -- $lang isn't a $al\n";
- }
- }
- $q = $accept{'language'}{$selected}{'q'} if $selected;
-
- # If none of the variant's content language tags or
- # tag prefixes are listed in the provided
- # Accept-Language field, then the value assigned
- # is "ql=0.001"
- $q = 0.001 unless defined $q;
- }
- $ql = $q;
- }
- else {
- $ql = 0.5 if $any_lang && exists $accept{'language'};
- }
-
- my $q = 1;
- my $mbx = undef;
- # If no Accept field is given, then the value assigned is "q=1".
- # If at least one listed media range matches the variant's media
- # type, then the "q" parameter value assigned to the most specific
- # of those matched is used (e.g. "text/html;version=3.0" is more
- # specific than "text/html", which is more specific than "text/*",
- # which in turn is more specific than "*/*"). If not media range
- # in the provided Accept field matches the variant's media type,
- # then the value assigned is "q=0".
- if (exists $accept{'type'} && $ct) {
- # First we clean up our content-type
- $ct =~ s/\s+//g;
- my $params = "";
- $params = $1 if $ct =~ s/;(.*)//;
- my($type, $subtype) = split("/", $ct, 2);
- my %param = ();
- for $param (split(/;/, $params)) {
- my($pk,$pv) = split(/=/, $param, 2);
- $param{$pk} = $pv;
- }
-
- my $sel_q = undef;
- my $sel_mbx = undef;
- my $sel_specificness = 0;
-
- ACCEPT_TYPE:
- for $at (keys %{ $accept{'type'} }) {
- print "Consider $at...\n" if $DEBUG;
- my($at_type, $at_subtype) = split("/", $at, 2);
- # Is it a match on the type
- next if $at_type ne '*' && $at_type ne $type;
- next if $at_subtype ne '*' && $at_subtype ne $subtype;
- my $specificness = 0;
- $specificness++ if $at_type ne '*';
- $specificness++ if $at_subtype ne '*';
- # Let's see if content-type parameters also match
- while (($pk, $pv) = each %param) {
- print "Check if $pk = $pv is true\n" if $DEBUG;
- next unless exists $accept{'type'}{$at}{$pk};
- next ACCEPT_TYPE
- unless $accept{'type'}{$at}{$pk} eq $pv;
- print "yes it is!!\n" if $DEBUG;
- $specificness++;
- }
- print "Hurray, type match with specificness = $specificness\n"
- if $DEBUG;
-
- if (!defined($sel_q) || $sel_specificness < $specificness) {
- $sel_q = $accept{'type'}{$at}{'q'};
- $sel_mbx = $accept{'type'}{$at}{'mbx'};
- $sel_specificness = $specificness;
- }
- }
- $q = $sel_q || 0;
- $mbx = $sel_mbx;
- }
-
- my $Q;
- if (!defined($mbx) || $mbx >= $bs) {
- $Q = $qs * $qe * $qc * $ql * $q;
- }
- else {
- $Q = 0;
- print "Variant's size is too large ==> Q=0\n" if $DEBUG;
- }
-
- if ($DEBUG) {
- $mbx = "undef" unless defined $mbx;
- printf "Q=%.4f", $Q;
- print " (q=$q, mbx=$mbx, qe=$qe, qc=$qc, ql=$ql, qs=$qs)\n";
- }
-
- push(@Q, [$id, $Q, $bs]);
- }
-
-
- @Q = sort { $b->[1] <=> $a->[1] || $a->[2] <=> $b->[2] } @Q;
-
- return @Q if wantarray;
- return undef unless @Q;
- return undef if $Q[0][1] == 0;
- $Q[0][0];
-}
-
-1;
-
-__END__
-
-
-#line 529
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Request.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Request.pm
deleted file mode 100644
index 75298bc3..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Request.pm
+++ /dev/null
@@ -1,138 +0,0 @@
-#line 1 "HTTP/Request.pm"
-package HTTP::Request;
-
-use strict;
-use warnings;
-
-use base 'HTTP::Message';
-
-our $VERSION = "6.11";
-
-sub new
-{
- my($class, $method, $uri, $header, $content) = @_;
- my $self = $class->SUPER::new($header, $content);
- $self->method($method);
- $self->uri($uri);
- $self;
-}
-
-
-sub parse
-{
- my($class, $str) = @_;
- my $request_line;
- if ($str =~ s/^(.*)\n//) {
- $request_line = $1;
- }
- else {
- $request_line = $str;
- $str = "";
- }
-
- my $self = $class->SUPER::parse($str);
- my($method, $uri, $protocol) = split(' ', $request_line);
- $self->method($method) if defined($method);
- $self->uri($uri) if defined($uri);
- $self->protocol($protocol) if $protocol;
- $self;
-}
-
-
-sub clone
-{
- my $self = shift;
- my $clone = bless $self->SUPER::clone, ref($self);
- $clone->method($self->method);
- $clone->uri($self->uri);
- $clone;
-}
-
-
-sub method
-{
- shift->_elem('_method', @_);
-}
-
-
-sub uri
-{
- my $self = shift;
- my $old = $self->{'_uri'};
- if (@_) {
- my $uri = shift;
- if (!defined $uri) {
- # that's ok
- }
- elsif (ref $uri) {
- Carp::croak("A URI can't be a " . ref($uri) . " reference")
- if ref($uri) eq 'HASH' or ref($uri) eq 'ARRAY';
- Carp::croak("Can't use a " . ref($uri) . " object as a URI")
- unless $uri->can('scheme');
- $uri = $uri->clone;
- unless ($HTTP::URI_CLASS eq "URI") {
- # Argh!! Hate this... old LWP legacy!
- eval { local $SIG{__DIE__}; $uri = $uri->abs; };
- die $@ if $@ && $@ !~ /Missing base argument/;
- }
- }
- else {
- $uri = $HTTP::URI_CLASS->new($uri);
- }
- $self->{'_uri'} = $uri;
- delete $self->{'_uri_canonical'};
- }
- $old;
-}
-
-*url = \&uri; # legacy
-
-sub uri_canonical
-{
- my $self = shift;
- return $self->{'_uri_canonical'} ||= $self->{'_uri'}->canonical;
-}
-
-
-sub accept_decodable
-{
- my $self = shift;
- $self->header("Accept-Encoding", scalar($self->decodable));
-}
-
-sub as_string
-{
- my $self = shift;
- my($eol) = @_;
- $eol = "\n" unless defined $eol;
-
- my $req_line = $self->method || "-";
- my $uri = $self->uri;
- $uri = (defined $uri) ? $uri->as_string : "-";
- $req_line .= " $uri";
- my $proto = $self->protocol;
- $req_line .= " $proto" if $proto;
-
- return join($eol, $req_line, $self->SUPER::as_string(@_));
-}
-
-sub dump
-{
- my $self = shift;
- my @pre = ($self->method || "-", $self->uri || "-");
- if (my $prot = $self->protocol) {
- push(@pre, $prot);
- }
-
- return $self->SUPER::dump(
- preheader => join(" ", @pre),
- @_,
- );
-}
-
-
-1;
-
-__END__
-
-#line 242
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Request/Common.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Request/Common.pm
deleted file mode 100644
index 6e442f6f..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Request/Common.pm
+++ /dev/null
@@ -1,313 +0,0 @@
-#line 1 "HTTP/Request/Common.pm"
-package HTTP::Request::Common;
-
-use strict;
-use warnings;
-
-our $DYNAMIC_FILE_UPLOAD ||= 0; # make it defined (don't know why)
-
-use Exporter 5.57 'import';
-
-our @EXPORT =qw(GET HEAD PUT POST);
-our @EXPORT_OK = qw($DYNAMIC_FILE_UPLOAD DELETE);
-
-require HTTP::Request;
-use Carp();
-
-our $VERSION = "6.11";
-
-my $CRLF = "\015\012"; # "\r\n" is not portable
-
-sub GET { _simple_req('GET', @_); }
-sub HEAD { _simple_req('HEAD', @_); }
-sub DELETE { _simple_req('DELETE', @_); }
-
-for my $type (qw(PUT POST)) {
- no strict 'refs';
- *{ __PACKAGE__ . "::" . $type } = sub {
- return request_type_with_data($type, @_);
- };
-}
-
-sub request_type_with_data
-{
- my $type = shift;
- my $url = shift;
- my $req = HTTP::Request->new($type => $url);
- my $content;
- $content = shift if @_ and ref $_[0];
- my($k, $v);
- while (($k,$v) = splice(@_, 0, 2)) {
- if (lc($k) eq 'content') {
- $content = $v;
- }
- else {
- $req->push_header($k, $v);
- }
- }
- my $ct = $req->header('Content-Type');
- unless ($ct) {
- $ct = 'application/x-www-form-urlencoded';
- }
- elsif ($ct eq 'form-data') {
- $ct = 'multipart/form-data';
- }
-
- if (ref $content) {
- if ($ct =~ m,^multipart/form-data\s*(;|$),i) {
- require HTTP::Headers::Util;
- my @v = HTTP::Headers::Util::split_header_words($ct);
- Carp::carp("Multiple Content-Type headers") if @v > 1;
- @v = @{$v[0]};
-
- my $boundary;
- my $boundary_index;
- for (my @tmp = @v; @tmp;) {
- my($k, $v) = splice(@tmp, 0, 2);
- if ($k eq "boundary") {
- $boundary = $v;
- $boundary_index = @v - @tmp - 1;
- last;
- }
- }
-
- ($content, $boundary) = form_data($content, $boundary, $req);
-
- if ($boundary_index) {
- $v[$boundary_index] = $boundary;
- }
- else {
- push(@v, boundary => $boundary);
- }
-
- $ct = HTTP::Headers::Util::join_header_words(@v);
- }
- else {
- # We use a temporary URI object to format
- # the application/x-www-form-urlencoded content.
- require URI;
- my $url = URI->new('http:');
- $url->query_form(ref($content) eq "HASH" ? %$content : @$content);
- $content = $url->query;
-
- # HTML/4.01 says that line breaks are represented as "CR LF" pairs (i.e., `%0D%0A')
- $content =~ s/(?header('Content-Type' => $ct); # might be redundant
- if (defined($content)) {
- $req->header('Content-Length' =>
- length($content)) unless ref($content);
- $req->content($content);
- }
- else {
- $req->header('Content-Length' => 0);
- }
- $req;
-}
-
-
-sub _simple_req
-{
- my($method, $url) = splice(@_, 0, 2);
- my $req = HTTP::Request->new($method => $url);
- my($k, $v);
- my $content;
- while (($k,$v) = splice(@_, 0, 2)) {
- if (lc($k) eq 'content') {
- $req->add_content($v);
- $content++;
- }
- else {
- $req->push_header($k, $v);
- }
- }
- if ($content && !defined($req->header("Content-Length"))) {
- $req->header("Content-Length", length(${$req->content_ref}));
- }
- $req;
-}
-
-
-sub form_data # RFC1867
-{
- my($data, $boundary, $req) = @_;
- my @data = ref($data) eq "HASH" ? %$data : @$data; # copy
- my $fhparts;
- my @parts;
- while (my ($k,$v) = splice(@data, 0, 2)) {
- if (!ref($v)) {
- $k =~ s/([\\\"])/\\$1/g; # escape quotes and backslashes
- no warnings 'uninitialized';
- push(@parts,
- qq(Content-Disposition: form-data; name="$k"$CRLF$CRLF$v));
- }
- else {
- my($file, $usename, @headers) = @$v;
- unless (defined $usename) {
- $usename = $file;
- $usename =~ s,.*/,, if defined($usename);
- }
- $k =~ s/([\\\"])/\\$1/g;
- my $disp = qq(form-data; name="$k");
- if (defined($usename) and length($usename)) {
- $usename =~ s/([\\\"])/\\$1/g;
- $disp .= qq(; filename="$usename");
- }
- my $content = "";
- my $h = HTTP::Headers->new(@headers);
- if ($file) {
- open(my $fh, "<", $file) or Carp::croak("Can't open file $file: $!");
- binmode($fh);
- if ($DYNAMIC_FILE_UPLOAD) {
- # will read file later, close it now in order to
- # not accumulate to many open file handles
- close($fh);
- $content = \$file;
- }
- else {
- local($/) = undef; # slurp files
- $content = <$fh>;
- close($fh);
- }
- unless ($h->header("Content-Type")) {
- require LWP::MediaTypes;
- LWP::MediaTypes::guess_media_type($file, $h);
- }
- }
- if ($h->header("Content-Disposition")) {
- # just to get it sorted first
- $disp = $h->header("Content-Disposition");
- $h->remove_header("Content-Disposition");
- }
- if ($h->header("Content")) {
- $content = $h->header("Content");
- $h->remove_header("Content");
- }
- my $head = join($CRLF, "Content-Disposition: $disp",
- $h->as_string($CRLF),
- "");
- if (ref $content) {
- push(@parts, [$head, $$content]);
- $fhparts++;
- }
- else {
- push(@parts, $head . $content);
- }
- }
- }
- return ("", "none") unless @parts;
-
- my $content;
- if ($fhparts) {
- $boundary = boundary(10) # hopefully enough randomness
- unless $boundary;
-
- # add the boundaries to the @parts array
- for (1..@parts-1) {
- splice(@parts, $_*2-1, 0, "$CRLF--$boundary$CRLF");
- }
- unshift(@parts, "--$boundary$CRLF");
- push(@parts, "$CRLF--$boundary--$CRLF");
-
- # See if we can generate Content-Length header
- my $length = 0;
- for (@parts) {
- if (ref $_) {
- my ($head, $f) = @$_;
- my $file_size;
- unless ( -f $f && ($file_size = -s _) ) {
- # The file is either a dynamic file like /dev/audio
- # or perhaps a file in the /proc file system where
- # stat may return a 0 size even though reading it
- # will produce data. So we cannot make
- # a Content-Length header.
- undef $length;
- last;
- }
- $length += $file_size + length $head;
- }
- else {
- $length += length;
- }
- }
- $length && $req->header('Content-Length' => $length);
-
- # set up a closure that will return content piecemeal
- $content = sub {
- for (;;) {
- unless (@parts) {
- defined $length && $length != 0 &&
- Carp::croak "length of data sent did not match calculated Content-Length header. Probably because uploaded file changed in size during transfer.";
- return;
- }
- my $p = shift @parts;
- unless (ref $p) {
- $p .= shift @parts while @parts && !ref($parts[0]);
- defined $length && ($length -= length $p);
- return $p;
- }
- my($buf, $fh) = @$p;
- unless (ref($fh)) {
- my $file = $fh;
- undef($fh);
- open($fh, "<", $file) || Carp::croak("Can't open file $file: $!");
- binmode($fh);
- }
- my $buflength = length $buf;
- my $n = read($fh, $buf, 2048, $buflength);
- if ($n) {
- $buflength += $n;
- unshift(@parts, ["", $fh]);
- }
- else {
- close($fh);
- }
- if ($buflength) {
- defined $length && ($length -= $buflength);
- return $buf
- }
- }
- };
-
- }
- else {
- $boundary = boundary() unless $boundary;
-
- my $bno = 0;
- CHECK_BOUNDARY:
- {
- for (@parts) {
- if (index($_, $boundary) >= 0) {
- # must have a better boundary
- $boundary = boundary(++$bno);
- redo CHECK_BOUNDARY;
- }
- }
- last;
- }
- $content = "--$boundary$CRLF" .
- join("$CRLF--$boundary$CRLF", @parts) .
- "$CRLF--$boundary--$CRLF";
- }
-
- wantarray ? ($content, $boundary) : $content;
-}
-
-
-sub boundary
-{
- my $size = shift || return "xYzZY";
- require MIME::Base64;
- my $b = MIME::Base64::encode(join("", map chr(rand(256)), 1..$size*3), "");
- $b =~ s/[\W]/X/g; # ensure alnum only
- $b;
-}
-
-1;
-
-__END__
-
-#line 521
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Response.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Response.pm
deleted file mode 100644
index 370b234c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Response.pm
+++ /dev/null
@@ -1,343 +0,0 @@
-#line 1 "HTTP/Response.pm"
-package HTTP::Response;
-
-use strict;
-use warnings;
-
-use base 'HTTP::Message';
-
-our $VERSION = "6.11";
-
-use HTTP::Status ();
-
-
-sub new
-{
- my($class, $rc, $msg, $header, $content) = @_;
- my $self = $class->SUPER::new($header, $content);
- $self->code($rc);
- $self->message($msg);
- $self;
-}
-
-
-sub parse
-{
- my($class, $str) = @_;
- my $status_line;
- if ($str =~ s/^(.*)\n//) {
- $status_line = $1;
- }
- else {
- $status_line = $str;
- $str = "";
- }
-
- my $self = $class->SUPER::parse($str);
- my($protocol, $code, $message);
- if ($status_line =~ /^\d{3} /) {
- # Looks like a response created by HTTP::Response->new
- ($code, $message) = split(' ', $status_line, 2);
- } else {
- ($protocol, $code, $message) = split(' ', $status_line, 3);
- }
- $self->protocol($protocol) if $protocol;
- $self->code($code) if defined($code);
- $self->message($message) if defined($message);
- $self;
-}
-
-
-sub clone
-{
- my $self = shift;
- my $clone = bless $self->SUPER::clone, ref($self);
- $clone->code($self->code);
- $clone->message($self->message);
- $clone->request($self->request->clone) if $self->request;
- # we don't clone previous
- $clone;
-}
-
-
-sub code { shift->_elem('_rc', @_); }
-sub message { shift->_elem('_msg', @_); }
-sub previous { shift->_elem('_previous',@_); }
-sub request { shift->_elem('_request', @_); }
-
-
-sub status_line
-{
- my $self = shift;
- my $code = $self->{'_rc'} || "000";
- my $mess = $self->{'_msg'} || HTTP::Status::status_message($code) || "Unknown code";
- return "$code $mess";
-}
-
-
-sub base
-{
- my $self = shift;
- my $base = (
- $self->header('Content-Base'), # used to be HTTP/1.1
- $self->header('Content-Location'), # HTTP/1.1
- $self->header('Base'), # HTTP/1.0
- )[0];
- if ($base && $base =~ /^$URI::scheme_re:/o) {
- # already absolute
- return $HTTP::URI_CLASS->new($base);
- }
-
- my $req = $self->request;
- if ($req) {
- # if $base is undef here, the return value is effectively
- # just a copy of $self->request->uri.
- return $HTTP::URI_CLASS->new_abs($base, $req->uri);
- }
-
- # can't find an absolute base
- return undef;
-}
-
-
-sub redirects {
- my $self = shift;
- my @r;
- my $r = $self;
- while (my $p = $r->previous) {
- push(@r, $p);
- $r = $p;
- }
- return @r unless wantarray;
- return reverse @r;
-}
-
-
-sub filename
-{
- my $self = shift;
- my $file;
-
- my $cd = $self->header('Content-Disposition');
- if ($cd) {
- require HTTP::Headers::Util;
- if (my @cd = HTTP::Headers::Util::split_header_words($cd)) {
- my ($disposition, undef, %cd_param) = @{$cd[-1]};
- $file = $cd_param{filename};
-
- # RFC 2047 encoded?
- if ($file && $file =~ /^=\?(.+?)\?(.+?)\?(.+)\?=$/) {
- my $charset = $1;
- my $encoding = uc($2);
- my $encfile = $3;
-
- if ($encoding eq 'Q' || $encoding eq 'B') {
- local($SIG{__DIE__});
- eval {
- if ($encoding eq 'Q') {
- $encfile =~ s/_/ /g;
- require MIME::QuotedPrint;
- $encfile = MIME::QuotedPrint::decode($encfile);
- }
- else { # $encoding eq 'B'
- require MIME::Base64;
- $encfile = MIME::Base64::decode($encfile);
- }
-
- require Encode;
- require Encode::Locale;
- Encode::from_to($encfile, $charset, "locale_fs");
- };
-
- $file = $encfile unless $@;
- }
- }
- }
- }
-
- unless (defined($file) && length($file)) {
- my $uri;
- if (my $cl = $self->header('Content-Location')) {
- $uri = URI->new($cl);
- }
- elsif (my $request = $self->request) {
- $uri = $request->uri;
- }
-
- if ($uri) {
- $file = ($uri->path_segments)[-1];
- }
- }
-
- if ($file) {
- $file =~ s,.*[\\/],,; # basename
- }
-
- if ($file && !length($file)) {
- $file = undef;
- }
-
- $file;
-}
-
-
-sub as_string
-{
- my $self = shift;
- my($eol) = @_;
- $eol = "\n" unless defined $eol;
-
- my $status_line = $self->status_line;
- my $proto = $self->protocol;
- $status_line = "$proto $status_line" if $proto;
-
- return join($eol, $status_line, $self->SUPER::as_string(@_));
-}
-
-
-sub dump
-{
- my $self = shift;
-
- my $status_line = $self->status_line;
- my $proto = $self->protocol;
- $status_line = "$proto $status_line" if $proto;
-
- return $self->SUPER::dump(
- preheader => $status_line,
- @_,
- );
-}
-
-
-sub is_info { HTTP::Status::is_info (shift->{'_rc'}); }
-sub is_success { HTTP::Status::is_success (shift->{'_rc'}); }
-sub is_redirect { HTTP::Status::is_redirect (shift->{'_rc'}); }
-sub is_error { HTTP::Status::is_error (shift->{'_rc'}); }
-sub is_client_error { HTTP::Status::is_client_error (shift->{'_rc'}); }
-sub is_server_error { HTTP::Status::is_server_error (shift->{'_rc'}); }
-
-
-sub error_as_HTML
-{
- my $self = shift;
- my $title = 'An Error Occurred';
- my $body = $self->status_line;
- $body =~ s/&/&/g;
- $body =~ s/</g;
- return <
-$title
-
-$title
-$body
-
-
-EOM
-}
-
-
-sub current_age
-{
- my $self = shift;
- my $time = shift;
-
- # Implementation of RFC 2616 section 13.2.3
- # (age calculations)
- my $response_time = $self->client_date;
- my $date = $self->date;
-
- my $age = 0;
- if ($response_time && $date) {
- $age = $response_time - $date; # apparent_age
- $age = 0 if $age < 0;
- }
-
- my $age_v = $self->header('Age');
- if ($age_v && $age_v > $age) {
- $age = $age_v; # corrected_received_age
- }
-
- if ($response_time) {
- my $request = $self->request;
- if ($request) {
- my $request_time = $request->date;
- if ($request_time && $request_time < $response_time) {
- # Add response_delay to age to get 'corrected_initial_age'
- $age += $response_time - $request_time;
- }
- }
- $age += ($time || time) - $response_time;
- }
- return $age;
-}
-
-
-sub freshness_lifetime
-{
- my($self, %opt) = @_;
-
- # First look for the Cache-Control: max-age=n header
- for my $cc ($self->header('Cache-Control')) {
- for my $cc_dir (split(/\s*,\s*/, $cc)) {
- return $1 if $cc_dir =~ /^max-age\s*=\s*(\d+)/i;
- }
- }
-
- # Next possibility is to look at the "Expires" header
- my $date = $self->date || $self->client_date || $opt{time} || time;
- if (my $expires = $self->expires) {
- return $expires - $date;
- }
-
- # Must apply heuristic expiration
- return undef if exists $opt{heuristic_expiry} && !$opt{heuristic_expiry};
-
- # Default heuristic expiration parameters
- $opt{h_min} ||= 60;
- $opt{h_max} ||= 24 * 3600;
- $opt{h_lastmod_fraction} ||= 0.10; # 10% since last-mod suggested by RFC2616
- $opt{h_default} ||= 3600;
-
- # Should give a warning if more than 24 hours according to
- # RFC 2616 section 13.2.4. Here we just make this the default
- # maximum value.
-
- if (my $last_modified = $self->last_modified) {
- my $h_exp = ($date - $last_modified) * $opt{h_lastmod_fraction};
- return $opt{h_min} if $h_exp < $opt{h_min};
- return $opt{h_max} if $h_exp > $opt{h_max};
- return $h_exp;
- }
-
- # default when all else fails
- return $opt{h_min} if $opt{h_min} > $opt{h_default};
- return $opt{h_default};
-}
-
-
-sub is_fresh
-{
- my($self, %opt) = @_;
- $opt{time} ||= time;
- my $f = $self->freshness_lifetime(%opt);
- return undef unless defined($f);
- return $f > $self->current_age($opt{time});
-}
-
-
-sub fresh_until
-{
- my($self, %opt) = @_;
- $opt{time} ||= time;
- my $f = $self->freshness_lifetime(%opt);
- return undef unless defined($f);
- return $f - $self->current_age($opt{time}) + $opt{time};
-}
-
-1;
-
-
-__END__
-
-#line 645
diff --git a/software/Slic3r-1.3.0.64bit/lib/HTTP/Status.pm b/software/Slic3r-1.3.0.64bit/lib/HTTP/Status.pm
deleted file mode 100644
index 4bedf649..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/HTTP/Status.pm
+++ /dev/null
@@ -1,120 +0,0 @@
-#line 1 "HTTP/Status.pm"
-package HTTP::Status;
-
-use strict;
-use warnings;
-
-require 5.002; # because we use prototypes
-
-use base 'Exporter';
-our @EXPORT = qw(is_info is_success is_redirect is_error status_message);
-our @EXPORT_OK = qw(is_client_error is_server_error);
-
-our $VERSION = "6.11";
-
-# Note also addition of mnemonics to @EXPORT below
-
-# Unmarked codes are from RFC 2616
-# See also: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
-
-my %StatusCode = (
- 100 => 'Continue',
- 101 => 'Switching Protocols',
- 102 => 'Processing', # RFC 2518 (WebDAV)
- 200 => 'OK',
- 201 => 'Created',
- 202 => 'Accepted',
- 203 => 'Non-Authoritative Information',
- 204 => 'No Content',
- 205 => 'Reset Content',
- 206 => 'Partial Content',
- 207 => 'Multi-Status', # RFC 2518 (WebDAV)
- 208 => 'Already Reported', # RFC 5842
- 300 => 'Multiple Choices',
- 301 => 'Moved Permanently',
- 302 => 'Found',
- 303 => 'See Other',
- 304 => 'Not Modified',
- 305 => 'Use Proxy',
- 307 => 'Temporary Redirect',
- 308 => 'Permanent Redirect', # RFC 7238
- 400 => 'Bad Request',
- 401 => 'Unauthorized',
- 402 => 'Payment Required',
- 403 => 'Forbidden',
- 404 => 'Not Found',
- 405 => 'Method Not Allowed',
- 406 => 'Not Acceptable',
- 407 => 'Proxy Authentication Required',
- 408 => 'Request Timeout',
- 409 => 'Conflict',
- 410 => 'Gone',
- 411 => 'Length Required',
- 412 => 'Precondition Failed',
- 413 => 'Request Entity Too Large',
- 414 => 'Request-URI Too Large',
- 415 => 'Unsupported Media Type',
- 416 => 'Request Range Not Satisfiable',
- 417 => 'Expectation Failed',
- 418 => 'I\'m a teapot', # RFC 2324
- 422 => 'Unprocessable Entity', # RFC 2518 (WebDAV)
- 423 => 'Locked', # RFC 2518 (WebDAV)
- 424 => 'Failed Dependency', # RFC 2518 (WebDAV)
- 425 => 'No code', # WebDAV Advanced Collections
- 426 => 'Upgrade Required', # RFC 2817
- 428 => 'Precondition Required',
- 429 => 'Too Many Requests',
- 431 => 'Request Header Fields Too Large',
- 449 => 'Retry with', # unofficial Microsoft
- 500 => 'Internal Server Error',
- 501 => 'Not Implemented',
- 502 => 'Bad Gateway',
- 503 => 'Service Unavailable',
- 504 => 'Gateway Timeout',
- 505 => 'HTTP Version Not Supported',
- 506 => 'Variant Also Negotiates', # RFC 2295
- 507 => 'Insufficient Storage', # RFC 2518 (WebDAV)
- 509 => 'Bandwidth Limit Exceeded', # unofficial
- 510 => 'Not Extended', # RFC 2774
- 511 => 'Network Authentication Required',
-);
-
-my $mnemonicCode = '';
-my ($code, $message);
-while (($code, $message) = each %StatusCode) {
- # create mnemonic subroutines
- $message =~ s/I'm/I am/;
- $message =~ tr/a-z \-/A-Z__/;
- $mnemonicCode .= "sub HTTP_$message () { $code }\n";
- $mnemonicCode .= "*RC_$message = \\&HTTP_$message;\n"; # legacy
- $mnemonicCode .= "push(\@EXPORT_OK, 'HTTP_$message');\n";
- $mnemonicCode .= "push(\@EXPORT, 'RC_$message');\n";
-}
-eval $mnemonicCode; # only one eval for speed
-die if $@;
-
-# backwards compatibility
-*RC_MOVED_TEMPORARILY = \&RC_FOUND; # 302 was renamed in the standard
-push(@EXPORT, "RC_MOVED_TEMPORARILY");
-
-our %EXPORT_TAGS = (
- constants => [grep /^HTTP_/, @EXPORT_OK],
- is => [grep /^is_/, @EXPORT, @EXPORT_OK],
-);
-
-
-sub status_message ($) { $StatusCode{$_[0]}; }
-
-sub is_info ($) { $_[0] >= 100 && $_[0] < 200; }
-sub is_success ($) { $_[0] >= 200 && $_[0] < 300; }
-sub is_redirect ($) { $_[0] >= 300 && $_[0] < 400; }
-sub is_error ($) { $_[0] >= 400 && $_[0] < 600; }
-sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
-sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
-
-1;
-
-
-__END__
-
-#line 270
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO.pm b/software/Slic3r-1.3.0.64bit/lib/IO.pm
deleted file mode 100644
index 31ab6624..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO.pm
+++ /dev/null
@@ -1,33 +0,0 @@
-#line 1 "IO.pm"
-#
-
-package IO;
-
-use XSLoader ();
-use Carp;
-use strict;
-use warnings;
-
-our $VERSION = "1.36_01";
-XSLoader::load 'IO', $VERSION;
-
-sub import {
- shift;
-
- warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated})
- if @_ == 0 ;
-
- my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
-
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
- or croak $@;
-}
-
-1;
-
-__END__
-
-#line 70
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Bzip2.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Bzip2.pm
deleted file mode 100644
index 6f1dd246..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Bzip2.pm
+++ /dev/null
@@ -1,155 +0,0 @@
-#line 1 "IO/Compress/Adapter/Bzip2.pm"
-package IO::Compress::Adapter::Bzip2 ;
-
-use strict;
-use warnings;
-use bytes;
-
-use IO::Compress::Base::Common 2.074 qw(:Status);
-
-use Compress::Raw::Bzip2 2.074 ;
-
-our ($VERSION);
-$VERSION = '2.074';
-
-sub mkCompObject
-{
- my $BlockSize100K = shift ;
- my $WorkFactor = shift ;
- my $Verbosity = shift ;
-
- $BlockSize100K = 1 if ! defined $BlockSize100K ;
- $WorkFactor = 0 if ! defined $WorkFactor ;
- $Verbosity = 0 if ! defined $Verbosity ;
-
- my ($def, $status) = new Compress::Raw::Bzip2(1, $BlockSize100K,
- $WorkFactor, $Verbosity);
-
- return (undef, "Could not create Deflate object: $status", $status)
- if $status != BZ_OK ;
-
- return bless {'Def' => $def,
- 'Error' => '',
- 'ErrorNo' => 0,
- } ;
-}
-
-sub compr
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->bzdeflate($_[0], $_[1]) ;
- $self->{ErrorNo} = $status;
-
- if ($status != BZ_RUN_OK)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-}
-
-sub flush
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->bzflush($_[0]);
- $self->{ErrorNo} = $status;
-
- if ($status != BZ_RUN_OK)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-
-}
-
-sub close
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->bzclose($_[0]);
- $self->{ErrorNo} = $status;
-
- if ($status != BZ_STREAM_END)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-
-}
-
-
-sub reset
-{
- my $self = shift ;
-
- my $outer = $self->{Outer};
-
- my ($def, $status) = new Compress::Raw::Bzip2();
- $self->{ErrorNo} = ($status == BZ_OK) ? 0 : $status ;
-
- if ($status != BZ_OK)
- {
- $self->{Error} = "Cannot create Deflate object: $status";
- return STATUS_ERROR;
- }
-
- $self->{Def} = $def;
-
- return STATUS_OK;
-}
-
-sub compressedBytes
-{
- my $self = shift ;
- $self->{Def}->compressedBytes();
-}
-
-sub uncompressedBytes
-{
- my $self = shift ;
- $self->{Def}->uncompressedBytes();
-}
-
-#sub total_out
-#{
-# my $self = shift ;
-# 0;
-#}
-#
-
-#sub total_in
-#{
-# my $self = shift ;
-# $self->{Def}->total_in();
-#}
-#
-#sub crc32
-#{
-# my $self = shift ;
-# $self->{Def}->crc32();
-#}
-#
-#sub adler32
-#{
-# my $self = shift ;
-# $self->{Def}->adler32();
-#}
-
-
-1;
-
-__END__
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Deflate.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Deflate.pm
deleted file mode 100644
index 69051272..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Adapter/Deflate.pm
+++ /dev/null
@@ -1,171 +0,0 @@
-#line 1 "IO/Compress/Adapter/Deflate.pm"
-package IO::Compress::Adapter::Deflate ;
-
-use strict;
-use warnings;
-use bytes;
-
-use IO::Compress::Base::Common 2.074 qw(:Status);
-use Compress::Raw::Zlib 2.074 qw( !crc32 !adler32 ) ;
-
-require Exporter;
-our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS);
-
-$VERSION = '2.074';
-@ISA = qw(Exporter);
-@EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS;
-%EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS;
-@EXPORT = @EXPORT_OK;
-%DEFLATE_CONSTANTS = %EXPORT_TAGS ;
-
-sub mkCompObject
-{
- my $crc32 = shift ;
- my $adler32 = shift ;
- my $level = shift ;
- my $strategy = shift ;
-
- my ($def, $status) = new Compress::Raw::Zlib::Deflate
- -AppendOutput => 1,
- -CRC32 => $crc32,
- -ADLER32 => $adler32,
- -Level => $level,
- -Strategy => $strategy,
- -WindowBits => - MAX_WBITS;
-
- return (undef, "Cannot create Deflate object: $status", $status)
- if $status != Z_OK;
-
- return bless {'Def' => $def,
- 'Error' => '',
- } ;
-}
-
-sub compr
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->deflate($_[0], $_[1]) ;
- $self->{ErrorNo} = $status;
-
- if ($status != Z_OK)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-}
-
-sub flush
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $opt = $_[1] || Z_FINISH;
- my $status = $def->flush($_[0], $opt);
- $self->{ErrorNo} = $status;
-
- if ($status != Z_OK)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-}
-
-sub close
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- $def->flush($_[0], Z_FINISH)
- if defined $def ;
-}
-
-sub reset
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->deflateReset() ;
- $self->{ErrorNo} = $status;
- if ($status != Z_OK)
- {
- $self->{Error} = "Deflate Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-}
-
-sub deflateParams
-{
- my $self = shift ;
-
- my $def = $self->{Def};
-
- my $status = $def->deflateParams(@_);
- $self->{ErrorNo} = $status;
- if ($status != Z_OK)
- {
- $self->{Error} = "deflateParams Error: $status";
- return STATUS_ERROR;
- }
-
- return STATUS_OK;
-}
-
-
-
-#sub total_out
-#{
-# my $self = shift ;
-# $self->{Def}->total_out();
-#}
-#
-#sub total_in
-#{
-# my $self = shift ;
-# $self->{Def}->total_in();
-#}
-
-sub compressedBytes
-{
- my $self = shift ;
-
- $self->{Def}->compressedBytes();
-}
-
-sub uncompressedBytes
-{
- my $self = shift ;
- $self->{Def}->uncompressedBytes();
-}
-
-
-
-
-sub crc32
-{
- my $self = shift ;
- $self->{Def}->crc32();
-}
-
-sub adler32
-{
- my $self = shift ;
- $self->{Def}->adler32();
-}
-
-
-1;
-
-__END__
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base.pm
deleted file mode 100644
index ec2aa645..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base.pm
+++ /dev/null
@@ -1,1012 +0,0 @@
-#line 1 "IO/Compress/Base.pm"
-
-package IO::Compress::Base ;
-
-require 5.006 ;
-
-use strict ;
-use warnings;
-
-use IO::Compress::Base::Common 2.074 ;
-
-use IO::File (); ;
-use Scalar::Util ();
-
-#use File::Glob;
-#require Exporter ;
-use Carp() ;
-use Symbol();
-#use bytes;
-
-our (@ISA, $VERSION);
-@ISA = qw(IO::File Exporter);
-
-$VERSION = '2.074';
-
-#Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16.
-
-sub saveStatus
-{
- my $self = shift ;
- ${ *$self->{ErrorNo} } = shift() + 0 ;
- ${ *$self->{Error} } = '' ;
-
- return ${ *$self->{ErrorNo} } ;
-}
-
-
-sub saveErrorString
-{
- my $self = shift ;
- my $retval = shift ;
- ${ *$self->{Error} } = shift ;
- ${ *$self->{ErrorNo} } = shift() + 0 if @_ ;
-
- return $retval;
-}
-
-sub croakError
-{
- my $self = shift ;
- $self->saveErrorString(0, $_[0]);
- Carp::croak $_[0];
-}
-
-sub closeError
-{
- my $self = shift ;
- my $retval = shift ;
-
- my $errno = *$self->{ErrorNo};
- my $error = ${ *$self->{Error} };
-
- $self->close();
-
- *$self->{ErrorNo} = $errno ;
- ${ *$self->{Error} } = $error ;
-
- return $retval;
-}
-
-
-
-sub error
-{
- my $self = shift ;
- return ${ *$self->{Error} } ;
-}
-
-sub errorNo
-{
- my $self = shift ;
- return ${ *$self->{ErrorNo} } ;
-}
-
-
-sub writeAt
-{
- my $self = shift ;
- my $offset = shift;
- my $data = shift;
-
- if (defined *$self->{FH}) {
- my $here = tell(*$self->{FH});
- return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!)
- if $here < 0 ;
- seek(*$self->{FH}, $offset, IO::Handle::SEEK_SET)
- or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ;
- defined *$self->{FH}->write($data, length $data)
- or return $self->saveErrorString(undef, $!, $!) ;
- seek(*$self->{FH}, $here, IO::Handle::SEEK_SET)
- or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ;
- }
- else {
- substr(${ *$self->{Buffer} }, $offset, length($data)) = $data ;
- }
-
- return 1;
-}
-
-sub outputPayload
-{
-
- my $self = shift ;
- return $self->output(@_);
-}
-
-
-sub output
-{
- my $self = shift ;
- my $data = shift ;
- my $last = shift ;
-
- return 1
- if length $data == 0 && ! $last ;
-
- if ( *$self->{FilterContainer} ) {
- *_ = \$data;
- &{ *$self->{FilterContainer} }();
- }
-
- if (length $data) {
- if ( defined *$self->{FH} ) {
- defined *$self->{FH}->write( $data, length $data )
- or return $self->saveErrorString(0, $!, $!);
- }
- else {
- ${ *$self->{Buffer} } .= $data ;
- }
- }
-
- return 1;
-}
-
-sub getOneShotParams
-{
- return ( 'multistream' => [IO::Compress::Base::Common::Parse_boolean, 1],
- );
-}
-
-our %PARAMS = (
- # Generic Parameters
- 'autoclose' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'encode' => [IO::Compress::Base::Common::Parse_any, undef],
- 'strict' => [IO::Compress::Base::Common::Parse_boolean, 1],
- 'append' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'binmodein' => [IO::Compress::Base::Common::Parse_boolean, 0],
-
- 'filtercontainer' => [IO::Compress::Base::Common::Parse_code, undef],
- );
-
-sub checkParams
-{
- my $self = shift ;
- my $class = shift ;
-
- my $got = shift || IO::Compress::Base::Parameters::new();
-
- $got->parse(
- {
- %PARAMS,
-
-
- $self->getExtraParams(),
- *$self->{OneShot} ? $self->getOneShotParams()
- : (),
- },
- @_) or $self->croakError("${class}: " . $got->getError()) ;
-
- return $got ;
-}
-
-sub _create
-{
- my $obj = shift;
- my $got = shift;
-
- *$obj->{Closed} = 1 ;
-
- my $class = ref $obj;
- $obj->croakError("$class: Missing Output parameter")
- if ! @_ && ! $got ;
-
- my $outValue = shift ;
- my $oneShot = 1 ;
-
- if (! $got)
- {
- $oneShot = 0 ;
- $got = $obj->checkParams($class, undef, @_)
- or return undef ;
- }
-
- my $lax = ! $got->getValue('strict') ;
-
- my $outType = IO::Compress::Base::Common::whatIsOutput($outValue);
-
- $obj->ckOutputParam($class, $outValue)
- or return undef ;
-
- if ($outType eq 'buffer') {
- *$obj->{Buffer} = $outValue;
- }
- else {
- my $buff = "" ;
- *$obj->{Buffer} = \$buff ;
- }
-
- # Merge implies Append
- my $merge = $got->getValue('merge') ;
- my $appendOutput = $got->getValue('append') || $merge ;
- *$obj->{Append} = $appendOutput;
- *$obj->{FilterContainer} = $got->getValue('filtercontainer') ;
-
- if ($merge)
- {
- # Switch off Merge mode if output file/buffer is empty/doesn't exist
- if (($outType eq 'buffer' && length $$outValue == 0 ) ||
- ($outType ne 'buffer' && (! -e $outValue || (-w _ && -z _))) )
- { $merge = 0 }
- }
-
- # If output is a file, check that it is writable
- #no warnings;
- #if ($outType eq 'filename' && -e $outValue && ! -w _)
- # { return $obj->saveErrorString(undef, "Output file '$outValue' is not writable" ) }
-
- $obj->ckParams($got)
- or $obj->croakError("${class}: " . $obj->error());
-
- if ($got->getValue('encode')) {
- my $want_encoding = $got->getValue('encode');
- *$obj->{Encoding} = IO::Compress::Base::Common::getEncoding($obj, $class, $want_encoding);
- my $x = *$obj->{Encoding};
- }
- else {
- *$obj->{Encoding} = undef;
- }
-
- $obj->saveStatus(STATUS_OK) ;
-
- my $status ;
- if (! $merge)
- {
- *$obj->{Compress} = $obj->mkComp($got)
- or return undef;
-
- *$obj->{UnCompSize} = new U64 ;
- *$obj->{CompSize} = new U64 ;
-
- if ( $outType eq 'buffer') {
- ${ *$obj->{Buffer} } = ''
- unless $appendOutput ;
- }
- else {
- if ($outType eq 'handle') {
- *$obj->{FH} = $outValue ;
- setBinModeOutput(*$obj->{FH}) ;
- #$outValue->flush() ;
- *$obj->{Handle} = 1 ;
- if ($appendOutput)
- {
- seek(*$obj->{FH}, 0, IO::Handle::SEEK_END)
- or return $obj->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ;
-
- }
- }
- elsif ($outType eq 'filename') {
- no warnings;
- my $mode = '>' ;
- $mode = '>>'
- if $appendOutput;
- *$obj->{FH} = new IO::File "$mode $outValue"
- or return $obj->saveErrorString(undef, "cannot open file '$outValue': $!", $!) ;
- *$obj->{StdIO} = ($outValue eq '-');
- setBinModeOutput(*$obj->{FH}) ;
- }
- }
-
- *$obj->{Header} = $obj->mkHeader($got) ;
- $obj->output( *$obj->{Header} )
- or return undef;
- $obj->beforePayload();
- }
- else
- {
- *$obj->{Compress} = $obj->createMerge($outValue, $outType)
- or return undef;
- }
-
- *$obj->{Closed} = 0 ;
- *$obj->{AutoClose} = $got->getValue('autoclose') ;
- *$obj->{Output} = $outValue;
- *$obj->{ClassName} = $class;
- *$obj->{Got} = $got;
- *$obj->{OneShot} = 0 ;
-
- return $obj ;
-}
-
-sub ckOutputParam
-{
- my $self = shift ;
- my $from = shift ;
- my $outType = IO::Compress::Base::Common::whatIsOutput($_[0]);
-
- $self->croakError("$from: output parameter not a filename, filehandle or scalar ref")
- if ! $outType ;
-
- #$self->croakError("$from: output filename is undef or null string")
- #if $outType eq 'filename' && (! defined $_[0] || $_[0] eq '') ;
-
- $self->croakError("$from: output buffer is read-only")
- if $outType eq 'buffer' && Scalar::Util::readonly(${ $_[0] });
-
- return 1;
-}
-
-
-sub _def
-{
- my $obj = shift ;
-
- my $class= (caller)[0] ;
- my $name = (caller(1))[3] ;
-
- $obj->croakError("$name: expected at least 1 parameters\n")
- unless @_ >= 1 ;
-
- my $input = shift ;
- my $haveOut = @_ ;
- my $output = shift ;
-
- my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output)
- or return undef ;
-
- push @_, $output if $haveOut && $x->{Hash};
-
- *$obj->{OneShot} = 1 ;
-
- my $got = $obj->checkParams($name, undef, @_)
- or return undef ;
-
- $x->{Got} = $got ;
-
-# if ($x->{Hash})
-# {
-# while (my($k, $v) = each %$input)
-# {
-# $v = \$input->{$k}
-# unless defined $v ;
-#
-# $obj->_singleTarget($x, 1, $k, $v, @_)
-# or return undef ;
-# }
-#
-# return keys %$input ;
-# }
-
- if ($x->{GlobMap})
- {
- $x->{oneInput} = 1 ;
- foreach my $pair (@{ $x->{Pairs} })
- {
- my ($from, $to) = @$pair ;
- $obj->_singleTarget($x, 1, $from, $to, @_)
- or return undef ;
- }
-
- return scalar @{ $x->{Pairs} } ;
- }
-
- if (! $x->{oneOutput} )
- {
- my $inFile = ($x->{inType} eq 'filenames'
- || $x->{inType} eq 'filename');
-
- $x->{inType} = $inFile ? 'filename' : 'buffer';
-
- foreach my $in ($x->{oneInput} ? $input : @$input)
- {
- my $out ;
- $x->{oneInput} = 1 ;
-
- $obj->_singleTarget($x, $inFile, $in, \$out, @_)
- or return undef ;
-
- push @$output, \$out ;
- #if ($x->{outType} eq 'array')
- # { push @$output, \$out }
- #else
- # { $output->{$in} = \$out }
- }
-
- return 1 ;
- }
-
- # finally the 1 to 1 and n to 1
- return $obj->_singleTarget($x, 1, $input, $output, @_);
-
- Carp::croak "should not be here" ;
-}
-
-sub _singleTarget
-{
- my $obj = shift ;
- my $x = shift ;
- my $inputIsFilename = shift;
- my $input = shift;
-
- if ($x->{oneInput})
- {
- $obj->getFileInfo($x->{Got}, $input)
- if isaScalar($input) || (isaFilename($input) and $inputIsFilename) ;
-
- my $z = $obj->_create($x->{Got}, @_)
- or return undef ;
-
-
- defined $z->_wr2($input, $inputIsFilename)
- or return $z->closeError(undef) ;
-
- return $z->close() ;
- }
- else
- {
- my $afterFirst = 0 ;
- my $inputIsFilename = ($x->{inType} ne 'array');
- my $keep = $x->{Got}->clone();
-
- #for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input)
- for my $element ( @$input)
- {
- my $isFilename = isaFilename($element);
-
- if ( $afterFirst ++ )
- {
- defined addInterStream($obj, $element, $isFilename)
- or return $obj->closeError(undef) ;
- }
- else
- {
- $obj->getFileInfo($x->{Got}, $element)
- if isaScalar($element) || $isFilename;
-
- $obj->_create($x->{Got}, @_)
- or return undef ;
- }
-
- defined $obj->_wr2($element, $isFilename)
- or return $obj->closeError(undef) ;
-
- *$obj->{Got} = $keep->clone();
- }
- return $obj->close() ;
- }
-
-}
-
-sub _wr2
-{
- my $self = shift ;
-
- my $source = shift ;
- my $inputIsFilename = shift;
-
- my $input = $source ;
- if (! $inputIsFilename)
- {
- $input = \$source
- if ! ref $source;
- }
-
- if ( ref $input && ref $input eq 'SCALAR' )
- {
- return $self->syswrite($input, @_) ;
- }
-
- if ( ! ref $input || isaFilehandle($input))
- {
- my $isFilehandle = isaFilehandle($input) ;
-
- my $fh = $input ;
-
- if ( ! $isFilehandle )
- {
- $fh = new IO::File "<$input"
- or return $self->saveErrorString(undef, "cannot open file '$input': $!", $!) ;
- }
- binmode $fh if *$self->{Got}->valueOrDefault('binmodein') ;
-
- my $status ;
- my $buff ;
- my $count = 0 ;
- while ($status = read($fh, $buff, 16 * 1024)) {
- $count += length $buff;
- defined $self->syswrite($buff, @_)
- or return undef ;
- }
-
- return $self->saveErrorString(undef, $!, $!)
- if ! defined $status ;
-
- if ( (!$isFilehandle || *$self->{AutoClose}) && $input ne '-')
- {
- $fh->close()
- or return undef ;
- }
-
- return $count ;
- }
-
- Carp::croak "Should not be here";
- return undef;
-}
-
-sub addInterStream
-{
- my $self = shift ;
- my $input = shift ;
- my $inputIsFilename = shift ;
-
- if (*$self->{Got}->getValue('multistream'))
- {
- $self->getFileInfo(*$self->{Got}, $input)
- #if isaFilename($input) and $inputIsFilename ;
- if isaScalar($input) || isaFilename($input) ;
-
- # TODO -- newStream needs to allow gzip/zip header to be modified
- return $self->newStream();
- }
- elsif (*$self->{Got}->getValue('autoflush'))
- {
- #return $self->flush(Z_FULL_FLUSH);
- }
-
- return 1 ;
-}
-
-sub getFileInfo
-{
-}
-
-sub TIEHANDLE
-{
- return $_[0] if ref($_[0]);
- die "OOPS\n" ;
-}
-
-sub UNTIE
-{
- my $self = shift ;
-}
-
-sub DESTROY
-{
- my $self = shift ;
- local ($., $@, $!, $^E, $?);
-
- $self->close() ;
-
- # TODO - memory leak with 5.8.0 - this isn't called until
- # global destruction
- #
- %{ *$self } = () ;
- undef $self ;
-}
-
-
-
-sub filterUncompressed
-{
-}
-
-sub syswrite
-{
- my $self = shift ;
-
- my $buffer ;
- if (ref $_[0] ) {
- $self->croakError( *$self->{ClassName} . "::write: not a scalar reference" )
- unless ref $_[0] eq 'SCALAR' ;
- $buffer = $_[0] ;
- }
- else {
- $buffer = \$_[0] ;
- }
-
- if (@_ > 1) {
- my $slen = defined $$buffer ? length($$buffer) : 0;
- my $len = $slen;
- my $offset = 0;
- $len = $_[1] if $_[1] < $len;
-
- if (@_ > 2) {
- $offset = $_[2] || 0;
- $self->croakError(*$self->{ClassName} . "::write: offset outside string")
- if $offset > $slen;
- if ($offset < 0) {
- $offset += $slen;
- $self->croakError( *$self->{ClassName} . "::write: offset outside string") if $offset < 0;
- }
- my $rem = $slen - $offset;
- $len = $rem if $rem < $len;
- }
-
- $buffer = \substr($$buffer, $offset, $len) ;
- }
-
- return 0 if (! defined $$buffer || length $$buffer == 0) && ! *$self->{FlushPending};
-
-# *$self->{Pending} .= $$buffer ;
-#
-# return length $$buffer
-# if (length *$self->{Pending} < 1024 * 16 && ! *$self->{FlushPending}) ;
-#
-# $$buffer = *$self->{Pending} ;
-# *$self->{Pending} = '';
-
- if (*$self->{Encoding}) {
- $$buffer = *$self->{Encoding}->encode($$buffer);
- }
- else {
- $] >= 5.008 and ( utf8::downgrade($$buffer, 1)
- or Carp::croak "Wide character in " . *$self->{ClassName} . "::write:");
- }
-
- $self->filterUncompressed($buffer);
-
- my $buffer_length = defined $$buffer ? length($$buffer) : 0 ;
- *$self->{UnCompSize}->add($buffer_length) ;
-
- my $outBuffer='';
- my $status = *$self->{Compress}->compr($buffer, $outBuffer) ;
-
- return $self->saveErrorString(undef, *$self->{Compress}{Error},
- *$self->{Compress}{ErrorNo})
- if $status == STATUS_ERROR;
-
- *$self->{CompSize}->add(length $outBuffer) ;
-
- $self->outputPayload($outBuffer)
- or return undef;
-
- return $buffer_length;
-}
-
-sub print
-{
- my $self = shift;
-
- #if (ref $self) {
- # $self = *$self{GLOB} ;
- #}
-
- if (defined $\) {
- if (defined $,) {
- defined $self->syswrite(join($,, @_) . $\);
- } else {
- defined $self->syswrite(join("", @_) . $\);
- }
- } else {
- if (defined $,) {
- defined $self->syswrite(join($,, @_));
- } else {
- defined $self->syswrite(join("", @_));
- }
- }
-}
-
-sub printf
-{
- my $self = shift;
- my $fmt = shift;
- defined $self->syswrite(sprintf($fmt, @_));
-}
-
-sub _flushCompressed
-{
- my $self = shift ;
-
- my $outBuffer='';
- my $status = *$self->{Compress}->flush($outBuffer, @_) ;
- return $self->saveErrorString(0, *$self->{Compress}{Error},
- *$self->{Compress}{ErrorNo})
- if $status == STATUS_ERROR;
-
- if ( defined *$self->{FH} ) {
- *$self->{FH}->clearerr();
- }
-
- *$self->{CompSize}->add(length $outBuffer) ;
-
- $self->outputPayload($outBuffer)
- or return 0;
- return 1;
-}
-
-sub flush
-{
- my $self = shift ;
-
- $self->_flushCompressed(@_)
- or return 0;
-
- if ( defined *$self->{FH} ) {
- defined *$self->{FH}->flush()
- or return $self->saveErrorString(0, $!, $!);
- }
-
- return 1;
-}
-
-sub beforePayload
-{
-}
-
-sub _newStream
-{
- my $self = shift ;
- my $got = shift;
-
- my $class = ref $self;
-
- $self->_writeTrailer()
- or return 0 ;
-
- $self->ckParams($got)
- or $self->croakError("newStream: $self->{Error}");
-
- if ($got->getValue('encode')) {
- my $want_encoding = $got->getValue('encode');
- *$self->{Encoding} = IO::Compress::Base::Common::getEncoding($self, $class, $want_encoding);
- }
- else {
- *$self->{Encoding} = undef;
- }
-
- *$self->{Compress} = $self->mkComp($got)
- or return 0;
-
- *$self->{Header} = $self->mkHeader($got) ;
- $self->output(*$self->{Header} )
- or return 0;
-
- *$self->{UnCompSize}->reset();
- *$self->{CompSize}->reset();
-
- $self->beforePayload();
-
- return 1 ;
-}
-
-sub newStream
-{
- my $self = shift ;
-
- my $got = $self->checkParams('newStream', *$self->{Got}, @_)
- or return 0 ;
-
- $self->_newStream($got);
-
-# *$self->{Compress} = $self->mkComp($got)
-# or return 0;
-#
-# *$self->{Header} = $self->mkHeader($got) ;
-# $self->output(*$self->{Header} )
-# or return 0;
-#
-# *$self->{UnCompSize}->reset();
-# *$self->{CompSize}->reset();
-#
-# $self->beforePayload();
-#
-# return 1 ;
-}
-
-sub reset
-{
- my $self = shift ;
- return *$self->{Compress}->reset() ;
-}
-
-sub _writeTrailer
-{
- my $self = shift ;
-
- my $trailer = '';
-
- my $status = *$self->{Compress}->close($trailer) ;
- return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo})
- if $status == STATUS_ERROR;
-
- *$self->{CompSize}->add(length $trailer) ;
-
- $trailer .= $self->mkTrailer();
- defined $trailer
- or return 0;
-
- return $self->output($trailer);
-}
-
-sub _writeFinalTrailer
-{
- my $self = shift ;
-
- return $self->output($self->mkFinalTrailer());
-}
-
-sub close
-{
- my $self = shift ;
- return 1 if *$self->{Closed} || ! *$self->{Compress} ;
- *$self->{Closed} = 1 ;
-
- untie *$self
- if $] >= 5.008 ;
-
- *$self->{FlushPending} = 1 ;
- $self->_writeTrailer()
- or return 0 ;
-
- $self->_writeFinalTrailer()
- or return 0 ;
-
- $self->output( "", 1 )
- or return 0;
-
- if (defined *$self->{FH}) {
-
- if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) {
- $! = 0 ;
- *$self->{FH}->close()
- or return $self->saveErrorString(0, $!, $!);
- }
- delete *$self->{FH} ;
- # This delete can set $! in older Perls, so reset the errno
- $! = 0 ;
- }
-
- return 1;
-}
-
-
-#sub total_in
-#sub total_out
-#sub msg
-#
-#sub crc
-#{
-# my $self = shift ;
-# return *$self->{Compress}->crc32() ;
-#}
-#
-#sub msg
-#{
-# my $self = shift ;
-# return *$self->{Compress}->msg() ;
-#}
-#
-#sub dict_adler
-#{
-# my $self = shift ;
-# return *$self->{Compress}->dict_adler() ;
-#}
-#
-#sub get_Level
-#{
-# my $self = shift ;
-# return *$self->{Compress}->get_Level() ;
-#}
-#
-#sub get_Strategy
-#{
-# my $self = shift ;
-# return *$self->{Compress}->get_Strategy() ;
-#}
-
-
-sub tell
-{
- my $self = shift ;
-
- return *$self->{UnCompSize}->get32bit() ;
-}
-
-sub eof
-{
- my $self = shift ;
-
- return *$self->{Closed} ;
-}
-
-
-sub seek
-{
- my $self = shift ;
- my $position = shift;
- my $whence = shift ;
-
- my $here = $self->tell() ;
- my $target = 0 ;
-
- #use IO::Handle qw(SEEK_SET SEEK_CUR SEEK_END);
- use IO::Handle ;
-
- if ($whence == IO::Handle::SEEK_SET) {
- $target = $position ;
- }
- elsif ($whence == IO::Handle::SEEK_CUR || $whence == IO::Handle::SEEK_END) {
- $target = $here + $position ;
- }
- else {
- $self->croakError(*$self->{ClassName} . "::seek: unknown value, $whence, for whence parameter");
- }
-
- # short circuit if seeking to current offset
- return 1 if $target == $here ;
-
- # Outlaw any attempt to seek backwards
- $self->croakError(*$self->{ClassName} . "::seek: cannot seek backwards")
- if $target < $here ;
-
- # Walk the file to the new offset
- my $offset = $target - $here ;
-
- my $buffer ;
- defined $self->syswrite("\x00" x $offset)
- or return 0;
-
- return 1 ;
-}
-
-sub binmode
-{
- 1;
-# my $self = shift ;
-# return defined *$self->{FH}
-# ? binmode *$self->{FH}
-# : 1 ;
-}
-
-sub fileno
-{
- my $self = shift ;
- return defined *$self->{FH}
- ? *$self->{FH}->fileno()
- : undef ;
-}
-
-sub opened
-{
- my $self = shift ;
- return ! *$self->{Closed} ;
-}
-
-sub autoflush
-{
- my $self = shift ;
- return defined *$self->{FH}
- ? *$self->{FH}->autoflush(@_)
- : undef ;
-}
-
-sub input_line_number
-{
- return undef ;
-}
-
-
-sub _notAvailable
-{
- my $name = shift ;
- return sub { Carp::croak "$name Not Available: File opened only for output" ; } ;
-}
-
-*read = _notAvailable('read');
-*READ = _notAvailable('read');
-*readline = _notAvailable('readline');
-*READLINE = _notAvailable('readline');
-*getc = _notAvailable('getc');
-*GETC = _notAvailable('getc');
-
-*FILENO = \&fileno;
-*PRINT = \&print;
-*PRINTF = \&printf;
-*WRITE = \&syswrite;
-*write = \&syswrite;
-*SEEK = \&seek;
-*TELL = \&tell;
-*EOF = \&eof;
-*CLOSE = \&close;
-*BINMODE = \&binmode;
-
-#*sysread = \&_notAvailable;
-#*syswrite = \&_write;
-
-1;
-
-__END__
-
-#line 1049
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base/Common.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base/Common.pm
deleted file mode 100644
index 4f2e8313..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Base/Common.pm
+++ /dev/null
@@ -1,1046 +0,0 @@
-#line 1 "IO/Compress/Base/Common.pm"
-package IO::Compress::Base::Common;
-
-use strict ;
-use warnings;
-use bytes;
-
-use Carp;
-use Scalar::Util qw(blessed readonly);
-use File::GlobMapper;
-
-require Exporter;
-our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE);
-@ISA = qw(Exporter);
-$VERSION = '2.074';
-
-@EXPORT = qw( isaFilehandle isaFilename isaScalar
- whatIsInput whatIsOutput
- isaFileGlobString cleanFileGlobString oneTarget
- setBinModeInput setBinModeOutput
- ckInOutParams
- createSelfTiedObject
-
- isGeMax32
-
- MAX32
-
- WANT_CODE
- WANT_EXT
- WANT_UNDEF
- WANT_HASH
-
- STATUS_OK
- STATUS_ENDSTREAM
- STATUS_EOF
- STATUS_ERROR
- );
-
-%EXPORT_TAGS = ( Status => [qw( STATUS_OK
- STATUS_ENDSTREAM
- STATUS_EOF
- STATUS_ERROR
- )]);
-
-
-use constant STATUS_OK => 0;
-use constant STATUS_ENDSTREAM => 1;
-use constant STATUS_EOF => 2;
-use constant STATUS_ERROR => -1;
-use constant MAX16 => 0xFFFF ;
-use constant MAX32 => 0xFFFFFFFF ;
-use constant MAX32cmp => 0xFFFFFFFF + 1 - 1; # for 5.6.x on 32-bit need to force an non-IV value
-
-
-sub isGeMax32
-{
- return $_[0] >= MAX32cmp ;
-}
-
-sub hasEncode()
-{
- if (! defined $HAS_ENCODE) {
- eval
- {
- require Encode;
- Encode->import();
- };
-
- $HAS_ENCODE = $@ ? 0 : 1 ;
- }
-
- return $HAS_ENCODE;
-}
-
-sub getEncoding($$$)
-{
- my $obj = shift;
- my $class = shift ;
- my $want_encoding = shift ;
-
- $obj->croakError("$class: Encode module needed to use -Encode")
- if ! hasEncode();
-
- my $encoding = Encode::find_encoding($want_encoding);
-
- $obj->croakError("$class: Encoding '$want_encoding' is not available")
- if ! $encoding;
-
- return $encoding;
-}
-
-our ($needBinmode);
-$needBinmode = ($^O eq 'MSWin32' ||
- ($] >= 5.006 && eval ' ${^UNICODE} || ${^UTF8LOCALE} '))
- ? 1 : 1 ;
-
-sub setBinModeInput($)
-{
- my $handle = shift ;
-
- binmode $handle
- if $needBinmode;
-}
-
-sub setBinModeOutput($)
-{
- my $handle = shift ;
-
- binmode $handle
- if $needBinmode;
-}
-
-sub isaFilehandle($)
-{
- use utf8; # Pragma needed to keep Perl 5.6.0 happy
- return (defined $_[0] and
- (UNIVERSAL::isa($_[0],'GLOB') or
- UNIVERSAL::isa($_[0],'IO::Handle') or
- UNIVERSAL::isa(\$_[0],'GLOB'))
- )
-}
-
-sub isaScalar
-{
- return ( defined($_[0]) and ref($_[0]) eq 'SCALAR' and defined ${ $_[0] } ) ;
-}
-
-sub isaFilename($)
-{
- return (defined $_[0] and
- ! ref $_[0] and
- UNIVERSAL::isa(\$_[0], 'SCALAR'));
-}
-
-sub isaFileGlobString
-{
- return defined $_[0] && $_[0] =~ /^<.*>$/;
-}
-
-sub cleanFileGlobString
-{
- my $string = shift ;
-
- $string =~ s/^\s*<\s*(.*)\s*>\s*$/$1/;
-
- return $string;
-}
-
-use constant WANT_CODE => 1 ;
-use constant WANT_EXT => 2 ;
-use constant WANT_UNDEF => 4 ;
-#use constant WANT_HASH => 8 ;
-use constant WANT_HASH => 0 ;
-
-sub whatIsInput($;$)
-{
- my $got = whatIs(@_);
-
- if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-')
- {
- #use IO::File;
- $got = 'handle';
- $_[0] = *STDIN;
- #$_[0] = new IO::File("<-");
- }
-
- return $got;
-}
-
-sub whatIsOutput($;$)
-{
- my $got = whatIs(@_);
-
- if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-')
- {
- $got = 'handle';
- $_[0] = *STDOUT;
- #$_[0] = new IO::File(">-");
- }
-
- return $got;
-}
-
-sub whatIs ($;$)
-{
- return 'handle' if isaFilehandle($_[0]);
-
- my $wantCode = defined $_[1] && $_[1] & WANT_CODE ;
- my $extended = defined $_[1] && $_[1] & WANT_EXT ;
- my $undef = defined $_[1] && $_[1] & WANT_UNDEF ;
- my $hash = defined $_[1] && $_[1] & WANT_HASH ;
-
- return 'undef' if ! defined $_[0] && $undef ;
-
- if (ref $_[0]) {
- return '' if blessed($_[0]); # is an object
- #return '' if UNIVERSAL::isa($_[0], 'UNIVERSAL'); # is an object
- return 'buffer' if UNIVERSAL::isa($_[0], 'SCALAR');
- return 'array' if UNIVERSAL::isa($_[0], 'ARRAY') && $extended ;
- return 'hash' if UNIVERSAL::isa($_[0], 'HASH') && $hash ;
- return 'code' if UNIVERSAL::isa($_[0], 'CODE') && $wantCode ;
- return '';
- }
-
- return 'fileglob' if $extended && isaFileGlobString($_[0]);
- return 'filename';
-}
-
-sub oneTarget
-{
- return $_[0] =~ /^(code|handle|buffer|filename)$/;
-}
-
-sub IO::Compress::Base::Validator::new
-{
- my $class = shift ;
-
- my $Class = shift ;
- my $error_ref = shift ;
- my $reportClass = shift ;
-
- my %data = (Class => $Class,
- Error => $error_ref,
- reportClass => $reportClass,
- ) ;
-
- my $obj = bless \%data, $class ;
-
- local $Carp::CarpLevel = 1;
-
- my $inType = $data{inType} = whatIsInput($_[0], WANT_EXT|WANT_HASH);
- my $outType = $data{outType} = whatIsOutput($_[1], WANT_EXT|WANT_HASH);
-
- my $oneInput = $data{oneInput} = oneTarget($inType);
- my $oneOutput = $data{oneOutput} = oneTarget($outType);
-
- if (! $inType)
- {
- $obj->croakError("$reportClass: illegal input parameter") ;
- #return undef ;
- }
-
-# if ($inType eq 'hash')
-# {
-# $obj->{Hash} = 1 ;
-# $obj->{oneInput} = 1 ;
-# return $obj->validateHash($_[0]);
-# }
-
- if (! $outType)
- {
- $obj->croakError("$reportClass: illegal output parameter") ;
- #return undef ;
- }
-
-
- if ($inType ne 'fileglob' && $outType eq 'fileglob')
- {
- $obj->croakError("Need input fileglob for outout fileglob");
- }
-
-# if ($inType ne 'fileglob' && $outType eq 'hash' && $inType ne 'filename' )
-# {
-# $obj->croakError("input must ne filename or fileglob when output is a hash");
-# }
-
- if ($inType eq 'fileglob' && $outType eq 'fileglob')
- {
- $data{GlobMap} = 1 ;
- $data{inType} = $data{outType} = 'filename';
- my $mapper = new File::GlobMapper($_[0], $_[1]);
- if ( ! $mapper )
- {
- return $obj->saveErrorString($File::GlobMapper::Error) ;
- }
- $data{Pairs} = $mapper->getFileMap();
-
- return $obj;
- }
-
- $obj->croakError("$reportClass: input and output $inType are identical")
- if $inType eq $outType && $_[0] eq $_[1] && $_[0] ne '-' ;
-
- if ($inType eq 'fileglob') # && $outType ne 'fileglob'
- {
- my $glob = cleanFileGlobString($_[0]);
- my @inputs = glob($glob);
-
- if (@inputs == 0)
- {
- # TODO -- legal or die?
- die "globmap matched zero file -- legal or die???" ;
- }
- elsif (@inputs == 1)
- {
- $obj->validateInputFilenames($inputs[0])
- or return undef;
- $_[0] = $inputs[0] ;
- $data{inType} = 'filename' ;
- $data{oneInput} = 1;
- }
- else
- {
- $obj->validateInputFilenames(@inputs)
- or return undef;
- $_[0] = [ @inputs ] ;
- $data{inType} = 'filenames' ;
- }
- }
- elsif ($inType eq 'filename')
- {
- $obj->validateInputFilenames($_[0])
- or return undef;
- }
- elsif ($inType eq 'array')
- {
- $data{inType} = 'filenames' ;
- $obj->validateInputArray($_[0])
- or return undef ;
- }
-
- return $obj->saveErrorString("$reportClass: output buffer is read-only")
- if $outType eq 'buffer' && readonly(${ $_[1] });
-
- if ($outType eq 'filename' )
- {
- $obj->croakError("$reportClass: output filename is undef or null string")
- if ! defined $_[1] || $_[1] eq '' ;
-
- if (-e $_[1])
- {
- if (-d _ )
- {
- return $obj->saveErrorString("output file '$_[1]' is a directory");
- }
- }
- }
-
- return $obj ;
-}
-
-sub IO::Compress::Base::Validator::saveErrorString
-{
- my $self = shift ;
- ${ $self->{Error} } = shift ;
- return undef;
-
-}
-
-sub IO::Compress::Base::Validator::croakError
-{
- my $self = shift ;
- $self->saveErrorString($_[0]);
- croak $_[0];
-}
-
-
-
-sub IO::Compress::Base::Validator::validateInputFilenames
-{
- my $self = shift ;
-
- foreach my $filename (@_)
- {
- $self->croakError("$self->{reportClass}: input filename is undef or null string")
- if ! defined $filename || $filename eq '' ;
-
- next if $filename eq '-';
-
- if (! -e $filename )
- {
- return $self->saveErrorString("input file '$filename' does not exist");
- }
-
- if (-d _ )
- {
- return $self->saveErrorString("input file '$filename' is a directory");
- }
-
-# if (! -r _ )
-# {
-# return $self->saveErrorString("cannot open file '$filename': $!");
-# }
- }
-
- return 1 ;
-}
-
-sub IO::Compress::Base::Validator::validateInputArray
-{
- my $self = shift ;
-
- if ( @{ $_[0] } == 0 )
- {
- return $self->saveErrorString("empty array reference") ;
- }
-
- foreach my $element ( @{ $_[0] } )
- {
- my $inType = whatIsInput($element);
-
- if (! $inType)
- {
- $self->croakError("unknown input parameter") ;
- }
- elsif($inType eq 'filename')
- {
- $self->validateInputFilenames($element)
- or return undef ;
- }
- else
- {
- $self->croakError("not a filename") ;
- }
- }
-
- return 1 ;
-}
-
-#sub IO::Compress::Base::Validator::validateHash
-#{
-# my $self = shift ;
-# my $href = shift ;
-#
-# while (my($k, $v) = each %$href)
-# {
-# my $ktype = whatIsInput($k);
-# my $vtype = whatIsOutput($v, WANT_EXT|WANT_UNDEF) ;
-#
-# if ($ktype ne 'filename')
-# {
-# return $self->saveErrorString("hash key not filename") ;
-# }
-#
-# my %valid = map { $_ => 1 } qw(filename buffer array undef handle) ;
-# if (! $valid{$vtype})
-# {
-# return $self->saveErrorString("hash value not ok") ;
-# }
-# }
-#
-# return $self ;
-#}
-
-sub createSelfTiedObject
-{
- my $class = shift || (caller)[0] ;
- my $error_ref = shift ;
-
- my $obj = bless Symbol::gensym(), ref($class) || $class;
- tie *$obj, $obj if $] >= 5.005;
- *$obj->{Closed} = 1 ;
- $$error_ref = '';
- *$obj->{Error} = $error_ref ;
- my $errno = 0 ;
- *$obj->{ErrorNo} = \$errno ;
-
- return $obj;
-}
-
-
-
-#package Parse::Parameters ;
-#
-#
-#require Exporter;
-#our ($VERSION, @ISA, @EXPORT);
-#$VERSION = '2.000_08';
-#@ISA = qw(Exporter);
-
-$EXPORT_TAGS{Parse} = [qw( ParseParameters
- Parse_any Parse_unsigned Parse_signed
- Parse_boolean Parse_string
- Parse_code
- Parse_writable_scalar
- )
- ];
-
-push @EXPORT, @{ $EXPORT_TAGS{Parse} } ;
-
-use constant Parse_any => 0x01;
-use constant Parse_unsigned => 0x02;
-use constant Parse_signed => 0x04;
-use constant Parse_boolean => 0x08;
-use constant Parse_string => 0x10;
-use constant Parse_code => 0x20;
-
-#use constant Parse_store_ref => 0x100 ;
-#use constant Parse_multiple => 0x100 ;
-use constant Parse_writable => 0x200 ;
-use constant Parse_writable_scalar => 0x400 | Parse_writable ;
-
-use constant OFF_PARSED => 0 ;
-use constant OFF_TYPE => 1 ;
-use constant OFF_DEFAULT => 2 ;
-use constant OFF_FIXED => 3 ;
-#use constant OFF_FIRST_ONLY => 4 ;
-#use constant OFF_STICKY => 5 ;
-
-use constant IxError => 0;
-use constant IxGot => 1 ;
-
-sub ParseParameters
-{
- my $level = shift || 0 ;
-
- my $sub = (caller($level + 1))[3] ;
- local $Carp::CarpLevel = 1 ;
-
- return $_[1]
- if @_ == 2 && defined $_[1] && UNIVERSAL::isa($_[1], "IO::Compress::Base::Parameters");
-
- my $p = new IO::Compress::Base::Parameters() ;
- $p->parse(@_)
- or croak "$sub: $p->[IxError]" ;
-
- return $p;
-}
-
-
-use strict;
-
-use warnings;
-use Carp;
-
-
-sub Init
-{
- my $default = shift ;
- my %got ;
-
- my $obj = IO::Compress::Base::Parameters::new();
- while (my ($key, $v) = each %$default)
- {
- croak "need 2 params [@$v]"
- if @$v != 2 ;
-
- my ($type, $value) = @$v ;
-# my ($first_only, $sticky, $type, $value) = @$v ;
- my $sticky = 0;
- my $x ;
- $obj->_checkType($key, \$value, $type, 0, \$x)
- or return undef ;
-
- $key = lc $key;
-
-# if (! $sticky) {
-# $x = []
-# if $type & Parse_multiple;
-
-# $got{$key} = [0, $type, $value, $x, $first_only, $sticky] ;
- $got{$key} = [0, $type, $value, $x] ;
-# }
-#
-# $got{$key}[OFF_PARSED] = 0 ;
- }
-
- return bless \%got, "IO::Compress::Base::Parameters::Defaults" ;
-}
-
-sub IO::Compress::Base::Parameters::new
-{
- #my $class = shift ;
-
- my $obj;
- $obj->[IxError] = '';
- $obj->[IxGot] = {} ;
-
- return bless $obj, 'IO::Compress::Base::Parameters' ;
-}
-
-sub IO::Compress::Base::Parameters::setError
-{
- my $self = shift ;
- my $error = shift ;
- my $retval = @_ ? shift : undef ;
-
-
- $self->[IxError] = $error ;
- return $retval;
-}
-
-sub IO::Compress::Base::Parameters::getError
-{
- my $self = shift ;
- return $self->[IxError] ;
-}
-
-sub IO::Compress::Base::Parameters::parse
-{
- my $self = shift ;
- my $default = shift ;
-
- my $got = $self->[IxGot] ;
- my $firstTime = keys %{ $got } == 0 ;
-
- my (@Bad) ;
- my @entered = () ;
-
- # Allow the options to be passed as a hash reference or
- # as the complete hash.
- if (@_ == 0) {
- @entered = () ;
- }
- elsif (@_ == 1) {
- my $href = $_[0] ;
-
- return $self->setError("Expected even number of parameters, got 1")
- if ! defined $href or ! ref $href or ref $href ne "HASH" ;
-
- foreach my $key (keys %$href) {
- push @entered, $key ;
- push @entered, \$href->{$key} ;
- }
- }
- else {
-
- my $count = @_;
- return $self->setError("Expected even number of parameters, got $count")
- if $count % 2 != 0 ;
-
- for my $i (0.. $count / 2 - 1) {
- push @entered, $_[2 * $i] ;
- push @entered, \$_[2 * $i + 1] ;
- }
- }
-
- foreach my $key (keys %$default)
- {
-
- my ($type, $value) = @{ $default->{$key} } ;
-
- if ($firstTime) {
- $got->{$key} = [0, $type, $value, $value] ;
- }
- else
- {
- $got->{$key}[OFF_PARSED] = 0 ;
- }
- }
-
-
- my %parsed = ();
-
-
- for my $i (0.. @entered / 2 - 1) {
- my $key = $entered[2* $i] ;
- my $value = $entered[2* $i+1] ;
-
- #print "Key [$key] Value [$value]" ;
- #print defined $$value ? "[$$value]\n" : "[undef]\n";
-
- $key =~ s/^-// ;
- my $canonkey = lc $key;
-
- if ($got->{$canonkey})
- {
- my $type = $got->{$canonkey}[OFF_TYPE] ;
- my $parsed = $parsed{$canonkey};
- ++ $parsed{$canonkey};
-
- return $self->setError("Muliple instances of '$key' found")
- if $parsed ;
-
- my $s ;
- $self->_checkType($key, $value, $type, 1, \$s)
- or return undef ;
-
- $value = $$value ;
- $got->{$canonkey} = [1, $type, $value, $s] ;
-
- }
- else
- { push (@Bad, $key) }
- }
-
- if (@Bad) {
- my ($bad) = join(", ", @Bad) ;
- return $self->setError("unknown key value(s) $bad") ;
- }
-
- return 1;
-}
-
-sub IO::Compress::Base::Parameters::_checkType
-{
- my $self = shift ;
-
- my $key = shift ;
- my $value = shift ;
- my $type = shift ;
- my $validate = shift ;
- my $output = shift;
-
- #local $Carp::CarpLevel = $level ;
- #print "PARSE $type $key $value $validate $sub\n" ;
-
- if ($type & Parse_writable_scalar)
- {
- return $self->setError("Parameter '$key' not writable")
- if readonly $$value ;
-
- if (ref $$value)
- {
- return $self->setError("Parameter '$key' not a scalar reference")
- if ref $$value ne 'SCALAR' ;
-
- $$output = $$value ;
- }
- else
- {
- return $self->setError("Parameter '$key' not a scalar")
- if ref $value ne 'SCALAR' ;
-
- $$output = $value ;
- }
-
- return 1;
- }
-
-
- $value = $$value ;
-
- if ($type & Parse_any)
- {
- $$output = $value ;
- return 1;
- }
- elsif ($type & Parse_unsigned)
- {
-
- return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'")
- if ! defined $value ;
- return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
- if $value !~ /^\d+$/;
-
- $$output = defined $value ? $value : 0 ;
- return 1;
- }
- elsif ($type & Parse_signed)
- {
- return $self->setError("Parameter '$key' must be a signed int, got 'undef'")
- if ! defined $value ;
- return $self->setError("Parameter '$key' must be a signed int, got '$value'")
- if $value !~ /^-?\d+$/;
-
- $$output = defined $value ? $value : 0 ;
- return 1 ;
- }
- elsif ($type & Parse_boolean)
- {
- return $self->setError("Parameter '$key' must be an int, got '$value'")
- if defined $value && $value !~ /^\d*$/;
-
- $$output = defined $value && $value != 0 ? 1 : 0 ;
- return 1;
- }
-
- elsif ($type & Parse_string)
- {
- $$output = defined $value ? $value : "" ;
- return 1;
- }
- elsif ($type & Parse_code)
- {
- return $self->setError("Parameter '$key' must be a code reference, got '$value'")
- if (! defined $value || ref $value ne 'CODE') ;
-
- $$output = defined $value ? $value : "" ;
- return 1;
- }
-
- $$output = $value ;
- return 1;
-}
-
-sub IO::Compress::Base::Parameters::parsed
-{
- return $_[0]->[IxGot]{$_[1]}[OFF_PARSED] ;
-}
-
-
-sub IO::Compress::Base::Parameters::getValue
-{
- return $_[0]->[IxGot]{$_[1]}[OFF_FIXED] ;
-}
-sub IO::Compress::Base::Parameters::setValue
-{
- $_[0]->[IxGot]{$_[1]}[OFF_PARSED] = 1;
- $_[0]->[IxGot]{$_[1]}[OFF_DEFAULT] = $_[2] ;
- $_[0]->[IxGot]{$_[1]}[OFF_FIXED] = $_[2] ;
-}
-
-sub IO::Compress::Base::Parameters::valueRef
-{
- return $_[0]->[IxGot]{$_[1]}[OFF_FIXED] ;
-}
-
-sub IO::Compress::Base::Parameters::valueOrDefault
-{
- my $self = shift ;
- my $name = shift ;
- my $default = shift ;
-
- my $value = $self->[IxGot]{$name}[OFF_DEFAULT] ;
-
- return $value if defined $value ;
- return $default ;
-}
-
-sub IO::Compress::Base::Parameters::wantValue
-{
- return defined $_[0]->[IxGot]{$_[1]}[OFF_DEFAULT] ;
-}
-
-sub IO::Compress::Base::Parameters::clone
-{
- my $self = shift ;
- my $obj = [] ;
- my %got ;
-
- my $hash = $self->[IxGot] ;
- for my $k (keys %{ $hash })
- {
- $got{$k} = [ @{ $hash->{$k} } ];
- }
-
- $obj->[IxError] = $self->[IxError];
- $obj->[IxGot] = \%got ;
-
- return bless $obj, 'IO::Compress::Base::Parameters' ;
-}
-
-package U64;
-
-use constant MAX32 => 0xFFFFFFFF ;
-use constant HI_1 => MAX32 + 1 ;
-use constant LOW => 0 ;
-use constant HIGH => 1;
-
-sub new
-{
- return bless [ 0, 0 ], $_[0]
- if @_ == 1 ;
-
- return bless [ $_[1], 0 ], $_[0]
- if @_ == 2 ;
-
- return bless [ $_[2], $_[1] ], $_[0]
- if @_ == 3 ;
-}
-
-sub newUnpack_V64
-{
- my ($low, $hi) = unpack "V V", $_[0] ;
- bless [ $low, $hi ], "U64";
-}
-
-sub newUnpack_V32
-{
- my $string = shift;
-
- my $low = unpack "V", $string ;
- bless [ $low, 0 ], "U64";
-}
-
-sub reset
-{
- $_[0]->[HIGH] = $_[0]->[LOW] = 0;
-}
-
-sub clone
-{
- bless [ @{$_[0]} ], ref $_[0] ;
-}
-
-sub getHigh
-{
- return $_[0]->[HIGH];
-}
-
-sub getLow
-{
- return $_[0]->[LOW];
-}
-
-sub get32bit
-{
- return $_[0]->[LOW];
-}
-
-sub get64bit
-{
- # Not using << here because the result will still be
- # a 32-bit value on systems where int size is 32-bits
- return $_[0]->[HIGH] * HI_1 + $_[0]->[LOW];
-}
-
-sub add
-{
-# my $self = shift;
- my $value = $_[1];
-
- if (ref $value eq 'U64') {
- $_[0]->[HIGH] += $value->[HIGH] ;
- $value = $value->[LOW];
- }
- elsif ($value > MAX32) {
- $_[0]->[HIGH] += int($value / HI_1) ;
- $value = $value % HI_1;
- }
-
- my $available = MAX32 - $_[0]->[LOW] ;
-
- if ($value > $available) {
- ++ $_[0]->[HIGH] ;
- $_[0]->[LOW] = $value - $available - 1;
- }
- else {
- $_[0]->[LOW] += $value ;
- }
-}
-
-sub add32
-{
-# my $self = shift;
- my $value = $_[1];
-
- if ($value > MAX32) {
- $_[0]->[HIGH] += int($value / HI_1) ;
- $value = $value % HI_1;
- }
-
- my $available = MAX32 - $_[0]->[LOW] ;
-
- if ($value > $available) {
- ++ $_[0]->[HIGH] ;
- $_[0]->[LOW] = $value - $available - 1;
- }
- else {
- $_[0]->[LOW] += $value ;
- }
-}
-
-sub subtract
-{
- my $self = shift;
- my $value = shift;
-
- if (ref $value eq 'U64') {
-
- if ($value->[HIGH]) {
- die "bad"
- if $self->[HIGH] == 0 ||
- $value->[HIGH] > $self->[HIGH] ;
-
- $self->[HIGH] -= $value->[HIGH] ;
- }
-
- $value = $value->[LOW] ;
- }
-
- if ($value > $self->[LOW]) {
- -- $self->[HIGH] ;
- $self->[LOW] = MAX32 - $value + $self->[LOW] + 1 ;
- }
- else {
- $self->[LOW] -= $value;
- }
-}
-
-sub equal
-{
- my $self = shift;
- my $other = shift;
-
- return $self->[LOW] == $other->[LOW] &&
- $self->[HIGH] == $other->[HIGH] ;
-}
-
-sub gt
-{
- my $self = shift;
- my $other = shift;
-
- return $self->cmp($other) > 0 ;
-}
-
-sub cmp
-{
- my $self = shift;
- my $other = shift ;
-
- if ($self->[LOW] == $other->[LOW]) {
- return $self->[HIGH] - $other->[HIGH] ;
- }
- else {
- return $self->[LOW] - $other->[LOW] ;
- }
-}
-
-
-sub is64bit
-{
- return $_[0]->[HIGH] > 0 ;
-}
-
-sub isAlmost64bit
-{
- return $_[0]->[HIGH] > 0 || $_[0]->[LOW] == MAX32 ;
-}
-
-sub getPacked_V64
-{
- return pack "V V", @{ $_[0] } ;
-}
-
-sub getPacked_V32
-{
- return pack "V", $_[0]->[LOW] ;
-}
-
-sub pack_V64
-{
- return pack "V V", $_[0], 0;
-}
-
-
-sub full32
-{
- return $_[0] == MAX32 ;
-}
-
-sub Value_VV64
-{
- my $buffer = shift;
-
- my ($lo, $hi) = unpack ("V V" , $buffer);
- no warnings 'uninitialized';
- return $hi * HI_1 + $lo;
-}
-
-
-package IO::Compress::Base::Common;
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Bzip2.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Bzip2.pm
deleted file mode 100644
index 9328d7cd..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Bzip2.pm
+++ /dev/null
@@ -1,144 +0,0 @@
-#line 1 "IO/Compress/Bzip2.pm"
-package IO::Compress::Bzip2 ;
-
-use strict ;
-use warnings;
-use bytes;
-require Exporter ;
-
-use IO::Compress::Base 2.074 ;
-
-use IO::Compress::Base::Common 2.074 qw();
-use IO::Compress::Adapter::Bzip2 2.074 ;
-
-
-
-our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bzip2Error);
-
-$VERSION = '2.074';
-$Bzip2Error = '';
-
-@ISA = qw(IO::Compress::Base Exporter);
-@EXPORT_OK = qw( $Bzip2Error bzip2 ) ;
-%EXPORT_TAGS = %IO::Compress::Base::EXPORT_TAGS ;
-push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
-Exporter::export_ok_tags('all');
-
-
-
-sub new
-{
- my $class = shift ;
-
- my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$Bzip2Error);
- return $obj->_create(undef, @_);
-}
-
-sub bzip2
-{
- my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$Bzip2Error);
- $obj->_def(@_);
-}
-
-
-sub mkHeader
-{
- my $self = shift ;
- return '';
-
-}
-
-sub getExtraParams
-{
- my $self = shift ;
-
- use IO::Compress::Base::Common 2.074 qw(:Parse);
-
- return (
- 'blocksize100k' => [IO::Compress::Base::Common::Parse_unsigned, 1],
- 'workfactor' => [IO::Compress::Base::Common::Parse_unsigned, 0],
- 'verbosity' => [IO::Compress::Base::Common::Parse_boolean, 0],
- );
-}
-
-
-
-sub ckParams
-{
- my $self = shift ;
- my $got = shift;
-
- # check that BlockSize100K is a number between 1 & 9
- if ($got->parsed('blocksize100k')) {
- my $value = $got->getValue('blocksize100k');
- return $self->saveErrorString(undef, "Parameter 'BlockSize100K' not between 1 and 9, got $value")
- unless defined $value && $value >= 1 && $value <= 9;
-
- }
-
- # check that WorkFactor between 0 & 250
- if ($got->parsed('workfactor')) {
- my $value = $got->getValue('workfactor');
- return $self->saveErrorString(undef, "Parameter 'WorkFactor' not between 0 and 250, got $value")
- unless $value >= 0 && $value <= 250;
- }
-
- return 1 ;
-}
-
-
-sub mkComp
-{
- my $self = shift ;
- my $got = shift ;
-
- my $BlockSize100K = $got->getValue('blocksize100k');
- my $WorkFactor = $got->getValue('workfactor');
- my $Verbosity = $got->getValue('verbosity');
-
- my ($obj, $errstr, $errno) = IO::Compress::Adapter::Bzip2::mkCompObject(
- $BlockSize100K, $WorkFactor,
- $Verbosity);
-
- return $self->saveErrorString(undef, $errstr, $errno)
- if ! defined $obj;
-
- return $obj;
-}
-
-
-sub mkTrailer
-{
- my $self = shift ;
- return '';
-}
-
-sub mkFinalTrailer
-{
- return '';
-}
-
-#sub newHeader
-#{
-# my $self = shift ;
-# return '';
-#}
-
-sub getInverseClass
-{
- return ('IO::Uncompress::Bunzip2');
-}
-
-sub getFileInfo
-{
- my $self = shift ;
- my $params = shift;
- my $file = shift ;
-
-}
-
-1;
-
-__END__
-
-#line 806
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Deflate.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Deflate.pm
deleted file mode 100644
index 3f22abe6..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Deflate.pm
+++ /dev/null
@@ -1,171 +0,0 @@
-#line 1 "IO/Compress/Deflate.pm"
-package IO::Compress::Deflate ;
-
-require 5.006 ;
-
-use strict ;
-use warnings;
-use bytes;
-
-require Exporter ;
-
-use IO::Compress::RawDeflate 2.074 ();
-use IO::Compress::Adapter::Deflate 2.074 ;
-
-use IO::Compress::Zlib::Constants 2.074 ;
-use IO::Compress::Base::Common 2.074 qw();
-
-
-our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $DeflateError);
-
-$VERSION = '2.074';
-$DeflateError = '';
-
-@ISA = qw(IO::Compress::RawDeflate Exporter);
-@EXPORT_OK = qw( $DeflateError deflate ) ;
-%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
-
-push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
-Exporter::export_ok_tags('all');
-
-
-sub new
-{
- my $class = shift ;
-
- my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$DeflateError);
- return $obj->_create(undef, @_);
-}
-
-sub deflate
-{
- my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$DeflateError);
- return $obj->_def(@_);
-}
-
-
-sub bitmask($$$$)
-{
- my $into = shift ;
- my $value = shift ;
- my $offset = shift ;
- my $mask = shift ;
-
- return $into | (($value & $mask) << $offset ) ;
-}
-
-sub mkDeflateHdr($$$;$)
-{
- my $method = shift ;
- my $cinfo = shift;
- my $level = shift;
- my $fdict_adler = shift ;
-
- my $cmf = 0;
- my $flg = 0;
- my $fdict = 0;
- $fdict = 1 if defined $fdict_adler;
-
- $cmf = bitmask($cmf, $method, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS);
- $cmf = bitmask($cmf, $cinfo, ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS);
-
- $flg = bitmask($flg, $fdict, ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS);
- $flg = bitmask($flg, $level, ZLIB_FLG_LEVEL_OFFSET, ZLIB_FLG_LEVEL_BITS);
-
- my $fcheck = 31 - ($cmf * 256 + $flg) % 31 ;
- $flg = bitmask($flg, $fcheck, ZLIB_FLG_FCHECK_OFFSET, ZLIB_FLG_FCHECK_BITS);
-
- my $hdr = pack("CC", $cmf, $flg) ;
- $hdr .= pack("N", $fdict_adler) if $fdict ;
-
- return $hdr;
-}
-
-sub mkHeader
-{
- my $self = shift ;
- my $param = shift ;
-
- my $level = $param->getValue('level');
- my $strategy = $param->getValue('strategy');
-
- my $lflag ;
- $level = 6
- if $level == Z_DEFAULT_COMPRESSION ;
-
- if (ZLIB_VERNUM >= 0x1210)
- {
- if ($strategy >= Z_HUFFMAN_ONLY || $level < 2)
- { $lflag = ZLIB_FLG_LEVEL_FASTEST }
- elsif ($level < 6)
- { $lflag = ZLIB_FLG_LEVEL_FAST }
- elsif ($level == 6)
- { $lflag = ZLIB_FLG_LEVEL_DEFAULT }
- else
- { $lflag = ZLIB_FLG_LEVEL_SLOWEST }
- }
- else
- {
- $lflag = ($level - 1) >> 1 ;
- $lflag = 3 if $lflag > 3 ;
- }
-
- #my $wbits = (MAX_WBITS - 8) << 4 ;
- my $wbits = 7;
- mkDeflateHdr(ZLIB_CMF_CM_DEFLATED, $wbits, $lflag);
-}
-
-sub ckParams
-{
- my $self = shift ;
- my $got = shift;
-
- $got->setValue('adler32' => 1);
- return 1 ;
-}
-
-
-sub mkTrailer
-{
- my $self = shift ;
- return pack("N", *$self->{Compress}->adler32()) ;
-}
-
-sub mkFinalTrailer
-{
- return '';
-}
-
-#sub newHeader
-#{
-# my $self = shift ;
-# return *$self->{Header};
-#}
-
-sub getExtraParams
-{
- my $self = shift ;
- return $self->getZlibParams(),
-}
-
-sub getInverseClass
-{
- return ('IO::Uncompress::Inflate',
- \$IO::Uncompress::Inflate::InflateError);
-}
-
-sub getFileInfo
-{
- my $self = shift ;
- my $params = shift;
- my $file = shift ;
-
-}
-
-
-
-1;
-
-__END__
-
-#line 940
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip.pm
deleted file mode 100644
index 85567203..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip.pm
+++ /dev/null
@@ -1,278 +0,0 @@
-#line 1 "IO/Compress/Gzip.pm"
-package IO::Compress::Gzip ;
-
-require 5.006 ;
-
-use strict ;
-use warnings;
-use bytes;
-
-require Exporter ;
-
-use IO::Compress::RawDeflate 2.074 () ;
-use IO::Compress::Adapter::Deflate 2.074 ;
-
-use IO::Compress::Base::Common 2.074 qw(:Status );
-use IO::Compress::Gzip::Constants 2.074 ;
-use IO::Compress::Zlib::Extra 2.074 ;
-
-BEGIN
-{
- if (defined &utf8::downgrade )
- { *noUTF8 = \&utf8::downgrade }
- else
- { *noUTF8 = sub {} }
-}
-
-our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $GzipError);
-
-$VERSION = '2.074';
-$GzipError = '' ;
-
-@ISA = qw(IO::Compress::RawDeflate Exporter);
-@EXPORT_OK = qw( $GzipError gzip ) ;
-%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
-
-push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
-Exporter::export_ok_tags('all');
-
-sub new
-{
- my $class = shift ;
-
- my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$GzipError);
-
- $obj->_create(undef, @_);
-}
-
-
-sub gzip
-{
- my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$GzipError);
- return $obj->_def(@_);
-}
-
-#sub newHeader
-#{
-# my $self = shift ;
-# #return GZIP_MINIMUM_HEADER ;
-# return $self->mkHeader(*$self->{Got});
-#}
-
-sub getExtraParams
-{
- my $self = shift ;
-
- return (
- # zlib behaviour
- $self->getZlibParams(),
-
- # Gzip header fields
- 'minimal' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'comment' => [IO::Compress::Base::Common::Parse_any, undef],
- 'name' => [IO::Compress::Base::Common::Parse_any, undef],
- 'time' => [IO::Compress::Base::Common::Parse_any, undef],
- 'textflag' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'headercrc' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'os_code' => [IO::Compress::Base::Common::Parse_unsigned, $Compress::Raw::Zlib::gzip_os_code],
- 'extrafield'=> [IO::Compress::Base::Common::Parse_any, undef],
- 'extraflags'=> [IO::Compress::Base::Common::Parse_any, undef],
-
- );
-}
-
-
-sub ckParams
-{
- my $self = shift ;
- my $got = shift ;
-
- # gzip always needs crc32
- $got->setValue('crc32' => 1);
-
- return 1
- if $got->getValue('merge') ;
-
- my $strict = $got->getValue('strict') ;
-
-
- {
- if (! $got->parsed('time') ) {
- # Modification time defaults to now.
- $got->setValue(time => time) ;
- }
-
- # Check that the Name & Comment don't have embedded NULLs
- # Also check that they only contain ISO 8859-1 chars.
- if ($got->parsed('name') && defined $got->getValue('name')) {
- my $name = $got->getValue('name');
-
- return $self->saveErrorString(undef, "Null Character found in Name",
- Z_DATA_ERROR)
- if $strict && $name =~ /\x00/ ;
-
- return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Name",
- Z_DATA_ERROR)
- if $strict && $name =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ;
- }
-
- if ($got->parsed('comment') && defined $got->getValue('comment')) {
- my $comment = $got->getValue('comment');
-
- return $self->saveErrorString(undef, "Null Character found in Comment",
- Z_DATA_ERROR)
- if $strict && $comment =~ /\x00/ ;
-
- return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Comment",
- Z_DATA_ERROR)
- if $strict && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o;
- }
-
- if ($got->parsed('os_code') ) {
- my $value = $got->getValue('os_code');
-
- return $self->saveErrorString(undef, "OS_Code must be between 0 and 255, got '$value'")
- if $value < 0 || $value > 255 ;
-
- }
-
- # gzip only supports Deflate at present
- $got->setValue('method' => Z_DEFLATED) ;
-
- if ( ! $got->parsed('extraflags')) {
- $got->setValue('extraflags' => 2)
- if $got->getValue('level') == Z_BEST_COMPRESSION ;
- $got->setValue('extraflags' => 4)
- if $got->getValue('level') == Z_BEST_SPEED ;
- }
-
- my $data = $got->getValue('extrafield') ;
- if (defined $data) {
- my $bad = IO::Compress::Zlib::Extra::parseExtraField($data, $strict, 1) ;
- return $self->saveErrorString(undef, "Error with ExtraField Parameter: $bad", Z_DATA_ERROR)
- if $bad ;
-
- $got->setValue('extrafield' => $data) ;
- }
- }
-
- return 1;
-}
-
-sub mkTrailer
-{
- my $self = shift ;
- return pack("V V", *$self->{Compress}->crc32(),
- *$self->{UnCompSize}->get32bit());
-}
-
-sub getInverseClass
-{
- return ('IO::Uncompress::Gunzip',
- \$IO::Uncompress::Gunzip::GunzipError);
-}
-
-sub getFileInfo
-{
- my $self = shift ;
- my $params = shift;
- my $filename = shift ;
-
- return if IO::Compress::Base::Common::isaScalar($filename);
-
- my $defaultTime = (stat($filename))[9] ;
-
- $params->setValue('name' => $filename)
- if ! $params->parsed('name') ;
-
- $params->setValue('time' => $defaultTime)
- if ! $params->parsed('time') ;
-}
-
-
-sub mkHeader
-{
- my $self = shift ;
- my $param = shift ;
-
- # short-circuit if a minimal header is requested.
- return GZIP_MINIMUM_HEADER if $param->getValue('minimal') ;
-
- # METHOD
- my $method = $param->valueOrDefault('method', GZIP_CM_DEFLATED) ;
-
- # FLAGS
- my $flags = GZIP_FLG_DEFAULT ;
- $flags |= GZIP_FLG_FTEXT if $param->getValue('textflag') ;
- $flags |= GZIP_FLG_FHCRC if $param->getValue('headercrc') ;
- $flags |= GZIP_FLG_FEXTRA if $param->wantValue('extrafield') ;
- $flags |= GZIP_FLG_FNAME if $param->wantValue('name') ;
- $flags |= GZIP_FLG_FCOMMENT if $param->wantValue('comment') ;
-
- # MTIME
- my $time = $param->valueOrDefault('time', GZIP_MTIME_DEFAULT) ;
-
- # EXTRA FLAGS
- my $extra_flags = $param->valueOrDefault('extraflags', GZIP_XFL_DEFAULT);
-
- # OS CODE
- my $os_code = $param->valueOrDefault('os_code', GZIP_OS_DEFAULT) ;
-
-
- my $out = pack("C4 V C C",
- GZIP_ID1, # ID1
- GZIP_ID2, # ID2
- $method, # Compression Method
- $flags, # Flags
- $time, # Modification Time
- $extra_flags, # Extra Flags
- $os_code, # Operating System Code
- ) ;
-
- # EXTRA
- if ($flags & GZIP_FLG_FEXTRA) {
- my $extra = $param->getValue('extrafield') ;
- $out .= pack("v", length $extra) . $extra ;
- }
-
- # NAME
- if ($flags & GZIP_FLG_FNAME) {
- my $name .= $param->getValue('name') ;
- $name =~ s/\x00.*$//;
- $out .= $name ;
- # Terminate the filename with NULL unless it already is
- $out .= GZIP_NULL_BYTE
- if !length $name or
- substr($name, 1, -1) ne GZIP_NULL_BYTE ;
- }
-
- # COMMENT
- if ($flags & GZIP_FLG_FCOMMENT) {
- my $comment .= $param->getValue('comment') ;
- $comment =~ s/\x00.*$//;
- $out .= $comment ;
- # Terminate the comment with NULL unless it already is
- $out .= GZIP_NULL_BYTE
- if ! length $comment or
- substr($comment, 1, -1) ne GZIP_NULL_BYTE;
- }
-
- # HEADER CRC
- $out .= pack("v", Compress::Raw::Zlib::crc32($out) & 0x00FF )
- if $param->getValue('headercrc') ;
-
- noUTF8($out);
-
- return $out ;
-}
-
-sub mkFinalTrailer
-{
- return '';
-}
-
-1;
-
-__END__
-
-#line 1252
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip/Constants.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip/Constants.pm
deleted file mode 100644
index c878e286..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Gzip/Constants.pm
+++ /dev/null
@@ -1,149 +0,0 @@
-#line 1 "IO/Compress/Gzip/Constants.pm"
-package IO::Compress::Gzip::Constants;
-
-use strict ;
-use warnings;
-use bytes;
-
-require Exporter;
-
-our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names);
-our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE);
-
-$VERSION = '2.074';
-
-@ISA = qw(Exporter);
-
-@EXPORT= qw(
-
- GZIP_ID_SIZE
- GZIP_ID1
- GZIP_ID2
-
- GZIP_FLG_DEFAULT
- GZIP_FLG_FTEXT
- GZIP_FLG_FHCRC
- GZIP_FLG_FEXTRA
- GZIP_FLG_FNAME
- GZIP_FLG_FCOMMENT
- GZIP_FLG_RESERVED
-
- GZIP_CM_DEFLATED
-
- GZIP_MIN_HEADER_SIZE
- GZIP_TRAILER_SIZE
-
- GZIP_MTIME_DEFAULT
- GZIP_XFL_DEFAULT
- GZIP_FEXTRA_HEADER_SIZE
- GZIP_FEXTRA_MAX_SIZE
- GZIP_FEXTRA_SUBFIELD_HEADER_SIZE
- GZIP_FEXTRA_SUBFIELD_ID_SIZE
- GZIP_FEXTRA_SUBFIELD_LEN_SIZE
- GZIP_FEXTRA_SUBFIELD_MAX_SIZE
-
- $GZIP_FNAME_INVALID_CHAR_RE
- $GZIP_FCOMMENT_INVALID_CHAR_RE
-
- GZIP_FHCRC_SIZE
-
- GZIP_ISIZE_MAX
- GZIP_ISIZE_MOD_VALUE
-
-
- GZIP_NULL_BYTE
-
- GZIP_OS_DEFAULT
-
- %GZIP_OS_Names
-
- GZIP_MINIMUM_HEADER
-
- );
-
-# Constant names derived from RFC 1952
-
-use constant GZIP_ID_SIZE => 2 ;
-use constant GZIP_ID1 => 0x1F;
-use constant GZIP_ID2 => 0x8B;
-
-use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size
-use constant GZIP_TRAILER_SIZE => 8 ;
-
-
-use constant GZIP_FLG_DEFAULT => 0x00 ;
-use constant GZIP_FLG_FTEXT => 0x01 ;
-use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip
-use constant GZIP_FLG_FEXTRA => 0x04 ;
-use constant GZIP_FLG_FNAME => 0x08 ;
-use constant GZIP_FLG_FCOMMENT => 0x10 ;
-#use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources
-use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ;
-
-use constant GZIP_XFL_DEFAULT => 0x00 ;
-
-use constant GZIP_MTIME_DEFAULT => 0x00 ;
-
-use constant GZIP_FEXTRA_HEADER_SIZE => 2 ;
-use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ;
-use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ;
-use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ;
-use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE +
- GZIP_FEXTRA_SUBFIELD_LEN_SIZE;
-use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE -
- GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ;
-
-
-if (ord('A') == 193)
-{
- # EBCDIC
- $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]';
- $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]';
-
-}
-else
-{
- $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]';
- $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]';
-}
-
-use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip
-
-use constant GZIP_CM_DEFLATED => 8 ;
-
-use constant GZIP_NULL_BYTE => "\x00";
-use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ;
-use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ;
-
-# OS Names sourced from http://www.gzip.org/format.txt
-
-use constant GZIP_OS_DEFAULT=> 0xFF ;
-%GZIP_OS_Names = (
- 0 => 'MS-DOS',
- 1 => 'Amiga',
- 2 => 'VMS',
- 3 => 'Unix',
- 4 => 'VM/CMS',
- 5 => 'Atari TOS',
- 6 => 'HPFS (OS/2, NT)',
- 7 => 'Macintosh',
- 8 => 'Z-System',
- 9 => 'CP/M',
- 10 => 'TOPS-20',
- 11 => 'NTFS (NT)',
- 12 => 'SMS QDOS',
- 13 => 'Acorn RISCOS',
- 14 => 'VFAT file system (Win95, NT)',
- 15 => 'MVS',
- 16 => 'BeOS',
- 17 => 'Tandem/NSK',
- 18 => 'THEOS',
- GZIP_OS_DEFAULT() => 'Unknown',
- ) ;
-
-use constant GZIP_MINIMUM_HEADER => pack("C4 V C C",
- GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT,
- GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ;
-
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/RawDeflate.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/RawDeflate.pm
deleted file mode 100644
index 2ca141dc..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/RawDeflate.pm
+++ /dev/null
@@ -1,224 +0,0 @@
-#line 1 "IO/Compress/RawDeflate.pm"
-package IO::Compress::RawDeflate ;
-
-# create RFC1951
-#
-use strict ;
-use warnings;
-use bytes;
-
-use IO::Compress::Base 2.074 ;
-use IO::Compress::Base::Common 2.074 qw(:Status );
-use IO::Compress::Adapter::Deflate 2.074 ;
-
-require Exporter ;
-
-our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);
-
-$VERSION = '2.074';
-$RawDeflateError = '';
-
-@ISA = qw(IO::Compress::Base Exporter);
-@EXPORT_OK = qw( $RawDeflateError rawdeflate ) ;
-push @EXPORT_OK, @IO::Compress::Adapter::Deflate::EXPORT_OK ;
-
-%EXPORT_TAGS = %IO::Compress::Adapter::Deflate::DEFLATE_CONSTANTS;
-
-
-{
- my %seen;
- foreach (keys %EXPORT_TAGS )
- {
- push @{$EXPORT_TAGS{constants}},
- grep { !$seen{$_}++ }
- @{ $EXPORT_TAGS{$_} }
- }
- $EXPORT_TAGS{all} = $EXPORT_TAGS{constants} ;
-}
-
-
-%DEFLATE_CONSTANTS = %EXPORT_TAGS;
-
-#push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
-
-Exporter::export_ok_tags('all');
-
-
-
-sub new
-{
- my $class = shift ;
-
- my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$RawDeflateError);
-
- return $obj->_create(undef, @_);
-}
-
-sub rawdeflate
-{
- my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$RawDeflateError);
- return $obj->_def(@_);
-}
-
-sub ckParams
-{
- my $self = shift ;
- my $got = shift;
-
- return 1 ;
-}
-
-sub mkComp
-{
- my $self = shift ;
- my $got = shift ;
-
- my ($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject(
- $got->getValue('crc32'),
- $got->getValue('adler32'),
- $got->getValue('level'),
- $got->getValue('strategy')
- );
-
- return $self->saveErrorString(undef, $errstr, $errno)
- if ! defined $obj;
-
- return $obj;
-}
-
-
-sub mkHeader
-{
- my $self = shift ;
- return '';
-}
-
-sub mkTrailer
-{
- my $self = shift ;
- return '';
-}
-
-sub mkFinalTrailer
-{
- return '';
-}
-
-
-#sub newHeader
-#{
-# my $self = shift ;
-# return '';
-#}
-
-sub getExtraParams
-{
- my $self = shift ;
- return getZlibParams();
-}
-
-use IO::Compress::Base::Common 2.074 qw(:Parse);
-use Compress::Raw::Zlib 2.074 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
-our %PARAMS = (
- #'method' => [IO::Compress::Base::Common::Parse_unsigned, Z_DEFLATED],
- 'level' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_COMPRESSION],
- 'strategy' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_STRATEGY],
-
- 'crc32' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'adler32' => [IO::Compress::Base::Common::Parse_boolean, 0],
- 'merge' => [IO::Compress::Base::Common::Parse_boolean, 0],
- );
-
-sub getZlibParams
-{
- return %PARAMS;
-}
-
-sub getInverseClass
-{
- return ('IO::Uncompress::RawInflate',
- \$IO::Uncompress::RawInflate::RawInflateError);
-}
-
-sub getFileInfo
-{
- my $self = shift ;
- my $params = shift;
- my $file = shift ;
-
-}
-
-use Fcntl qw(SEEK_SET);
-
-sub createMerge
-{
- my $self = shift ;
- my $outValue = shift ;
- my $outType = shift ;
-
- my ($invClass, $error_ref) = $self->getInverseClass();
- eval "require $invClass"
- or die "aaaahhhh" ;
-
- my $inf = $invClass->new( $outValue,
- Transparent => 0,
- #Strict => 1,
- AutoClose => 0,
- Scan => 1)
- or return $self->saveErrorString(undef, "Cannot create InflateScan object: $$error_ref" ) ;
-
- my $end_offset = 0;
- $inf->scan()
- or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ;
- $inf->zap($end_offset)
- or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ;
-
- my $def = *$self->{Compress} = $inf->createDeflate();
-
- *$self->{Header} = *$inf->{Info}{Header};
- *$self->{UnCompSize} = *$inf->{UnCompSize}->clone();
- *$self->{CompSize} = *$inf->{CompSize}->clone();
- # TODO -- fix this
- #*$self->{CompSize} = new U64(0, *$self->{UnCompSize_32bit});
-
-
- if ( $outType eq 'buffer')
- { substr( ${ *$self->{Buffer} }, $end_offset) = '' }
- elsif ($outType eq 'handle' || $outType eq 'filename') {
- *$self->{FH} = *$inf->{FH} ;
- delete *$inf->{FH};
- *$self->{FH}->flush() ;
- *$self->{Handle} = 1 if $outType eq 'handle';
-
- #seek(*$self->{FH}, $end_offset, SEEK_SET)
- *$self->{FH}->seek($end_offset, SEEK_SET)
- or return $self->saveErrorString(undef, $!, $!) ;
- }
-
- return $def ;
-}
-
-#### zlib specific methods
-
-sub deflateParams
-{
- my $self = shift ;
-
- my $level = shift ;
- my $strategy = shift ;
-
- my $status = *$self->{Compress}->deflateParams(Level => $level, Strategy => $strategy) ;
- return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo})
- if $status == STATUS_ERROR;
-
- return 1;
-}
-
-
-
-
-1;
-
-__END__
-
-#line 996
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Constants.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Constants.pm
deleted file mode 100644
index 17b2dd46..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Constants.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-#line 1 "IO/Compress/Zlib/Constants.pm"
-
-package IO::Compress::Zlib::Constants ;
-
-use strict ;
-use warnings;
-use bytes;
-
-require Exporter;
-
-our ($VERSION, @ISA, @EXPORT);
-
-$VERSION = '2.074';
-
-@ISA = qw(Exporter);
-
-@EXPORT= qw(
-
- ZLIB_HEADER_SIZE
- ZLIB_TRAILER_SIZE
-
- ZLIB_CMF_CM_OFFSET
- ZLIB_CMF_CM_BITS
- ZLIB_CMF_CM_DEFLATED
-
- ZLIB_CMF_CINFO_OFFSET
- ZLIB_CMF_CINFO_BITS
- ZLIB_CMF_CINFO_MAX
-
- ZLIB_FLG_FCHECK_OFFSET
- ZLIB_FLG_FCHECK_BITS
-
- ZLIB_FLG_FDICT_OFFSET
- ZLIB_FLG_FDICT_BITS
-
- ZLIB_FLG_LEVEL_OFFSET
- ZLIB_FLG_LEVEL_BITS
-
- ZLIB_FLG_LEVEL_FASTEST
- ZLIB_FLG_LEVEL_FAST
- ZLIB_FLG_LEVEL_DEFAULT
- ZLIB_FLG_LEVEL_SLOWEST
-
- ZLIB_FDICT_SIZE
-
- );
-
-# Constant names derived from RFC1950
-
-use constant ZLIB_HEADER_SIZE => 2;
-use constant ZLIB_TRAILER_SIZE => 4;
-
-use constant ZLIB_CMF_CM_OFFSET => 0;
-use constant ZLIB_CMF_CM_BITS => 0xF ; # 0b1111
-use constant ZLIB_CMF_CM_DEFLATED => 8;
-
-use constant ZLIB_CMF_CINFO_OFFSET => 4;
-use constant ZLIB_CMF_CINFO_BITS => 0xF ; # 0b1111;
-use constant ZLIB_CMF_CINFO_MAX => 7;
-
-use constant ZLIB_FLG_FCHECK_OFFSET => 0;
-use constant ZLIB_FLG_FCHECK_BITS => 0x1F ; # 0b11111;
-
-use constant ZLIB_FLG_FDICT_OFFSET => 5;
-use constant ZLIB_FLG_FDICT_BITS => 0x1 ; # 0b1;
-
-use constant ZLIB_FLG_LEVEL_OFFSET => 6;
-use constant ZLIB_FLG_LEVEL_BITS => 0x3 ; # 0b11;
-
-use constant ZLIB_FLG_LEVEL_FASTEST => 0;
-use constant ZLIB_FLG_LEVEL_FAST => 1;
-use constant ZLIB_FLG_LEVEL_DEFAULT => 2;
-use constant ZLIB_FLG_LEVEL_SLOWEST => 3;
-
-use constant ZLIB_FDICT_SIZE => 4;
-
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Extra.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Extra.pm
deleted file mode 100644
index 2bcb3949..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Compress/Zlib/Extra.pm
+++ /dev/null
@@ -1,230 +0,0 @@
-#line 1 "IO/Compress/Zlib/Extra.pm"
-package IO::Compress::Zlib::Extra;
-
-require 5.006 ;
-
-use strict ;
-use warnings;
-use bytes;
-
-our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS);
-
-$VERSION = '2.074';
-
-use IO::Compress::Gzip::Constants 2.074 ;
-
-sub ExtraFieldError
-{
- return $_[0];
- return "Error with ExtraField Parameter: $_[0]" ;
-}
-
-sub validateExtraFieldPair
-{
- my $pair = shift ;
- my $strict = shift;
- my $gzipMode = shift ;
-
- return ExtraFieldError("Not an array ref")
- unless ref $pair && ref $pair eq 'ARRAY';
-
- return ExtraFieldError("SubField must have two parts")
- unless @$pair == 2 ;
-
- return ExtraFieldError("SubField ID is a reference")
- if ref $pair->[0] ;
-
- return ExtraFieldError("SubField Data is a reference")
- if ref $pair->[1] ;
-
- # ID is exactly two chars
- return ExtraFieldError("SubField ID not two chars long")
- unless length $pair->[0] == GZIP_FEXTRA_SUBFIELD_ID_SIZE ;
-
- # Check that the 2nd byte of the ID isn't 0
- return ExtraFieldError("SubField ID 2nd byte is 0x00")
- if $strict && $gzipMode && substr($pair->[0], 1, 1) eq "\x00" ;
-
- return ExtraFieldError("SubField Data too long")
- if length $pair->[1] > GZIP_FEXTRA_SUBFIELD_MAX_SIZE ;
-
-
- return undef ;
-}
-
-sub parseRawExtra
-{
- my $data = shift ;
- my $extraRef = shift;
- my $strict = shift;
- my $gzipMode = shift ;
-
- #my $lax = shift ;
-
- #return undef
- # if $lax ;
-
- my $XLEN = length $data ;
-
- return ExtraFieldError("Too Large")
- if $XLEN > GZIP_FEXTRA_MAX_SIZE;
-
- my $offset = 0 ;
- while ($offset < $XLEN) {
-
- return ExtraFieldError("Truncated in FEXTRA Body Section")
- if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ;
-
- my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE);
- $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE;
-
- my $subLen = unpack("v", substr($data, $offset,
- GZIP_FEXTRA_SUBFIELD_LEN_SIZE));
- $offset += GZIP_FEXTRA_SUBFIELD_LEN_SIZE ;
-
- return ExtraFieldError("Truncated in FEXTRA Body Section")
- if $offset + $subLen > $XLEN ;
-
- my $bad = validateExtraFieldPair( [$id,
- substr($data, $offset, $subLen)],
- $strict, $gzipMode );
- return $bad if $bad ;
- push @$extraRef, [$id => substr($data, $offset, $subLen)]
- if defined $extraRef;;
-
- $offset += $subLen ;
- }
-
-
- return undef ;
-}
-
-sub findID
-{
- my $id_want = shift ;
- my $data = shift;
-
- my $XLEN = length $data ;
-
- my $offset = 0 ;
- while ($offset < $XLEN) {
-
- return undef
- if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ;
-
- my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE);
- $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE;
-
- my $subLen = unpack("v", substr($data, $offset,
- GZIP_FEXTRA_SUBFIELD_LEN_SIZE));
- $offset += GZIP_FEXTRA_SUBFIELD_LEN_SIZE ;
-
- return undef
- if $offset + $subLen > $XLEN ;
-
- return substr($data, $offset, $subLen)
- if $id eq $id_want ;
-
- $offset += $subLen ;
- }
-
- return undef ;
-}
-
-
-sub mkSubField
-{
- my $id = shift ;
- my $data = shift ;
-
- return $id . pack("v", length $data) . $data ;
-}
-
-sub parseExtraField
-{
- my $dataRef = $_[0];
- my $strict = $_[1];
- my $gzipMode = $_[2];
- #my $lax = @_ == 2 ? $_[1] : 1;
-
-
- # ExtraField can be any of
- #
- # -ExtraField => $data
- #
- # -ExtraField => [$id1, $data1,
- # $id2, $data2]
- # ...
- # ]
- #
- # -ExtraField => [ [$id1 => $data1],
- # [$id2 => $data2],
- # ...
- # ]
- #
- # -ExtraField => { $id1 => $data1,
- # $id2 => $data2,
- # ...
- # }
-
- if ( ! ref $dataRef ) {
-
- return undef
- if ! $strict;
-
- return parseRawExtra($dataRef, undef, 1, $gzipMode);
- }
-
- my $data = $dataRef;
- my $out = '' ;
-
- if (ref $data eq 'ARRAY') {
- if (ref $data->[0]) {
-
- foreach my $pair (@$data) {
- return ExtraFieldError("Not list of lists")
- unless ref $pair eq 'ARRAY' ;
-
- my $bad = validateExtraFieldPair($pair, $strict, $gzipMode) ;
- return $bad if $bad ;
-
- $out .= mkSubField(@$pair);
- }
- }
- else {
- return ExtraFieldError("Not even number of elements")
- unless @$data % 2 == 0;
-
- for (my $ix = 0; $ix <= @$data -1 ; $ix += 2) {
- my $bad = validateExtraFieldPair([$data->[$ix],
- $data->[$ix+1]],
- $strict, $gzipMode) ;
- return $bad if $bad ;
-
- $out .= mkSubField($data->[$ix], $data->[$ix+1]);
- }
- }
- }
- elsif (ref $data eq 'HASH') {
- while (my ($id, $info) = each %$data) {
- my $bad = validateExtraFieldPair([$id, $info], $strict, $gzipMode);
- return $bad if $bad ;
-
- $out .= mkSubField($id, $info);
- }
- }
- else {
- return ExtraFieldError("Not a scalar, array ref or hash ref") ;
- }
-
- return ExtraFieldError("Too Large")
- if length $out > GZIP_FEXTRA_MAX_SIZE;
-
- $_[0] = $out ;
-
- return undef;
-}
-
-1;
-
-__END__
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/Dir.pm b/software/Slic3r-1.3.0.64bit/lib/IO/Dir.pm
deleted file mode 100644
index 0a285a69..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/Dir.pm
+++ /dev/null
@@ -1,151 +0,0 @@
-#line 1 "IO/Dir.pm"
-# IO::Dir.pm
-#
-# Copyright (c) 1997-8 Graham Barr . All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Dir;
-
-use 5.006;
-
-use strict;
-use Carp;
-use Symbol;
-use Exporter;
-use IO::File;
-our(@ISA, $VERSION, @EXPORT_OK);
-use Tie::Hash;
-use File::stat;
-use File::Spec;
-
-@ISA = qw(Tie::Hash Exporter);
-$VERSION = "1.10";
-$VERSION = eval $VERSION;
-@EXPORT_OK = qw(DIR_UNLINK);
-
-sub DIR_UNLINK () { 1 }
-
-sub new {
- @_ >= 1 && @_ <= 2 or croak 'usage: IO::Dir->new([DIRNAME])';
- my $class = shift;
- my $dh = gensym;
- if (@_) {
- IO::Dir::open($dh, $_[0])
- or return undef;
- }
- bless $dh, $class;
-}
-
-sub DESTROY {
- my ($dh) = @_;
- local($., $@, $!, $^E, $?);
- no warnings 'io';
- closedir($dh);
-}
-
-sub open {
- @_ == 2 or croak 'usage: $dh->open(DIRNAME)';
- my ($dh, $dirname) = @_;
- return undef
- unless opendir($dh, $dirname);
- # a dir name should always have a ":" in it; assume dirname is
- # in current directory
- $dirname = ':' . $dirname if ( ($^O eq 'MacOS') && ($dirname !~ /:/) );
- ${*$dh}{io_dir_path} = $dirname;
- 1;
-}
-
-sub close {
- @_ == 1 or croak 'usage: $dh->close()';
- my ($dh) = @_;
- closedir($dh);
-}
-
-sub read {
- @_ == 1 or croak 'usage: $dh->read()';
- my ($dh) = @_;
- readdir($dh);
-}
-
-sub seek {
- @_ == 2 or croak 'usage: $dh->seek(POS)';
- my ($dh,$pos) = @_;
- seekdir($dh,$pos);
-}
-
-sub tell {
- @_ == 1 or croak 'usage: $dh->tell()';
- my ($dh) = @_;
- telldir($dh);
-}
-
-sub rewind {
- @_ == 1 or croak 'usage: $dh->rewind()';
- my ($dh) = @_;
- rewinddir($dh);
-}
-
-sub TIEHASH {
- my($class,$dir,$options) = @_;
-
- my $dh = $class->new($dir)
- or return undef;
-
- $options ||= 0;
-
- ${*$dh}{io_dir_unlink} = $options & DIR_UNLINK;
- $dh;
-}
-
-sub FIRSTKEY {
- my($dh) = @_;
- $dh->rewind;
- scalar $dh->read;
-}
-
-sub NEXTKEY {
- my($dh) = @_;
- scalar $dh->read;
-}
-
-sub EXISTS {
- my($dh,$key) = @_;
- -e File::Spec->catfile(${*$dh}{io_dir_path}, $key);
-}
-
-sub FETCH {
- my($dh,$key) = @_;
- &lstat(File::Spec->catfile(${*$dh}{io_dir_path}, $key));
-}
-
-sub STORE {
- my($dh,$key,$data) = @_;
- my($atime,$mtime) = ref($data) ? @$data : ($data,$data);
- my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key);
- unless(-e $file) {
- my $io = IO::File->new($file,O_CREAT | O_RDWR);
- $io->close if $io;
- }
- utime($atime,$mtime, $file);
-}
-
-sub DELETE {
- my($dh,$key) = @_;
-
- # Only unlink if unlink-ing is enabled
- return 0
- unless ${*$dh}{io_dir_unlink};
-
- my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key);
-
- -d $file
- ? rmdir($file)
- : unlink($file);
-}
-
-1;
-
-__END__
-
-#line 249
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/File.pm b/software/Slic3r-1.3.0.64bit/lib/IO/File.pm
deleted file mode 100644
index f5efe49b..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/File.pm
+++ /dev/null
@@ -1,84 +0,0 @@
-#line 1 "IO/File.pm"
-#
-
-package IO::File;
-
-#line 126
-
-use 5.006_001;
-use strict;
-our($VERSION, @EXPORT, @EXPORT_OK, @ISA);
-use Carp;
-use Symbol;
-use SelectSaver;
-use IO::Seekable;
-
-require Exporter;
-
-@ISA = qw(IO::Handle IO::Seekable Exporter);
-
-$VERSION = "1.16";
-
-@EXPORT = @IO::Seekable::EXPORT;
-
-eval {
- # Make all Fcntl O_XXX constants available for importing
- require Fcntl;
- my @O = grep /^O_/, @Fcntl::EXPORT;
- Fcntl->import(@O); # first we import what we want to export
- push(@EXPORT, @O);
-};
-
-################################################
-## Constructor
-##
-
-sub new {
- my $type = shift;
- my $class = ref($type) || $type || "IO::File";
- @_ >= 0 && @_ <= 3
- or croak "usage: $class->new([FILENAME [,MODE [,PERMS]]])";
- my $fh = $class->SUPER::new();
- if (@_) {
- $fh->open(@_)
- or return undef;
- }
- $fh;
-}
-
-################################################
-## Open
-##
-
-sub open {
- @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
- my ($fh, $file) = @_;
- if (@_ > 2) {
- my ($mode, $perms) = @_[2, 3];
- if ($mode =~ /^\d+$/) {
- defined $perms or $perms = 0666;
- return sysopen($fh, $file, $mode, $perms);
- } elsif ($mode =~ /:/) {
- return open($fh, $mode, $file) if @_ == 3;
- croak 'usage: $fh->open(FILENAME, IOLAYERS)';
- } else {
- return open($fh, IO::Handle::_open_mode_string($mode), $file);
- }
- }
- open($fh, $file);
-}
-
-################################################
-## Binmode
-##
-
-sub binmode {
- ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])';
-
- my($fh, $layer) = @_;
-
- return binmode $$fh unless $layer;
- return binmode $$fh, $layer;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/IO/HTML.pm b/software/Slic3r-1.3.0.64bit/lib/IO/HTML.pm
deleted file mode 100644
index 39eb4d19..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/IO/HTML.pm
+++ /dev/null
@@ -1,262 +0,0 @@
-#line 1 "IO/HTML.pm"
-#---------------------------------------------------------------------
-package IO::HTML;
-#
-# Copyright 2014 Christopher J. Madsen
-#
-# Author: Christopher J. Madsen
-# Created: 14 Jan 2012
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the same terms as Perl itself.
-#
-# 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 either the
-# GNU General Public License or the Artistic License for more details.
-#
-# ABSTRACT: Open an HTML file with automatic charset detection
-#---------------------------------------------------------------------
-
-use 5.008;
-use strict;
-use warnings;
-
-use Carp 'croak';
-use Encode 2.10 qw(decode find_encoding); # need utf-8-strict encoding
-use Exporter 5.57 'import';
-
-our $VERSION = '1.001';
-# This file is part of IO-HTML 1.001 (June 28, 2014)
-
-our $default_encoding ||= 'cp1252';
-
-our @EXPORT = qw(html_file);
-our @EXPORT_OK = qw(find_charset_in html_file_and_encoding html_outfile
- sniff_encoding);
-
-our %EXPORT_TAGS = (
- rw => [qw( html_file html_file_and_encoding html_outfile )],
- all => [ @EXPORT, @EXPORT_OK ],
-);
-
-#=====================================================================
-
-
-sub html_file
-{
- (&html_file_and_encoding)[0]; # return just the filehandle
-} # end html_file
-
-
-# Note: I made html_file and html_file_and_encoding separate functions
-# (instead of making html_file context-sensitive) because I wanted to
-# use html_file in function calls (i.e. list context) without having
-# to write "scalar html_file" all the time.
-
-sub html_file_and_encoding
-{
- my ($filename, $options) = @_;
-
- $options ||= {};
-
- open(my $in, '<:raw', $filename) or croak "Failed to open $filename: $!";
-
-
- my ($encoding, $bom) = sniff_encoding($in, $filename, $options);
-
- if (not defined $encoding) {
- croak "No default encoding specified"
- unless defined($encoding = $default_encoding);
- $encoding = find_encoding($encoding) if $options->{encoding};
- } # end if we didn't find an encoding
-
- binmode $in, sprintf(":encoding(%s):crlf",
- $options->{encoding} ? $encoding->name : $encoding);
-
- return ($in, $encoding, $bom);
-} # end html_file_and_encoding
-#---------------------------------------------------------------------
-
-
-sub html_outfile
-{
- my ($filename, $encoding, $bom) = @_;
-
- if (not defined $encoding) {
- croak "No default encoding specified"
- unless defined($encoding = $default_encoding);
- } # end if we didn't find an encoding
- elsif (ref $encoding) {
- $encoding = $encoding->name;
- }
-
- open(my $out, ">:encoding($encoding)", $filename)
- or croak "Failed to open $filename: $!";
-
- print $out "\x{FeFF}" if $bom;
-
- return $out;
-} # end html_outfile
-#---------------------------------------------------------------------
-
-
-sub sniff_encoding
-{
- my ($in, $filename, $options) = @_;
-
- $filename = 'file' unless defined $filename;
- $options ||= {};
-
- my $pos = tell $in;
- croak "Could not seek $filename: $!" if $pos < 0;
-
- croak "Could not read $filename: $!" unless defined read $in, my $buf, 1024;
-
- seek $in, $pos, 0 or croak "Could not seek $filename: $!";
-
-
- # Check for BOM:
- my $bom;
- my $encoding = do {
- if ($buf =~ /^\xFe\xFF/) {
- $bom = 2;
- 'UTF-16BE';
- } elsif ($buf =~ /^\xFF\xFe/) {
- $bom = 2;
- 'UTF-16LE';
- } elsif ($buf =~ /^\xEF\xBB\xBF/) {
- $bom = 3;
- 'utf-8-strict';
- } else {
- find_charset_in($buf, $options); # check for
- }
- }; # end $encoding
-
- if ($bom) {
- seek $in, $bom, 1 or croak "Could not seek $filename: $!";
- $bom = 1;
- }
- elsif (not defined $encoding) { # try decoding as UTF-8
- my $test = decode('utf-8-strict', $buf, Encode::FB_QUIET);
- if ($buf =~ /^(?: # nothing left over
- | [\xC2-\xDF] # incomplete 2-byte char
- | [\xE0-\xEF] [\x80-\xBF]? # incomplete 3-byte char
- | [\xF0-\xF4] [\x80-\xBF]{0,2} # incomplete 4-byte char
- )\z/x and $test =~ /[^\x00-\x7F]/) {
- $encoding = 'utf-8-strict';
- } # end if valid UTF-8 with at least one multi-byte character:
- } # end if testing for UTF-8
-
- if (defined $encoding and $options->{encoding} and not ref $encoding) {
- $encoding = find_encoding($encoding);
- } # end if $encoding is a string and we want an object
-
- return wantarray ? ($encoding, $bom) : $encoding;
-} # end sniff_encoding
-
-#=====================================================================
-# Based on HTML5 8.2.2.2 Determining the character encoding:
-
-# Get attribute from current position of $_
-sub _get_attribute
-{
- m!\G[\x09\x0A\x0C\x0D /]+!gc; # skip whitespace or /
-
- return if /\G>/gc or not /\G(=?[^\x09\x0A\x0C\x0D =]*)/gc;
-
- my ($name, $value) = (lc $1, '');
-
- if (/\G[\x09\x0A\x0C\x0D ]*=[\x09\x0A\x0C\x0D ]*/gc
- and (/\G"([^"]*)"?/gc or
- /\G'([^']*)'?/gc or
- /\G([^\x09\x0A\x0C\x0D >]*)/gc)) {
- $value = lc $1;
- } # end if attribute has value
-
- return wantarray ? ($name, $value) : 1;
-} # end _get_attribute
-
-# Examine a meta value for a charset:
-sub _get_charset_from_meta
-{
- for (shift) {
- while (/charset[\x09\x0A\x0C\x0D ]*=[\x09\x0A\x0C\x0D ]*/ig) {
- return $1 if (/\G"([^"]*)"/gc or
- /\G'([^']*)'/gc or
- /\G(?!['"])([^\x09\x0A\x0C\x0D ;]+)/gc);
- }
- } # end for value
-
- return undef;
-} # end _get_charset_from_meta
-#---------------------------------------------------------------------
-
-
-sub find_charset_in
-{
- for (shift) {
- my $options = shift || {};
- my $stop = length > 1024 ? 1024 : length; # search first 1024 bytes
-
- my $expect_pragma = (defined $options->{need_pragma}
- ? $options->{need_pragma} : 1);
-
- pos() = 0;
- while (pos() < $stop) {
- if (/\Gregister_attribute_specs(
- attribute_specs => {
- is => 'ro',
- reader => 'all_attribute_specs',
- },
- accessor_generator => { is => 'ro' },
- construction_string => { is => 'lazy' },
- construction_builder => { is => 'bare' },
- subconstructor_handler => { is => 'ro' },
- package => { is => 'bare' },
-);
-if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::inject_fake_metaclass_for(__PACKAGE__);
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Method/Generate/DemolishAll.pm b/software/Slic3r-1.3.0.64bit/lib/Method/Generate/DemolishAll.pm
deleted file mode 100644
index 7896f3e1..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Method/Generate/DemolishAll.pm
+++ /dev/null
@@ -1,53 +0,0 @@
-#line 1 "Method/Generate/DemolishAll.pm"
-package Method::Generate::DemolishAll;
-
-use Moo::_strictures;
-use Moo::Object ();
-BEGIN { our @ISA = qw(Moo::Object) }
-use Sub::Quote qw(quote_sub quotify);
-use Moo::_Utils qw(_getglob);
-use Moo::_mro;
-
-sub generate_method {
- my ($self, $into) = @_;
- quote_sub "${into}::DEMOLISHALL", join '',
- $self->_handle_subdemolish($into),
- qq{ my \$self = shift;\n},
- $self->demolishall_body_for($into, '$self', '@_'),
- qq{ return \$self\n};
- quote_sub "${into}::DESTROY", join '',
- q! my $self = shift;
- my $e = do {
- local $?;
- local $@;
- require Devel::GlobalDestruction;
- eval {
- $self->DEMOLISHALL(Devel::GlobalDestruction::in_global_destruction);
- };
- $@;
- };
-
- # fatal warnings+die in DESTROY = bad times (perl rt#123398)
- no warnings FATAL => 'all';
- use warnings 'all';
- die $e if $e; # rethrow
- !;
-}
-
-sub demolishall_body_for {
- my ($self, $into, $me, $args) = @_;
- my @demolishers =
- grep *{_getglob($_)}{CODE},
- map "${_}::DEMOLISH",
- @{mro::get_linear_isa($into)};
- join '', map qq{ ${me}->${_}(${args});\n}, @demolishers;
-}
-
-sub _handle_subdemolish {
- my ($self, $into) = @_;
- ' if (ref($_[0]) ne '.quotify($into).') {'."\n".
- ' return shift->Moo::Object::DEMOLISHALL(@_)'.";\n".
- ' }'."\n";
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Module/Runtime.pm b/software/Slic3r-1.3.0.64bit/lib/Module/Runtime.pm
deleted file mode 100644
index 7cc5e32d..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Module/Runtime.pm
+++ /dev/null
@@ -1,201 +0,0 @@
-#line 1 "Module/Runtime.pm"
-
-#line 111
-
-package Module::Runtime;
-
-# Don't "use 5.006" here, because Perl 5.15.6 will load feature.pm if
-# the version check is done that way.
-BEGIN { require 5.006; }
-# Don't "use warnings" here, to avoid dependencies. Do standardise the
-# warning status by lexical override; unfortunately the only safe bitset
-# to build in is the empty set, equivalent to "no warnings".
-BEGIN { ${^WARNING_BITS} = ""; }
-# Don't "use strict" here, to avoid dependencies.
-
-our $VERSION = "0.014";
-
-# Don't use Exporter here, to avoid dependencies.
-our @EXPORT_OK = qw(
- $module_name_rx is_module_name is_valid_module_name check_module_name
- module_notional_filename require_module
- use_module use_package_optimistically
- $top_module_spec_rx $sub_module_spec_rx
- is_module_spec is_valid_module_spec check_module_spec
- compose_module_name
-);
-my %export_ok = map { ($_ => undef) } @EXPORT_OK;
-sub import {
- my $me = shift;
- my $callpkg = caller(0);
- my $errs = "";
- foreach(@_) {
- if(exists $export_ok{$_}) {
- # We would need to do "no strict 'refs'" here
- # if we had enabled strict at file scope.
- if(/\A\$(.*)\z/s) {
- *{$callpkg."::".$1} = \$$1;
- } else {
- *{$callpkg."::".$_} = \&$_;
- }
- } else {
- $errs .= "\"$_\" is not exported by the $me module\n";
- }
- }
- if($errs ne "") {
- die "${errs}Can't continue after import errors ".
- "at @{[(caller(0))[1]]} line @{[(caller(0))[2]]}.\n";
- }
-}
-
-# Logic duplicated from Params::Classify. Duplicating it here avoids
-# an extensive and potentially circular dependency graph.
-sub _is_string($) {
- my($arg) = @_;
- return defined($arg) && ref(\$arg) eq "SCALAR";
-}
-
-#line 178
-
-our $module_name_rx = qr/[A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*/;
-
-#line 187
-
-my $qual_module_spec_rx =
- qr#(?:/|::)[A-Z_a-z][0-9A-Z_a-z]*(?:(?:/|::)[0-9A-Z_a-z]+)*#;
-
-my $unqual_top_module_spec_rx =
- qr#[A-Z_a-z][0-9A-Z_a-z]*(?:(?:/|::)[0-9A-Z_a-z]+)*#;
-
-our $top_module_spec_rx = qr/$qual_module_spec_rx|$unqual_top_module_spec_rx/o;
-
-#line 202
-
-my $unqual_sub_module_spec_rx = qr#[0-9A-Z_a-z]+(?:(?:/|::)[0-9A-Z_a-z]+)*#;
-
-our $sub_module_spec_rx = qr/$qual_module_spec_rx|$unqual_sub_module_spec_rx/o;
-
-#line 221
-
-sub is_module_name($) { _is_string($_[0]) && $_[0] =~ /\A$module_name_rx\z/o }
-
-#line 229
-
-*is_valid_module_name = \&is_module_name;
-
-#line 239
-
-sub check_module_name($) {
- unless(&is_module_name) {
- die +(_is_string($_[0]) ? "`$_[0]'" : "argument").
- " is not a module name\n";
- }
-}
-
-#line 262
-
-sub module_notional_filename($) {
- &check_module_name;
- my($name) = @_;
- $name =~ s!::!/!g;
- return $name.".pm";
-}
-
-#line 287
-
-# Don't "use constant" here, to avoid dependencies.
-BEGIN {
- *_WORK_AROUND_HINT_LEAKAGE =
- "$]" < 5.011 && !("$]" >= 5.009004 && "$]" < 5.010001)
- ? sub(){1} : sub(){0};
- *_WORK_AROUND_BROKEN_MODULE_STATE = "$]" < 5.009 ? sub(){1} : sub(){0};
-}
-
-BEGIN { if(_WORK_AROUND_BROKEN_MODULE_STATE) { eval q{
- sub Module::Runtime::__GUARD__::DESTROY {
- delete $INC{$_[0]->[0]} if @{$_[0]};
- }
- 1;
-}; die $@ if $@ ne ""; } }
-
-sub require_module($) {
- # Localise %^H to work around [perl #68590], where the bug exists
- # and this is a satisfactory workaround. The bug consists of
- # %^H state leaking into each required module, polluting the
- # module's lexical state.
- local %^H if _WORK_AROUND_HINT_LEAKAGE;
- if(_WORK_AROUND_BROKEN_MODULE_STATE) {
- my $notional_filename = &module_notional_filename;
- my $guard = bless([ $notional_filename ],
- "Module::Runtime::__GUARD__");
- my $result = CORE::require($notional_filename);
- pop @$guard;
- return $result;
- } else {
- return scalar(CORE::require(&module_notional_filename));
- }
-}
-
-#line 345
-
-sub use_module($;$) {
- my($name, $version) = @_;
- require_module($name);
- $name->VERSION($version) if @_ >= 2;
- return $name;
-}
-
-#line 377
-
-sub use_package_optimistically($;$) {
- my($name, $version) = @_;
- my $fn = module_notional_filename($name);
- eval { local $SIG{__DIE__}; require_module($name); };
- die $@ if $@ ne "" &&
- ($@ !~ /\ACan't locate \Q$fn\E .+ at \Q@{[__FILE__]}\E line/s ||
- $@ =~ /^Compilation\ failed\ in\ require
- \ at\ \Q@{[__FILE__]}\E\ line/xm);
- $name->VERSION($version) if @_ >= 2;
- return $name;
-}
-
-#line 405
-
-sub is_module_spec($$) {
- my($prefix, $spec) = @_;
- return _is_string($spec) &&
- $spec =~ ($prefix ? qr/\A$sub_module_spec_rx\z/o :
- qr/\A$top_module_spec_rx\z/o);
-}
-
-#line 418
-
-*is_valid_module_spec = \&is_module_spec;
-
-#line 427
-
-sub check_module_spec($$) {
- unless(&is_module_spec) {
- die +(_is_string($_[1]) ? "`$_[1]'" : "argument").
- " is not a module specification\n";
- }
-}
-
-#line 455
-
-sub compose_module_name($$) {
- my($prefix, $spec) = @_;
- check_module_name($prefix) if defined $prefix;
- &check_module_spec;
- if($spec =~ s#\A(?:/|::)##) {
- # OK
- } else {
- $spec = $prefix."::".$spec if defined $prefix;
- }
- $spec =~ s#/#::#g;
- return $spec;
-}
-
-#line 504
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo.pm b/software/Slic3r-1.3.0.64bit/lib/Moo.pm
deleted file mode 100644
index 7bdda346..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo.pm
+++ /dev/null
@@ -1,251 +0,0 @@
-#line 1 "Moo.pm"
-package Moo;
-
-use Moo::_strictures;
-use Moo::_mro;
-use Moo::_Utils qw(
- _getglob
- _getstash
- _install_coderef
- _install_modifier
- _load_module
- _set_loaded
- _unimport_coderefs
-);
-use Carp qw(croak);
-BEGIN {
- our @CARP_NOT = qw(
- Method::Generate::Constructor
- Method::Generate::Accessor
- Moo::sification
- Moo::_Utils
- Moo::Role
- );
-}
-
-our $VERSION = '2.003001';
-$VERSION = eval $VERSION;
-
-require Moo::sification;
-Moo::sification->import;
-
-our %MAKERS;
-
-sub _install_tracked {
- my ($target, $name, $code) = @_;
- $MAKERS{$target}{exports}{$name} = $code;
- _install_coderef "${target}::${name}" => "Moo::${name}" => $code;
-}
-
-sub import {
- my $target = caller;
- my $class = shift;
- _set_loaded(caller);
-
- strict->import;
- warnings->import;
-
- if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
- croak "Cannot import Moo into a role";
- }
- $MAKERS{$target} ||= {};
- _install_tracked $target => extends => sub {
- $class->_set_superclasses($target, @_);
- $class->_maybe_reset_handlemoose($target);
- return;
- };
- _install_tracked $target => with => sub {
- require Moo::Role;
- Moo::Role->apply_roles_to_package($target, @_);
- $class->_maybe_reset_handlemoose($target);
- };
- _install_tracked $target => has => sub {
- my $name_proto = shift;
- my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
- if (@_ % 2 != 0) {
- croak "Invalid options for " . join(', ', map "'$_'", @name_proto)
- . " attribute(s): even number of arguments expected, got " . scalar @_;
- }
- my %spec = @_;
- foreach my $name (@name_proto) {
- # Note that when multiple attributes specified, each attribute
- # needs a separate \%specs hashref
- my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
- $class->_constructor_maker_for($target)
- ->register_attribute_specs($name, $spec_ref);
- $class->_accessor_maker_for($target)
- ->generate_method($target, $name, $spec_ref);
- $class->_maybe_reset_handlemoose($target);
- }
- return;
- };
- foreach my $type (qw(before after around)) {
- _install_tracked $target => $type => sub {
- _install_modifier($target, $type, @_);
- return;
- };
- }
- return if $MAKERS{$target}{is_class}; # already exported into this package
- my $stash = _getstash($target);
- my @not_methods = map { *$_{CODE}||() } grep !ref($_), values %$stash;
- @{$MAKERS{$target}{not_methods}={}}{@not_methods} = @not_methods;
- $MAKERS{$target}{is_class} = 1;
- {
- no strict 'refs';
- @{"${target}::ISA"} = do {
- require Moo::Object; ('Moo::Object');
- } unless @{"${target}::ISA"};
- }
- if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::inject_fake_metaclass_for($target);
- }
-}
-
-sub unimport {
- my $target = caller;
- _unimport_coderefs($target, $MAKERS{$target});
-}
-
-sub _set_superclasses {
- my $class = shift;
- my $target = shift;
- foreach my $superclass (@_) {
- _load_module($superclass);
- if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
- croak "Can't extend role '$superclass'";
- }
- }
- # Can't do *{...} = \@_ or 5.10.0's mro.pm stops seeing @ISA
- @{*{_getglob("${target}::ISA")}{ARRAY}} = @_;
- if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
- $old->assert_constructor;
- delete _getstash($target)->{new};
- Moo->_constructor_maker_for($target)
- ->register_attribute_specs(%{$old->all_attribute_specs});
- }
- elsif (!$target->isa('Moo::Object')) {
- Moo->_constructor_maker_for($target);
- }
- $Moo::HandleMoose::MOUSE{$target} = [
- grep defined, map Mouse::Util::find_meta($_), @_
- ] if Mouse::Util->can('find_meta');
-}
-
-sub _maybe_reset_handlemoose {
- my ($class, $target) = @_;
- if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
- }
-}
-
-sub _accessor_maker_for {
- my ($class, $target) = @_;
- return unless $MAKERS{$target};
- $MAKERS{$target}{accessor} ||= do {
- my $maker_class = do {
- if (my $m = do {
- require Sub::Defer;
- if (my $defer_target =
- (Sub::Defer::defer_info($target->can('new'))||[])->[0]
- ) {
- my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/);
- $MAKERS{$pkg} && $MAKERS{$pkg}{accessor};
- } else {
- undef;
- }
- }) {
- ref($m);
- } else {
- require Method::Generate::Accessor;
- 'Method::Generate::Accessor'
- }
- };
- $maker_class->new;
- }
-}
-
-sub _constructor_maker_for {
- my ($class, $target) = @_;
- return unless $MAKERS{$target};
- $MAKERS{$target}{constructor} ||= do {
- require Method::Generate::Constructor;
-
- my %construct_opts = (
- package => $target,
- accessor_generator => $class->_accessor_maker_for($target),
- subconstructor_handler => (
- ' if ($Moo::MAKERS{$class}) {'."\n"
- .' if ($Moo::MAKERS{$class}{constructor}) {'."\n"
- .' package '.$target.';'."\n"
- .' return $invoker->SUPER::new(@_);'."\n"
- .' }'."\n"
- .' '.$class.'->_constructor_maker_for($class);'."\n"
- .' return $invoker->new(@_)'.";\n"
- .' } elsif ($INC{"Moose.pm"} and my $meta = Class::MOP::get_metaclass_by_name($class)) {'."\n"
- .' return $meta->new_object('."\n"
- .' $class->can("BUILDARGS") ? $class->BUILDARGS(@_)'."\n"
- .' : $class->Moo::Object::BUILDARGS(@_)'."\n"
- .' );'."\n"
- .' }'."\n"
- ),
- );
-
- my $con;
- my @isa = @{mro::get_linear_isa($target)};
- shift @isa;
- if (my ($parent_new) = grep { *{_getglob($_.'::new')}{CODE} } @isa) {
- if ($parent_new eq 'Moo::Object') {
- # no special constructor needed
- }
- elsif (my $makers = $MAKERS{$parent_new}) {
- $con = $makers->{constructor};
- $construct_opts{construction_string} = $con->construction_string
- if $con;
- }
- elsif ($parent_new->can('BUILDALL')) {
- $construct_opts{construction_builder} = sub {
- my $inv = $target->can('BUILDARGS') ? '' : 'Moo::Object::';
- 'do {'
- .' my $args = $class->'.$inv.'BUILDARGS(@_);'
- .' $args->{__no_BUILD__} = 1;'
- .' $invoker->'.$target.'::SUPER::new($args);'
- .'}'
- };
- }
- else {
- $construct_opts{construction_builder} = sub {
- '$invoker->'.$target.'::SUPER::new('
- .($target->can('FOREIGNBUILDARGS') ?
- '$class->FOREIGNBUILDARGS(@_)' : '@_')
- .')'
- };
- }
- }
- ($con ? ref($con) : 'Method::Generate::Constructor')
- ->new(%construct_opts)
- ->install_delayed
- ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
- }
-}
-
-sub _concrete_methods_of {
- my ($me, $role) = @_;
- my $makers = $MAKERS{$role};
- # grab role symbol table
- my $stash = _getstash($role);
- # reverse so our keys become the values (captured coderefs) in case
- # they got copied or re-used since
- my $not_methods = { reverse %{$makers->{not_methods}||{}} };
- +{
- # grab all code entries that aren't in the not_methods list
- map {
- my $code = *{$stash->{$_}}{CODE};
- ( ! $code or exists $not_methods->{$code} ) ? () : ($_ => $code)
- } grep !ref($stash->{$_}), keys %$stash
- };
-}
-
-1;
-__END__
-
-#line 1079
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose.pm
deleted file mode 100644
index 5e0f199f..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose.pm
+++ /dev/null
@@ -1,229 +0,0 @@
-#line 1 "Moo/HandleMoose.pm"
-package Moo::HandleMoose;
-use Moo::_strictures;
-use Moo::_Utils qw(_getstash);
-use Sub::Quote qw(quotify);
-use Carp qw(croak);
-
-our %TYPE_MAP;
-
-our $SETUP_DONE;
-
-sub import { return if $SETUP_DONE; inject_all(); $SETUP_DONE = 1; }
-
-sub inject_all {
- croak "Can't inflate Moose metaclass with Moo::sification disabled"
- if $Moo::sification::disabled;
- require Class::MOP;
- inject_fake_metaclass_for($_)
- for grep $_ ne 'Moo::Object', keys %Moo::MAKERS;
- inject_fake_metaclass_for($_) for keys %Moo::Role::INFO;
- require Moose::Meta::Method::Constructor;
- @Moo::HandleMoose::FakeConstructor::ISA = 'Moose::Meta::Method::Constructor';
- @Moo::HandleMoose::FakeMeta::ISA = 'Moose::Meta::Method::Meta';
-}
-
-sub maybe_reinject_fake_metaclass_for {
- my ($name) = @_;
- our %DID_INJECT;
- if (delete $DID_INJECT{$name}) {
- unless ($Moo::Role::INFO{$name}) {
- Moo->_constructor_maker_for($name)->install_delayed;
- }
- inject_fake_metaclass_for($name);
- }
-}
-
-sub inject_fake_metaclass_for {
- my ($name) = @_;
- require Class::MOP;
- require Moo::HandleMoose::FakeMetaClass;
- Class::MOP::store_metaclass_by_name(
- $name, bless({ name => $name }, 'Moo::HandleMoose::FakeMetaClass')
- );
- require Moose::Util::TypeConstraints;
- if ($Moo::Role::INFO{$name}) {
- Moose::Util::TypeConstraints::find_or_create_does_type_constraint($name);
- } else {
- Moose::Util::TypeConstraints::find_or_create_isa_type_constraint($name);
- }
-}
-
-{
- package Moo::HandleMoose::FakeConstructor;
-
- sub _uninlined_body { \&Moose::Object::new }
-}
-
-sub inject_real_metaclass_for {
- my ($name) = @_;
- our %DID_INJECT;
- return Class::MOP::get_metaclass_by_name($name) if $DID_INJECT{$name};
- require Moose; require Moo; require Moo::Role; require Scalar::Util;
- require Sub::Defer;
- Class::MOP::remove_metaclass_by_name($name);
- my ($am_role, $am_class, $meta, $attr_specs, $attr_order) = do {
- if (my $info = $Moo::Role::INFO{$name}) {
- my @attr_info = @{$info->{attributes}||[]};
- (1, 0, Moose::Meta::Role->initialize($name),
- { @attr_info },
- [ @attr_info[grep !($_ % 2), 0..$#attr_info] ]
- )
- } elsif ( my $cmaker = Moo->_constructor_maker_for($name) ) {
- my $specs = $cmaker->all_attribute_specs;
- (0, 1, Moose::Meta::Class->initialize($name), $specs,
- [ sort { $specs->{$a}{index} <=> $specs->{$b}{index} } keys %$specs ]
- );
- } else {
- # This codepath is used if $name does not exist in $Moo::MAKERS
- (0, 0, Moose::Meta::Class->initialize($name), {}, [] )
- }
- };
-
- {
- local $DID_INJECT{$name} = 1;
- foreach my $spec (values %$attr_specs) {
- if (my $inflators = delete $spec->{moosify}) {
- $_->($spec) for @$inflators;
- }
- }
-
- my %methods
- = %{($am_role ? 'Moo::Role' : 'Moo')->_concrete_methods_of($name)};
-
- # if stuff gets added afterwards, _maybe_reset_handlemoose should
- # trigger the recreation of the metaclass but we need to ensure the
- # Moo::Role cache is cleared so we don't confuse Moo itself.
- if (my $info = $Moo::Role::INFO{$name}) {
- delete $info->{methods};
- }
-
- # needed to ensure the method body is stable and get things named
- $methods{$_} = Sub::Defer::undefer_sub($methods{$_})
- for
- grep $_ ne 'new',
- keys %methods;
- my @attrs;
- {
- # This local is completely not required for roles but harmless
- local @{_getstash($name)}{keys %methods};
- my %seen_name;
- foreach my $attr_name (@$attr_order) {
- $seen_name{$attr_name} = 1;
- my %spec = %{$attr_specs->{$attr_name}};
- my %spec_map = (
- map { $_->name => $_->init_arg||$_->name }
- (
- (grep { $_->has_init_arg }
- $meta->attribute_metaclass->meta->get_all_attributes),
- grep { exists($_->{init_arg}) ? defined($_->init_arg) : 1 }
- map {
- my $meta = Moose::Util::resolve_metatrait_alias('Attribute', $_)
- ->meta;
- map $meta->get_attribute($_), $meta->get_attribute_list
- } @{$spec{traits}||[]}
- )
- );
- # have to hard code this because Moose's role meta-model is lacking
- $spec_map{traits} ||= 'traits';
-
- $spec{is} = 'ro' if $spec{is} eq 'lazy' or $spec{is} eq 'rwp';
- my $coerce = $spec{coerce};
- if (my $isa = $spec{isa}) {
- my $tc = $spec{isa} = do {
- if (my $mapped = $TYPE_MAP{$isa}) {
- my $type = $mapped->();
- unless ( Scalar::Util::blessed($type)
- && $type->isa("Moose::Meta::TypeConstraint") ) {
- croak "error inflating attribute '$attr_name' for package '$name': "
- ."\$TYPE_MAP{$isa} did not return a valid type constraint'";
- }
- $coerce ? $type->create_child_type(name => $type->name) : $type;
- } else {
- Moose::Meta::TypeConstraint->new(
- constraint => sub { eval { &$isa; 1 } }
- );
- }
- };
- if ($coerce) {
- $tc->coercion(Moose::Meta::TypeCoercion->new)
- ->_compiled_type_coercion($coerce);
- $spec{coerce} = 1;
- }
- } elsif ($coerce) {
- my $attr = quotify($attr_name);
- my $tc = Moose::Meta::TypeConstraint->new(
- constraint => sub { die "This is not going to work" },
- inlined => sub {
- 'my $r = $_[42]{'.$attr.'}; $_[42]{'.$attr.'} = 1; $r'
- },
- );
- $tc->coercion(Moose::Meta::TypeCoercion->new)
- ->_compiled_type_coercion($coerce);
- $spec{isa} = $tc;
- $spec{coerce} = 1;
- }
- %spec =
- map { $spec_map{$_} => $spec{$_} }
- grep { exists $spec_map{$_} }
- keys %spec;
- push @attrs, $meta->add_attribute($attr_name => %spec);
- }
- foreach my $mouse (do { our %MOUSE; @{$MOUSE{$name}||[]} }) {
- foreach my $attr ($mouse->get_all_attributes) {
- my %spec = %{$attr};
- delete @spec{qw(
- associated_class associated_methods __METACLASS__
- provides curries
- )};
- my $attr_name = delete $spec{name};
- next if $seen_name{$attr_name}++;
- push @attrs, $meta->add_attribute($attr_name => %spec);
- }
- }
- }
- foreach my $meth_name (keys %methods) {
- my $meth_code = $methods{$meth_name};
- $meta->add_method($meth_name, $meth_code);
- }
-
- if ($am_role) {
- my $info = $Moo::Role::INFO{$name};
- $meta->add_required_methods(@{$info->{requires}});
- foreach my $modifier (@{$info->{modifiers}}) {
- my ($type, @args) = @$modifier;
- my $code = pop @args;
- $meta->${\"add_${type}_method_modifier"}($_, $code) for @args;
- }
- }
- elsif ($am_class) {
- foreach my $attr (@attrs) {
- foreach my $method (@{$attr->associated_methods}) {
- $method->{body} = $name->can($method->name);
- }
- }
- bless(
- $meta->find_method_by_name('new'),
- 'Moo::HandleMoose::FakeConstructor',
- );
- my $meta_meth;
- if (
- $meta_meth = $meta->find_method_by_name('meta')
- and $meta_meth->body == \&Moo::Object::meta
- ) {
- bless($meta_meth, 'Moo::HandleMoose::FakeMeta');
- }
- # a combination of Moo and Moose may bypass a Moo constructor but still
- # use a Moo DEMOLISHALL. We need to make sure this is loaded before
- # global destruction.
- require Method::Generate::DemolishAll;
- }
- $meta->add_role(Class::MOP::class_of($_))
- for grep !/\|/ && $_ ne $name, # reject Foo|Bar and same-role-as-self
- keys %{$Moo::Role::APPLIED_TO{$name}}
- }
- $DID_INJECT{$name} = 1;
- $meta;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/FakeMetaClass.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/FakeMetaClass.pm
deleted file mode 100644
index 92db505b..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/FakeMetaClass.pm
+++ /dev/null
@@ -1,35 +0,0 @@
-#line 1 "Moo/HandleMoose/FakeMetaClass.pm"
-package Moo::HandleMoose::FakeMetaClass;
-use Moo::_strictures;
-use Carp ();
-BEGIN { our @CARP_NOT = qw(Moo::HandleMoose) }
-
-sub DESTROY { }
-
-sub AUTOLOAD {
- my ($meth) = (our $AUTOLOAD =~ /([^:]+)$/);
- my $self = shift;
- Carp::croak "Can't call $meth without object instance"
- if !ref $self;
- Carp::croak "Can't inflate Moose metaclass with Moo::sification disabled"
- if $Moo::sification::disabled;
- require Moo::HandleMoose;
- Moo::HandleMoose::inject_real_metaclass_for($self->{name})->$meth(@_)
-}
-sub can {
- my $self = shift;
- return $self->SUPER::can(@_)
- if !ref $self or $Moo::sification::disabled;
- require Moo::HandleMoose;
- Moo::HandleMoose::inject_real_metaclass_for($self->{name})->can(@_)
-}
-sub isa {
- my $self = shift;
- return $self->SUPER::isa(@_)
- if !ref $self or $Moo::sification::disabled;
- require Moo::HandleMoose;
- Moo::HandleMoose::inject_real_metaclass_for($self->{name})->isa(@_)
-}
-sub make_immutable { $_[0] }
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/_TypeMap.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/_TypeMap.pm
deleted file mode 100644
index 86aac8de..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/HandleMoose/_TypeMap.pm
+++ /dev/null
@@ -1,77 +0,0 @@
-#line 1 "Moo/HandleMoose/_TypeMap.pm"
-package Moo::HandleMoose::_TypeMap;
-use Moo::_strictures;
-
-package
- Moo::HandleMoose;
-our %TYPE_MAP;
-
-package Moo::HandleMoose::_TypeMap;
-
-use Scalar::Util ();
-use Config;
-
-our %WEAK_TYPES;
-
-sub _str_to_ref {
- my $in = shift;
- return $in
- if ref $in;
-
- if ($in =~ /(?:^|=)([A-Z]+)\(0x([0-9a-zA-Z]+)\)$/) {
- my $type = $1;
- my $id = do { no warnings 'portable'; hex "$2" };
- require B;
- my $sv = bless \$id, 'B::SV';
- my $ref = eval { $sv->object_2svref };
- if (!defined $ref or Scalar::Util::reftype($ref) ne $type) {
- die <<'END_ERROR';
-Moo initialization encountered types defined in a parent thread - ensure that
-Moo is require()d before any further thread spawns following a type definition.
-END_ERROR
- }
- return $ref;
- }
- return $in;
-}
-
-sub TIEHASH { bless {}, $_[0] }
-
-sub STORE {
- my ($self, $key, $value) = @_;
- my $type = _str_to_ref($key);
- $WEAK_TYPES{$type} = $type;
- Scalar::Util::weaken($WEAK_TYPES{$type})
- if ref $type;
- $self->{$key} = $value;
-}
-
-sub FETCH { $_[0]->{$_[1]} }
-sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
-sub NEXTKEY { each %{$_[0]} }
-sub EXISTS { exists $_[0]->{$_[1]} }
-sub DELETE { delete $_[0]->{$_[1]} }
-sub CLEAR { %{$_[0]} = () }
-sub SCALAR { scalar %{$_[0]} }
-
-sub CLONE {
- my @types = map {
- defined $WEAK_TYPES{$_} ? ($WEAK_TYPES{$_} => $TYPE_MAP{$_}) : ()
- } keys %TYPE_MAP;
- %WEAK_TYPES = ();
- %TYPE_MAP = @types;
-}
-
-sub DESTROY {
- my %types = %{$_[0]};
- untie %TYPE_MAP;
- %TYPE_MAP = %types;
-}
-
-if ($Config{useithreads}) {
- my @types = %TYPE_MAP;
- tie %TYPE_MAP, __PACKAGE__;
- %TYPE_MAP = @types;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/Object.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/Object.pm
deleted file mode 100644
index ecbfbc69..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/Object.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-#line 1 "Moo/Object.pm"
-package Moo::Object;
-
-use Moo::_strictures;
-use Carp ();
-
-our %NO_BUILD;
-our %NO_DEMOLISH;
-our $BUILD_MAKER;
-our $DEMOLISH_MAKER;
-
-sub new {
- my $class = shift;
- unless (exists $NO_DEMOLISH{$class}) {
- unless ($NO_DEMOLISH{$class} = !$class->can('DEMOLISH')) {
- ($DEMOLISH_MAKER ||= do {
- require Method::Generate::DemolishAll;
- Method::Generate::DemolishAll->new
- })->generate_method($class);
- }
- }
- my $proto = $class->BUILDARGS(@_);
- $NO_BUILD{$class} and
- return bless({}, $class);
- $NO_BUILD{$class} = !$class->can('BUILD') unless exists $NO_BUILD{$class};
- $NO_BUILD{$class}
- ? bless({}, $class)
- : bless({}, $class)->BUILDALL($proto);
-}
-
-# Inlined into Method::Generate::Constructor::_generate_args() - keep in sync
-sub BUILDARGS {
- my $class = shift;
- scalar @_ == 1
- ? ref $_[0] eq 'HASH'
- ? { %{ $_[0] } }
- : Carp::croak("Single parameters to new() must be a HASH ref"
- . " data => ". $_[0])
- : @_ % 2
- ? Carp::croak("The new() method for $class expects a hash reference or a"
- . " key/value list. You passed an odd number of arguments")
- : {@_}
- ;
-}
-
-sub BUILDALL {
- my $self = shift;
- $self->${\(($BUILD_MAKER ||= do {
- require Method::Generate::BuildAll;
- Method::Generate::BuildAll->new
- })->generate_method(ref($self)))}(@_);
-}
-
-sub DEMOLISHALL {
- my $self = shift;
- $self->${\(($DEMOLISH_MAKER ||= do {
- require Method::Generate::DemolishAll;
- Method::Generate::DemolishAll->new
- })->generate_method(ref($self)))}(@_);
-}
-
-sub does {
- return !!0
- unless ($INC{'Moose/Role.pm'} || $INC{'Role/Tiny.pm'});
- require Moo::Role;
- my $does = Moo::Role->can("does_role");
- { no warnings 'redefine'; *does = $does }
- goto &$does;
-}
-
-# duplicated in Moo::Role
-sub meta {
- require Moo::HandleMoose::FakeMetaClass;
- my $class = ref($_[0])||$_[0];
- bless({ name => $class }, 'Moo::HandleMoose::FakeMetaClass');
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/Role.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/Role.pm
deleted file mode 100644
index 6e6e2125..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/Role.pm
+++ /dev/null
@@ -1,457 +0,0 @@
-#line 1 "Moo/Role.pm"
-package Moo::Role;
-
-use Moo::_strictures;
-use Moo::_Utils qw(
- _getglob
- _getstash
- _install_coderef
- _install_modifier
- _load_module
- _name_coderef
- _set_loaded
- _unimport_coderefs
-);
-use Carp qw(croak);
-use Role::Tiny ();
-BEGIN { our @ISA = qw(Role::Tiny) }
-BEGIN {
- our @CARP_NOT = qw(
- Method::Generate::Accessor
- Method::Generate::Constructor
- Moo::sification
- Moo::_Utils
- );
-}
-
-our $VERSION = '2.003001';
-$VERSION = eval $VERSION;
-
-require Moo::sification;
-Moo::sification->import;
-
-BEGIN {
- *INFO = \%Role::Tiny::INFO;
- *APPLIED_TO = \%Role::Tiny::APPLIED_TO;
- *COMPOSED = \%Role::Tiny::COMPOSED;
- *ON_ROLE_CREATE = \@Role::Tiny::ON_ROLE_CREATE;
-}
-
-our %INFO;
-our %APPLIED_TO;
-our %APPLY_DEFAULTS;
-our %COMPOSED;
-our @ON_ROLE_CREATE;
-
-sub _install_tracked {
- my ($target, $name, $code) = @_;
- $INFO{$target}{exports}{$name} = $code;
- _install_coderef "${target}::${name}" => "Moo::Role::${name}" => $code;
-}
-
-sub import {
- my $target = caller;
- if ($Moo::MAKERS{$target} and $Moo::MAKERS{$target}{is_class}) {
- croak "Cannot import Moo::Role into a Moo class";
- }
- _set_loaded(caller);
- goto &Role::Tiny::import;
-}
-
-sub _install_subs {
- my ($me, $target) = @_;
- _install_tracked $target => has => sub {
- my $name_proto = shift;
- my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
- if (@_ % 2 != 0) {
- croak("Invalid options for " . join(', ', map "'$_'", @name_proto)
- . " attribute(s): even number of arguments expected, got " . scalar @_)
- }
- my %spec = @_;
- foreach my $name (@name_proto) {
- my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
- ($INFO{$target}{accessor_maker} ||= do {
- require Method::Generate::Accessor;
- Method::Generate::Accessor->new
- })->generate_method($target, $name, $spec_ref);
- push @{$INFO{$target}{attributes}||=[]}, $name, $spec_ref;
- $me->_maybe_reset_handlemoose($target);
- }
- };
- # install before/after/around subs
- foreach my $type (qw(before after around)) {
- _install_tracked $target => $type => sub {
- push @{$INFO{$target}{modifiers}||=[]}, [ $type => @_ ];
- $me->_maybe_reset_handlemoose($target);
- };
- }
- _install_tracked $target => requires => sub {
- push @{$INFO{$target}{requires}||=[]}, @_;
- $me->_maybe_reset_handlemoose($target);
- };
- _install_tracked $target => with => sub {
- $me->apply_roles_to_package($target, @_);
- $me->_maybe_reset_handlemoose($target);
- };
- *{_getglob("${target}::meta")} = $me->can('meta');
-}
-
-push @ON_ROLE_CREATE, sub {
- my $target = shift;
- if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::inject_fake_metaclass_for($target);
- }
-};
-
-# duplicate from Moo::Object
-sub meta {
- require Moo::HandleMoose::FakeMetaClass;
- my $class = ref($_[0])||$_[0];
- bless({ name => $class }, 'Moo::HandleMoose::FakeMetaClass');
-}
-
-sub unimport {
- my $target = caller;
- _unimport_coderefs($target, $INFO{$target});
-}
-
-sub _maybe_reset_handlemoose {
- my ($class, $target) = @_;
- if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
- }
-}
-
-sub methods_provided_by {
- my ($self, $role) = @_;
- _load_module($role);
- $self->_inhale_if_moose($role);
- croak "${role} is not a Moo::Role" unless $self->is_role($role);
- return $self->SUPER::methods_provided_by($role);
-}
-
-sub is_role {
- my ($self, $role) = @_;
- $self->_inhale_if_moose($role);
- $self->SUPER::is_role($role);
-}
-
-sub _inhale_if_moose {
- my ($self, $role) = @_;
- my $meta;
- if (!$self->SUPER::is_role($role)
- and (
- $INC{"Moose.pm"}
- and $meta = Class::MOP::class_of($role)
- and ref $meta ne 'Moo::HandleMoose::FakeMetaClass'
- and $meta->isa('Moose::Meta::Role')
- )
- or (
- Mouse::Util->can('find_meta')
- and $meta = Mouse::Util::find_meta($role)
- and $meta->isa('Mouse::Meta::Role')
- )
- ) {
- my $is_mouse = $meta->isa('Mouse::Meta::Role');
- $INFO{$role}{methods} = {
- map +($_ => $role->can($_)),
- grep $role->can($_),
- grep !($is_mouse && $_ eq 'meta'),
- grep !$meta->get_method($_)->isa('Class::MOP::Method::Meta'),
- $meta->get_method_list
- };
- $APPLIED_TO{$role} = {
- map +($_->name => 1), $meta->calculate_all_roles
- };
- $INFO{$role}{requires} = [ $meta->get_required_method_list ];
- $INFO{$role}{attributes} = [
- map +($_ => do {
- my $attr = $meta->get_attribute($_);
- my $spec = { %{ $is_mouse ? $attr : $attr->original_options } };
-
- if ($spec->{isa}) {
- require Sub::Quote;
-
- my $get_constraint = do {
- my $pkg = $is_mouse
- ? 'Mouse::Util::TypeConstraints'
- : 'Moose::Util::TypeConstraints';
- _load_module($pkg);
- $pkg->can('find_or_create_isa_type_constraint');
- };
-
- my $tc = $get_constraint->($spec->{isa});
- my $check = $tc->_compiled_type_constraint;
- my $tc_var = '$_check_for_'.Sub::Quote::sanitize_identifier($tc->name);
-
- $spec->{isa} = Sub::Quote::quote_sub(
- qq{
- &${tc_var} or Carp::croak "Type constraint failed for \$_[0]"
- },
- { $tc_var => \$check },
- {
- package => $role,
- },
- );
-
- if ($spec->{coerce}) {
-
- # Mouse has _compiled_type_coercion straight on the TC object
- $spec->{coerce} = $tc->${\(
- $tc->can('coercion')||sub { $_[0] }
- )}->_compiled_type_coercion;
- }
- }
- $spec;
- }), $meta->get_attribute_list
- ];
- my $mods = $INFO{$role}{modifiers} = [];
- foreach my $type (qw(before after around)) {
- # Mouse pokes its own internals so we have to fall back to doing
- # the same thing in the absence of the Moose API method
- my $map = $meta->${\(
- $meta->can("get_${type}_method_modifiers_map")
- or sub { shift->{"${type}_method_modifiers"} }
- )};
- foreach my $method (keys %$map) {
- foreach my $mod (@{$map->{$method}}) {
- push @$mods, [ $type => $method => $mod ];
- }
- }
- }
- $INFO{$role}{inhaled_from_moose} = 1;
- $INFO{$role}{is_role} = 1;
- }
-}
-
-sub _maybe_make_accessors {
- my ($self, $target, $role) = @_;
- my $m;
- if ($INFO{$role} && $INFO{$role}{inhaled_from_moose}
- or $INC{"Moo.pm"}
- and $m = Moo->_accessor_maker_for($target)
- and ref($m) ne 'Method::Generate::Accessor') {
- $self->_make_accessors($target, $role);
- }
-}
-
-sub _make_accessors_if_moose {
- my ($self, $target, $role) = @_;
- if ($INFO{$role} && $INFO{$role}{inhaled_from_moose}) {
- $self->_make_accessors($target, $role);
- }
-}
-
-sub _make_accessors {
- my ($self, $target, $role) = @_;
- my $acc_gen = ($Moo::MAKERS{$target}{accessor} ||= do {
- require Method::Generate::Accessor;
- Method::Generate::Accessor->new
- });
- my $con_gen = $Moo::MAKERS{$target}{constructor};
- my @attrs = @{$INFO{$role}{attributes}||[]};
- while (my ($name, $spec) = splice @attrs, 0, 2) {
- # needed to ensure we got an index for an arrayref based generator
- if ($con_gen) {
- $spec = $con_gen->all_attribute_specs->{$name};
- }
- $acc_gen->generate_method($target, $name, $spec);
- }
-}
-
-sub _undefer_subs {
- my ($self, $target, $role) = @_;
- if ($INC{'Sub/Defer.pm'}) {
- Sub::Defer::undefer_package($role);
- }
-}
-
-sub role_application_steps {
- qw(_handle_constructor _undefer_subs _maybe_make_accessors),
- $_[0]->SUPER::role_application_steps;
-}
-
-sub apply_roles_to_package {
- my ($me, $to, @roles) = @_;
- foreach my $role (@roles) {
- _load_module($role);
- $me->_inhale_if_moose($role);
- croak "${role} is not a Moo::Role" unless $me->is_role($role);
- }
- $me->SUPER::apply_roles_to_package($to, @roles);
-}
-
-sub apply_single_role_to_package {
- my ($me, $to, $role) = @_;
- _load_module($role);
- $me->_inhale_if_moose($role);
- croak "${role} is not a Moo::Role" unless $me->is_role($role);
- $me->SUPER::apply_single_role_to_package($to, $role);
-}
-
-sub create_class_with_roles {
- my ($me, $superclass, @roles) = @_;
-
- my ($new_name, $compose_name) = $me->_composite_name($superclass, @roles);
-
- return $new_name if $COMPOSED{class}{$new_name};
-
- foreach my $role (@roles) {
- _load_module($role);
- $me->_inhale_if_moose($role);
- croak "${role} is not a Moo::Role" unless $me->is_role($role);
- }
-
- my $m;
- if ($INC{"Moo.pm"}
- and $m = Moo->_accessor_maker_for($superclass)
- and ref($m) ne 'Method::Generate::Accessor') {
- # old fashioned way time.
- @{*{_getglob("${new_name}::ISA")}{ARRAY}} = ($superclass);
- $Moo::MAKERS{$new_name} = {is_class => 1};
- $me->apply_roles_to_package($new_name, @roles);
- }
- else {
- $me->SUPER::create_class_with_roles($superclass, @roles);
- $Moo::MAKERS{$new_name} = {is_class => 1};
- $me->_handle_constructor($new_name, $_) for @roles;
- }
-
- if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
- Moo::HandleMoose::inject_fake_metaclass_for($new_name);
- }
- $COMPOSED{class}{$new_name} = 1;
- _set_loaded($new_name, (caller)[1]);
- return $new_name;
-}
-
-sub apply_roles_to_object {
- my ($me, $object, @roles) = @_;
- my $new = $me->SUPER::apply_roles_to_object($object, @roles);
- my $class = ref $new;
- _set_loaded($class, (caller)[1]);
-
- my $apply_defaults = exists $APPLY_DEFAULTS{$class} ? $APPLY_DEFAULTS{$class}
- : $APPLY_DEFAULTS{$class} = do {
- my %attrs = map { @{$INFO{$_}{attributes}||[]} } @roles;
-
- if ($INC{'Moo.pm'}
- and keys %attrs
- and my $con_gen = Moo->_constructor_maker_for($class)
- and my $m = Moo->_accessor_maker_for($class)) {
-
- my $specs = $con_gen->all_attribute_specs;
-
- my %captures;
- my $code = join('',
- ( map {
- my $name = $_;
- my $spec = $specs->{$name};
- if ($m->has_eager_default($name, $spec)) {
- my ($has, $has_cap)
- = $m->generate_simple_has('$_[0]', $name, $spec);
- my ($set, $pop_cap)
- = $m->generate_use_default('$_[0]', $name, $spec, $has);
-
- @captures{keys %$has_cap, keys %$pop_cap}
- = (values %$has_cap, values %$pop_cap);
- "($set),";
- }
- else {
- ();
- }
- } sort keys %attrs ),
- );
- if ($code) {
- require Sub::Quote;
- Sub::Quote::quote_sub(
- "${class}::_apply_defaults",
- "no warnings 'void';\n$code",
- \%captures,
- {
- package => $class,
- no_install => 1,
- }
- );
- }
- else {
- 0;
- }
- }
- else {
- 0;
- }
- };
- if ($apply_defaults) {
- local $Carp::Internal{+__PACKAGE__} = 1;
- local $Carp::Internal{$class} = 1;
- $new->$apply_defaults;
- }
- return $new;
-}
-
-sub _composable_package_for {
- my ($self, $role) = @_;
- my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role;
- return $composed_name if $COMPOSED{role}{$composed_name};
- $self->_make_accessors_if_moose($composed_name, $role);
- $self->SUPER::_composable_package_for($role);
-}
-
-sub _install_single_modifier {
- my ($me, @args) = @_;
- _install_modifier(@args);
-}
-
-sub _install_does {
- my ($me, $to) = @_;
-
- # If Role::Tiny actually installed the DOES, give it a name
- my $new = $me->SUPER::_install_does($to) or return;
- return _name_coderef("${to}::DOES", $new);
-}
-
-sub does_role {
- my ($proto, $role) = @_;
- return 1
- if Role::Tiny::does_role($proto, $role);
- my $meta;
- if ($INC{'Moose.pm'}
- and $meta = Class::MOP::class_of($proto)
- and ref $meta ne 'Moo::HandleMoose::FakeMetaClass'
- and $meta->can('does_role')
- ) {
- return $meta->does_role($role);
- }
- return 0;
-}
-
-sub _handle_constructor {
- my ($me, $to, $role) = @_;
- my $attr_info = $INFO{$role} && $INFO{$role}{attributes};
- return unless $attr_info && @$attr_info;
- my $info = $INFO{$to};
- my $con = $INC{"Moo.pm"} && Moo->_constructor_maker_for($to);
- my %existing
- = $info ? @{$info->{attributes} || []}
- : $con ? %{$con->all_attribute_specs || {}}
- : ();
-
- my @attr_info =
- map { @{$attr_info}[$_, $_+1] }
- grep { ! $existing{$attr_info->[$_]} }
- map { 2 * $_ } 0..@$attr_info/2-1;
-
- if ($info) {
- push @{$info->{attributes}||=[]}, @attr_info;
- }
- elsif ($con) {
- # shallow copy of the specs since the constructor will assign an index
- $con->register_attribute_specs(map ref() ? { %$_ } : $_, @attr_info);
- }
-}
-
-1;
-__END__
-
-#line 551
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/_Utils.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/_Utils.pm
deleted file mode 100644
index f3cd61aa..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/_Utils.pm
+++ /dev/null
@@ -1,128 +0,0 @@
-#line 1 "Moo/_Utils.pm"
-package Moo::_Utils;
-use Moo::_strictures;
-
-{
- no strict 'refs';
- sub _getglob { \*{$_[0]} }
- sub _getstash { \%{"$_[0]::"} }
-}
-
-BEGIN {
- my ($su, $sn);
- $su = $INC{'Sub/Util.pm'} && defined &Sub::Util::set_subname
- or $sn = $INC{'Sub/Name.pm'}
- or $su = eval { require Sub::Util; } && defined &Sub::Util::set_subname
- or $sn = eval { require Sub::Name; };
-
- *_subname = $su ? \&Sub::Util::set_subname
- : $sn ? \&Sub::Name::subname
- : sub { $_[1] };
- *_CAN_SUBNAME = ($su || $sn) ? sub(){1} : sub(){0};
-}
-
-use Module::Runtime qw(use_package_optimistically module_notional_filename);
-
-use Devel::GlobalDestruction ();
-use Exporter qw(import);
-use Config;
-use Carp qw(croak);
-
-our @EXPORT = qw(
- _getglob _install_modifier _load_module _maybe_load_module
- _getstash _install_coderef _name_coderef
- _unimport_coderefs _set_loaded
-);
-
-sub _install_modifier {
- my ($into, $type, $name, $code) = @_;
-
- if ($INC{'Sub/Defer.pm'} and my $to_modify = $into->can($name)) { # CMM will throw for us if not
- Sub::Defer::undefer_sub($to_modify);
- }
-
- require Class::Method::Modifiers;
- Class::Method::Modifiers::install_modifier(@_);
-}
-
-sub _load_module {
- my $module = $_[0];
- my $file = eval { module_notional_filename($module) } or croak $@;
- use_package_optimistically($module);
- return 1
- if $INC{$file};
- my $error = $@ || "Can't locate $file";
-
- # can't just ->can('can') because a sub-package Foo::Bar::Baz
- # creates a 'Baz::' key in Foo::Bar's symbol table
- my $stash = _getstash($module)||{};
- return 1 if grep +(!ref($_) and *$_{CODE}), values %$stash;
- return 1
- if $INC{"Moose.pm"} && Class::MOP::class_of($module)
- or Mouse::Util->can('find_meta') && Mouse::Util::find_meta($module);
- croak $error;
-}
-
-our %MAYBE_LOADED;
-sub _maybe_load_module {
- my $module = $_[0];
- return $MAYBE_LOADED{$module}
- if exists $MAYBE_LOADED{$module};
- if(! eval { use_package_optimistically($module) }) {
- warn "$module exists but failed to load with error: $@";
- }
- elsif ( $INC{module_notional_filename($module)} ) {
- return $MAYBE_LOADED{$module} = 1;
- }
- return $MAYBE_LOADED{$module} = 0;
-}
-
-sub _set_loaded {
- $INC{Module::Runtime::module_notional_filename($_[0])} ||= $_[1];
-}
-
-sub _install_coderef {
- my ($glob, $code) = (_getglob($_[0]), _name_coderef(@_));
- no warnings 'redefine';
- if (*{$glob}{CODE}) {
- *{$glob} = $code;
- }
- # perl will sometimes warn about mismatched prototypes coming from the
- # inheritance cache, so disable them if we aren't redefining a sub
- else {
- no warnings 'prototype';
- *{$glob} = $code;
- }
-}
-
-sub _name_coderef {
- shift if @_ > 2; # three args is (target, name, sub)
- _CAN_SUBNAME ? _subname(@_) : $_[1];
-}
-
-sub _unimport_coderefs {
- my ($target, $info) = @_;
- return unless $info and my $exports = $info->{exports};
- my %rev = reverse %$exports;
- my $stash = _getstash($target);
- foreach my $name (keys %$exports) {
- if ($stash->{$name} and defined(&{$stash->{$name}})) {
- if ($rev{$target->can($name)}) {
- my $old = delete $stash->{$name};
- my $full_name = join('::',$target,$name);
- # Copy everything except the code slot back into place (e.g. $has)
- foreach my $type (qw(SCALAR HASH ARRAY IO)) {
- next unless defined(*{$old}{$type});
- no strict 'refs';
- *$full_name = *{$old}{$type};
- }
- }
- }
- }
-}
-
-if ($Config{useithreads}) {
- require Moo::HandleMoose::_TypeMap;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/_mro.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/_mro.pm
deleted file mode 100644
index fe38ebe0..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/_mro.pm
+++ /dev/null
@@ -1,11 +0,0 @@
-#line 1 "Moo/_mro.pm"
-package Moo::_mro;
-use Moo::_strictures;
-
-if ("$]" >= 5.010_000) {
- require mro;
-} else {
- require MRO::Compat;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/_strictures.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/_strictures.pm
deleted file mode 100644
index eec48f7c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/_strictures.pm
+++ /dev/null
@@ -1,20 +0,0 @@
-#line 1 "Moo/_strictures.pm"
-package Moo::_strictures;
-use strict;
-use warnings;
-
-sub import {
- if ($ENV{MOO_FATAL_WARNINGS}) {
- require strictures;
- strictures->VERSION(2);
- @_ = ('strictures');
- goto &strictures::import;
- }
- else {
- strict->import;
- warnings->import;
- warnings->unimport('once');
- }
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Moo/sification.pm b/software/Slic3r-1.3.0.64bit/lib/Moo/sification.pm
deleted file mode 100644
index 0d151c97..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Moo/sification.pm
+++ /dev/null
@@ -1,35 +0,0 @@
-#line 1 "Moo/sification.pm"
-package Moo::sification;
-
-use Moo::_strictures;
-no warnings 'once';
-use Devel::GlobalDestruction qw(in_global_destruction);
-use Carp qw(croak);
-BEGIN { our @CARP_NOT = qw(Moo::HandleMoose) }
-
-sub unimport {
- croak "Can't disable Moo::sification after inflation has been done"
- if $Moo::HandleMoose::SETUP_DONE;
- our $disabled = 1;
-}
-
-sub Moo::HandleMoose::AuthorityHack::DESTROY {
- unless (our $disabled or in_global_destruction) {
- require Moo::HandleMoose;
- Moo::HandleMoose->import;
- }
-}
-
-sub import {
- return
- if our $setup_done;
- if ($INC{"Moose.pm"}) {
- require Moo::HandleMoose;
- Moo::HandleMoose->import;
- } else {
- $Moose::AUTHORITY = bless({}, 'Moo::HandleMoose::AuthorityHack');
- }
- $setup_done = 1;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA.pm b/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA.pm
deleted file mode 100644
index 994affe6..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA.pm
+++ /dev/null
@@ -1,23 +0,0 @@
-#line 1 "Mozilla/CA.pm"
-package Mozilla::CA;
-
-use strict;
-our $VERSION = '20160104';
-
-use Cwd ();
-use File::Spec ();
-use File::Basename qw(dirname);
-
-sub SSL_ca_file {
- my $file = File::Spec->catfile($ENV{PAR_TEMP}, qw(inc lib Mozilla CA cacert.pem));
- if (!File::Spec->file_name_is_absolute($file)) {
- $file = File::Spec->catfile(Cwd::cwd(), $file);
- }
- return $file;
-}
-
-1;
-
-__END__
-
-#line 75
\ No newline at end of file
diff --git a/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA/cacert.pem b/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA/cacert.pem
deleted file mode 100644
index 92536b7e..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Mozilla/CA/cacert.pem
+++ /dev/null
@@ -1,3952 +0,0 @@
-##
-## Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Mon Jan 4 01:17:06 2016
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-## Conversion done with mk-ca-bundle.pl version 1.25.
-## SHA1: 6d7d2f0a4fae587e7431be191a081ac1257d300a
-##
-
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) Főtanúsítvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2007
-=================================================
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
-DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
-a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
-YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
-KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
-KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
-rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
-AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
-Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
-Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
-BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
-poRq0Tl9
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
-Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
-LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
-ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
-BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
-KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
-p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
-AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
-4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
-eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
-MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
-PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
-OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
-2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
-dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
-X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 EV 2009
-=================================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
-egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
-zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
-7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
-sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
-11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
-cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
-ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
-MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
-b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
-c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
-PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
-ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
-NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
-w9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-PSCProcert
-==========
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
-ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
-MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
-dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
-cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
-IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
-MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
-DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
-ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
-Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
-wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
-3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
-RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
-EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
-0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
-td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
-Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
-r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
-AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
-Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
-xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
-ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
-EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
-Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
-ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
-9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
-MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
-LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
-ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
-YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
-dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
-T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
-g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
-uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
-n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
-FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
-5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
-3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
-poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
-eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-China Internet Network Information Center EV Certificates Root
-==============================================================
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
-BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
-aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
-Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
-A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
-PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
-cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
-jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
-98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
-klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
-KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
-7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
-glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
-0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
-7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
-5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-Swisscom Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
-MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
-LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
-ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
-wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
-Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
-SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
-NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
-mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
-Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
-qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
-MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
-v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
-82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
-o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
-a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
-OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
-mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
-+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
-rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
-5OfNeOI5wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-Swisscom Root EV CA 2
-=====================
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
-BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
-cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
-MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
-HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
-Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
-o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
-Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
-GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
-qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
-Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
-alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
-m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
-bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
-xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
-BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
-bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
-j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
-wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
-XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
-59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
-23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
-J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
-HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
-uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
-l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-CA Disig Root R1
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
-3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
-u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
-m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
-CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
-YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
-vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
-LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
-ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
-XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
-04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
-LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
-CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
-VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
-YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
-ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
-lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
-UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
-a7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-CA Disig Root R2
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
-w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
-xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
-A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
-GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
-g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
-5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
-koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
-Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
-Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
-Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
-sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
-dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
-1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
-mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
-utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
-sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
-UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
-7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-ACCVRAIZ1
-=========
------BEGIN CERTIFICATE-----
-MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
-SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
-MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
-UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
-jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
-RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
-aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
-0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
-WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
-8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
-5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
-9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
-Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
-Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
-Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
-VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
-Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
-QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
-AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
-YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
-AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
-IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
-aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
-dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
-MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
-hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
-R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
-YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
-nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
-TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
-sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
-I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
-Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
-3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
-EfbRD0tVNEYqi4Y7
------END CERTIFICATE-----
-
-TWCA Global Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
-CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
-QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
-EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
-Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
-nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
-r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
-Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
-tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
-KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
-sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
-yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
-kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
-zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
-cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
-LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
-8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
-/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
-lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
-A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
-i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
-EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
-zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
------END CERTIFICATE-----
-
-TeliaSonera Root CA v1
-======================
------BEGIN CERTIFICATE-----
-MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
-CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
-MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
-VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
-6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
-3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
-B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
-Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
-oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
-F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
-oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
-gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
-TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
-AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
-DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
-zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
-0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
-pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
-G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
-c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
-JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
-qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
-Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
-WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
------END CERTIFICATE-----
-
-E-Tugra Certification Authority
-===============================
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
-DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
-ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
-NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
-QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
-cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
-DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
-hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
-CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
-ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
-BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
-E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
-rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
-jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
-dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
-/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
-kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
-XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
-VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
-a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
-dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
-KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
-Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
-8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
-C7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 2
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
-MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
-SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
-vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
-2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
-WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
-YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
-r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
-vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
-3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
-9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
------END CERTIFICATE-----
-
-Atos TrustedRoot 2011
-=====================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
-cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
-MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
-A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
-hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
-54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
-DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
-HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
-z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
-l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
-bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
-k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
-TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
-61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
-3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
------END CERTIFICATE-----
-
-QuoVadis Root CA 1 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
-PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
-PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
-Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
-ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
-g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
-7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
-9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
-iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
-t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
-hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
-MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
-GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
-Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
-+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
-3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
-wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
-O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
-FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
-hMJKzRwuJIczYOXD
------END CERTIFICATE-----
-
-QuoVadis Root CA 2 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
-ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
-NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
-oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
-MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
-V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
-L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
-sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
-6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
-lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
-hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
-AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
-pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
-x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
-dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
-U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
-mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
-zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
-JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
-O3jtZsSOeWmD3n+M
------END CERTIFICATE-----
-
-QuoVadis Root CA 3 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
-IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
-Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
-6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
-I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
-VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
-5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
-Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
-dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
-rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
-hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
-KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
-t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
-TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
-DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
-Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
-hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
-0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
-dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
-PpxxVJkES/1Y+Zj0
------END CERTIFICATE-----
-
-DigiCert Assured ID Root G2
-===========================
------BEGIN CERTIFICATE-----
-MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
-MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
-35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
-bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
-VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
-YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
-lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
-w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
-0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
-d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
-hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
-jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
-IhNzbM8m9Yop5w==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root G3
-===========================
------BEGIN CERTIFICATE-----
-MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
-UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
-VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
-MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
-BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
-RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
-KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
-UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
-YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
-1vUhZscv6pZjamVFkpUBtA==
------END CERTIFICATE-----
-
-DigiCert Global Root G2
-=======================
------BEGIN CERTIFICATE-----
-MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
-MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
-kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
-3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
-BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
-UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
-o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
-5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
-F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
-WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
-QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
-iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
-MrY=
------END CERTIFICATE-----
-
-DigiCert Global Root G3
-=======================
------BEGIN CERTIFICATE-----
-MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
-UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
-VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
-MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
-aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
-AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
-YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
-BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
-Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
-3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
-VOKa5Vt8sycX
------END CERTIFICATE-----
-
-DigiCert Trusted Root G4
-========================
------BEGIN CERTIFICATE-----
-MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
-HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
-MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
-pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
-k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
-vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
-QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
-MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
-mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
-f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
-dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
-oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
-ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
-ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
-yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
-7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
-ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
-5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
-/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
-5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
-G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
-82Z+
------END CERTIFICATE-----
-
-WoSign
-======
------BEGIN CERTIFICATE-----
-MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
-EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
-BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
-vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
-CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
-2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
-KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
-+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
-EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
-lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
-8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
-yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
-AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
-8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
-LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
-T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
-y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
-2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
-5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
-EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
-mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
-kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
-kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
------END CERTIFICATE-----
-
-WoSign China
-============
------BEGIN CERTIFICATE-----
-MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
-EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
-geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
-VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
-8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
-uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
-dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
-Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
-b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
-76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
-+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
-yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
-GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
-A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
-yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
-r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
-j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
-kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
-qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
-jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
-ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
-T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
-kI26oQ==
------END CERTIFICATE-----
-
-COMODO RSA Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
-dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
-FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
-5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
-x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
-2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
-OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
-sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
-GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
-WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
-FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
-rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
-nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
-tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
-sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
-pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
-zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
-ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
-7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
-LaZRfyHBNVOFBkpdn627G190
------END CERTIFICATE-----
-
-USERTrust RSA Certification Authority
-=====================================
------BEGIN CERTIFICATE-----
-MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE
-BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
-ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE
-BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
-ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz
-0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j
-Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn
-RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O
-+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq
-/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE
-Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM
-lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8
-yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+
-eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
-BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW
-FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ
-7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ
-Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM
-8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi
-FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi
-yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c
-J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw
-sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
-Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
------END CERTIFICATE-----
-
-USERTrust ECC Certification Authority
-=====================================
------BEGIN CERTIFICATE-----
-MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
-aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
-aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
-0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
-nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
-HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
-HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
-9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
------END CERTIFICATE-----
-
-GlobalSign ECC Root CA - R4
-===========================
------BEGIN CERTIFICATE-----
-MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
-OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
-AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
-MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
-JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
------END CERTIFICATE-----
-
-GlobalSign ECC Root CA - R5
-===========================
------BEGIN CERTIFICATE-----
-MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
-SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
-h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
-BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
-uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
-yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G3
-==================================
------BEGIN CERTIFICATE-----
-MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y
-olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t
-x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
-EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
-Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur
-mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
-1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
-07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo
-FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
-41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB
-AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu
-yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
-U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq
-KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1
-v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA
-8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b
-8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r
-mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq
-1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI
-JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV
-tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=
------END CERTIFICATE-----
-
-Staat der Nederlanden EV Root CA
-================================
------BEGIN CERTIFICATE-----
-MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
-MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
-cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk
-SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW
-O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r
-0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8
-Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV
-XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr
-08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV
-0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd
-74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
-fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa
-ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
-eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu
-c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq
-5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN
-b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN
-f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi
-5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
-WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK
-DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy
-eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
------END CERTIFICATE-----
-
-IdenTrust Commercial Root CA 1
-==============================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG
-EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS
-b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES
-MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB
-IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld
-hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/
-mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi
-1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C
-XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl
-3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy
-NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV
-WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg
-xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix
-uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI
-hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
-6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg
-ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt
-ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV
-YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX
-feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro
-kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe
-2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz
-Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R
-cGzM7vRX+Bi6hG6H
------END CERTIFICATE-----
-
-IdenTrust Public Sector Root CA 1
-=================================
------BEGIN CERTIFICATE-----
-MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
-EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv
-ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV
-UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS
-b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy
-P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6
-Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
-rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
-qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS
-mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn
-ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh
-LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v
-iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL
-4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B
-Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw
-DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
-t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
-mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt
-GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt
-m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx
-NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
-Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI
-ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
-ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ
-3Wl9af0AVqW3rLatt8o+Ae+c
------END CERTIFICATE-----
-
-Entrust Root Certification Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
-bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
-b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
-HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
-DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
-OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
-/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
-HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
-s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
-TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
-AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
-0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
-iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
-Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
-nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
-vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
-e4pIb4tF9g==
------END CERTIFICATE-----
-
-Entrust Root Certification Authority - EC1
-==========================================
------BEGIN CERTIFICATE-----
-MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
-FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
-YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
-FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
-LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
-AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
-9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
-vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
-kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
------END CERTIFICATE-----
-
-CFCA EV ROOT
-============
------BEGIN CERTIFICATE-----
-MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE
-CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB
-IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw
-MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD
-DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV
-BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD
-7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN
-uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW
-ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7
-xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f
-py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K
-gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol
-hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ
-tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf
-BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB
-ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q
-ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua
-4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG
-E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX
-BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn
-aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy
-PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX
-kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
-ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
------END CERTIFICATE-----
-
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
-=========================================================
------BEGIN CERTIFICATE-----
-MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
-RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
-ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
-SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
-n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
-ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
-jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
-ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
-9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
-4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
-HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
-hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
-BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
-URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
-lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
-B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
------END CERTIFICATE-----
-
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
-=========================================================
------BEGIN CERTIFICATE-----
-MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
-MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
-BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
-aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
-aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
-2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
-wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
-HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
-+DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
-9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
-fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
-o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
-hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
-O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
------END CERTIFICATE-----
-
-Certinomis - Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
-LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx
-EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD
-ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
-P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo
-d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
-z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00
-8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
-RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE
-6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t
-FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV
-PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH
-i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
-YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
-6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
-AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
-WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw
-Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX
-lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ
-y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9
-Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
-DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
-I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
-cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
-hkIGuUE=
------END CERTIFICATE-----
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/Cmd.pm b/software/Slic3r-1.3.0.64bit/lib/Net/Cmd.pm
deleted file mode 100644
index dd08fdc4..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/Cmd.pm
+++ /dev/null
@@ -1,646 +0,0 @@
-#line 1 "Net/Cmd.pm"
-# Net::Cmd.pm
-#
-# Versions up to 2.29_1 Copyright (c) 1995-2006 Graham Barr .
-# All rights reserved.
-# Changes in Version 2.29_2 onwards Copyright (C) 2013-2015 Steve Hay. All
-# rights reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-
-package Net::Cmd;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Exporter;
-use Symbol 'gensym';
-use Errno 'EINTR';
-
-BEGIN {
- if ($^O eq 'os390') {
- require Convert::EBCDIC;
-
- # Convert::EBCDIC->import;
- }
-}
-
-our $VERSION = "3.10";
-our @ISA = qw(Exporter);
-our @EXPORT = qw(CMD_INFO CMD_OK CMD_MORE CMD_REJECT CMD_ERROR CMD_PENDING);
-
-use constant CMD_INFO => 1;
-use constant CMD_OK => 2;
-use constant CMD_MORE => 3;
-use constant CMD_REJECT => 4;
-use constant CMD_ERROR => 5;
-use constant CMD_PENDING => 0;
-
-use constant DEF_REPLY_CODE => 421;
-
-my %debug = ();
-
-my $tr = $^O eq 'os390' ? Convert::EBCDIC->new() : undef;
-
-sub toebcdic {
- my $cmd = shift;
-
- unless (exists ${*$cmd}{'net_cmd_asciipeer'}) {
- my $string = $_[0];
- my $ebcdicstr = $tr->toebcdic($string);
- ${*$cmd}{'net_cmd_asciipeer'} = $string !~ /^\d+/ && $ebcdicstr =~ /^\d+/;
- }
-
- ${*$cmd}{'net_cmd_asciipeer'}
- ? $tr->toebcdic($_[0])
- : $_[0];
-}
-
-
-sub toascii {
- my $cmd = shift;
- ${*$cmd}{'net_cmd_asciipeer'}
- ? $tr->toascii($_[0])
- : $_[0];
-}
-
-
-sub _print_isa {
- no strict 'refs'; ## no critic (TestingAndDebugging::ProhibitNoStrict)
-
- my $pkg = shift;
- my $cmd = $pkg;
-
- $debug{$pkg} ||= 0;
-
- my %done = ();
- my @do = ($pkg);
- my %spc = ($pkg, "");
-
- while ($pkg = shift @do) {
- next if defined $done{$pkg};
-
- $done{$pkg} = 1;
-
- my $v =
- defined ${"${pkg}::VERSION"}
- ? "(" . ${"${pkg}::VERSION"} . ")"
- : "";
-
- my $spc = $spc{$pkg};
- $cmd->debug_print(1, "${spc}${pkg}${v}\n");
-
- if (@{"${pkg}::ISA"}) {
- @spc{@{"${pkg}::ISA"}} = (" " . $spc{$pkg}) x @{"${pkg}::ISA"};
- unshift(@do, @{"${pkg}::ISA"});
- }
- }
-}
-
-
-sub debug {
- @_ == 1 or @_ == 2 or croak 'usage: $obj->debug([LEVEL])';
-
- my ($cmd, $level) = @_;
- my $pkg = ref($cmd) || $cmd;
- my $oldval = 0;
-
- if (ref($cmd)) {
- $oldval = ${*$cmd}{'net_cmd_debug'} || 0;
- }
- else {
- $oldval = $debug{$pkg} || 0;
- }
-
- return $oldval
- unless @_ == 2;
-
- $level = $debug{$pkg} || 0
- unless defined $level;
-
- _print_isa($pkg)
- if ($level && !exists $debug{$pkg});
-
- if (ref($cmd)) {
- ${*$cmd}{'net_cmd_debug'} = $level;
- }
- else {
- $debug{$pkg} = $level;
- }
-
- $oldval;
-}
-
-
-sub message {
- @_ == 1 or croak 'usage: $obj->message()';
-
- my $cmd = shift;
-
- wantarray
- ? @{${*$cmd}{'net_cmd_resp'}}
- : join("", @{${*$cmd}{'net_cmd_resp'}});
-}
-
-
-sub debug_text { $_[2] }
-
-
-sub debug_print {
- my ($cmd, $out, $text) = @_;
- print STDERR $cmd, ($out ? '>>> ' : '<<< '), $cmd->debug_text($out, $text);
-}
-
-
-sub code {
- @_ == 1 or croak 'usage: $obj->code()';
-
- my $cmd = shift;
-
- ${*$cmd}{'net_cmd_code'} = $cmd->DEF_REPLY_CODE
- unless exists ${*$cmd}{'net_cmd_code'};
-
- ${*$cmd}{'net_cmd_code'};
-}
-
-
-sub status {
- @_ == 1 or croak 'usage: $obj->status()';
-
- my $cmd = shift;
-
- substr(${*$cmd}{'net_cmd_code'}, 0, 1);
-}
-
-
-sub set_status {
- @_ == 3 or croak 'usage: $obj->set_status(CODE, MESSAGE)';
-
- my $cmd = shift;
- my ($code, $resp) = @_;
-
- $resp = defined $resp ? [$resp] : []
- unless ref($resp);
-
- (${*$cmd}{'net_cmd_code'}, ${*$cmd}{'net_cmd_resp'}) = ($code, $resp);
-
- 1;
-}
-
-sub _syswrite_with_timeout {
- my $cmd = shift;
- my $line = shift;
-
- my $len = length($line);
- my $offset = 0;
- my $win = "";
- vec($win, fileno($cmd), 1) = 1;
- my $timeout = $cmd->timeout || undef;
- my $initial = time;
- my $pending = $timeout;
-
- local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
-
- while ($len) {
- my $wout;
- my $nfound = select(undef, $wout = $win, undef, $pending);
- if ((defined $nfound and $nfound > 0) or -f $cmd) # -f for testing on win32
- {
- my $w = syswrite($cmd, $line, $len, $offset);
- if (! defined($w) ) {
- my $err = $!;
- $cmd->close;
- $cmd->_set_status_closed($err);
- return;
- }
- $len -= $w;
- $offset += $w;
- }
- elsif ($nfound == -1) {
- if ( $! == EINTR ) {
- if ( defined($timeout) ) {
- redo if ($pending = $timeout - ( time - $initial ) ) > 0;
- $cmd->_set_status_timeout;
- return;
- }
- redo;
- }
- my $err = $!;
- $cmd->close;
- $cmd->_set_status_closed($err);
- return;
- }
- else {
- $cmd->_set_status_timeout;
- return;
- }
- }
-
- return 1;
-}
-
-sub _set_status_timeout {
- my $cmd = shift;
- my $pkg = ref($cmd) || $cmd;
-
- $cmd->set_status($cmd->DEF_REPLY_CODE, "[$pkg] Timeout");
- carp(ref($cmd) . ": " . (caller(1))[3] . "(): timeout") if $cmd->debug;
-}
-
-sub _set_status_closed {
- my $cmd = shift;
- my $err = shift;
- my $pkg = ref($cmd) || $cmd;
-
- $cmd->set_status($cmd->DEF_REPLY_CODE, "[$pkg] Connection closed");
- carp(ref($cmd) . ": " . (caller(1))[3]
- . "(): unexpected EOF on command channel: $err") if $cmd->debug;
-}
-
-sub _is_closed {
- my $cmd = shift;
- if (!defined fileno($cmd)) {
- $cmd->_set_status_closed($!);
- return 1;
- }
- return 0;
-}
-
-sub command {
- my $cmd = shift;
-
- return $cmd
- if $cmd->_is_closed;
-
- $cmd->dataend()
- if (exists ${*$cmd}{'net_cmd_last_ch'});
-
- if (scalar(@_)) {
- my $str = join(
- " ",
- map {
- /\n/
- ? do { my $n = $_; $n =~ tr/\n/ /; $n }
- : $_;
- } @_
- );
- $str = $cmd->toascii($str) if $tr;
- $str .= "\015\012";
-
- $cmd->debug_print(1, $str)
- if ($cmd->debug);
-
- # though documented to return undef on failure, the legacy behavior
- # was to return $cmd even on failure, so this odd construct does that
- $cmd->_syswrite_with_timeout($str)
- or return $cmd;
- }
-
- $cmd;
-}
-
-
-sub ok {
- @_ == 1 or croak 'usage: $obj->ok()';
-
- my $code = $_[0]->code;
- 0 < $code && $code < 400;
-}
-
-
-sub unsupported {
- my $cmd = shift;
-
- $cmd->set_status(580, 'Unsupported command');
-
- 0;
-}
-
-
-sub getline {
- my $cmd = shift;
-
- ${*$cmd}{'net_cmd_lines'} ||= [];
-
- return shift @{${*$cmd}{'net_cmd_lines'}}
- if scalar(@{${*$cmd}{'net_cmd_lines'}});
-
- my $partial = defined(${*$cmd}{'net_cmd_partial'}) ? ${*$cmd}{'net_cmd_partial'} : "";
-
- return
- if $cmd->_is_closed;
-
- my $fd = fileno($cmd);
- my $rin = "";
- vec($rin, $fd, 1) = 1;
-
- my $buf;
-
- until (scalar(@{${*$cmd}{'net_cmd_lines'}})) {
- my $timeout = $cmd->timeout || undef;
- my $rout;
-
- my $select_ret = select($rout = $rin, undef, undef, $timeout);
- if ($select_ret > 0) {
- unless (sysread($cmd, $buf = "", 1024)) {
- my $err = $!;
- $cmd->close;
- $cmd->_set_status_closed($err);
- return;
- }
-
- substr($buf, 0, 0) = $partial; ## prepend from last sysread
-
- my @buf = split(/\015?\012/, $buf, -1); ## break into lines
-
- $partial = pop @buf;
-
- push(@{${*$cmd}{'net_cmd_lines'}}, map {"$_\n"} @buf);
-
- }
- else {
- $cmd->_set_status_timeout;
- return;
- }
- }
-
- ${*$cmd}{'net_cmd_partial'} = $partial;
-
- if ($tr) {
- foreach my $ln (@{${*$cmd}{'net_cmd_lines'}}) {
- $ln = $cmd->toebcdic($ln);
- }
- }
-
- shift @{${*$cmd}{'net_cmd_lines'}};
-}
-
-
-sub ungetline {
- my ($cmd, $str) = @_;
-
- ${*$cmd}{'net_cmd_lines'} ||= [];
- unshift(@{${*$cmd}{'net_cmd_lines'}}, $str);
-}
-
-
-sub parse_response {
- return ()
- unless $_[1] =~ s/^(\d\d\d)(.?)//o;
- ($1, $2 eq "-");
-}
-
-
-sub response {
- my $cmd = shift;
- my ($code, $more) = (undef) x 2;
-
- $cmd->set_status($cmd->DEF_REPLY_CODE, undef); # initialize the response
-
- while (1) {
- my $str = $cmd->getline();
-
- return CMD_ERROR
- unless defined($str);
-
- $cmd->debug_print(0, $str)
- if ($cmd->debug);
-
- ($code, $more) = $cmd->parse_response($str);
- unless (defined $code) {
- carp("$cmd: response(): parse error in '$str'") if ($cmd->debug);
- $cmd->ungetline($str);
- $@ = $str; # $@ used as tunneling hack
- return CMD_ERROR;
- }
-
- ${*$cmd}{'net_cmd_code'} = $code;
-
- push(@{${*$cmd}{'net_cmd_resp'}}, $str);
-
- last unless ($more);
- }
-
- return unless defined $code;
- substr($code, 0, 1);
-}
-
-
-sub read_until_dot {
- my $cmd = shift;
- my $fh = shift;
- my $arr = [];
-
- while (1) {
- my $str = $cmd->getline() or return;
-
- $cmd->debug_print(0, $str)
- if ($cmd->debug & 4);
-
- last if ($str =~ /^\.\r?\n/o);
-
- $str =~ s/^\.\././o;
-
- if (defined $fh) {
- print $fh $str;
- }
- else {
- push(@$arr, $str);
- }
- }
-
- $arr;
-}
-
-
-sub datasend {
- my $cmd = shift;
- my $arr = @_ == 1 && ref($_[0]) ? $_[0] : \@_;
- my $line = join("", @$arr);
-
- # Perls < 5.10.1 (with the exception of 5.8.9) have a performance problem with
- # the substitutions below when dealing with strings stored internally in
- # UTF-8, so downgrade them (if possible).
- # Data passed to datasend() should be encoded to octets upstream already so
- # shouldn't even have the UTF-8 flag on to start with, but if it so happens
- # that the octets are stored in an upgraded string (as can sometimes occur)
- # then they would still downgrade without fail anyway.
- # Only Unicode codepoints > 0xFF stored in an upgraded string will fail to
- # downgrade. We fail silently in that case, and a "Wide character in print"
- # warning will be emitted later by syswrite().
- utf8::downgrade($line, 1) if $] < 5.010001 && $] != 5.008009;
-
- return 0
- if $cmd->_is_closed;
-
- my $last_ch = ${*$cmd}{'net_cmd_last_ch'};
-
- # We have not send anything yet, so last_ch = "\012" means we are at the start of a line
- $last_ch = ${*$cmd}{'net_cmd_last_ch'} = "\012" unless defined $last_ch;
-
- return 1 unless length $line;
-
- if ($cmd->debug) {
- foreach my $b (split(/\n/, $line)) {
- $cmd->debug_print(1, "$b\n");
- }
- }
-
- $line =~ tr/\r\n/\015\012/ unless "\r" eq "\015";
-
- my $first_ch = '';
-
- if ($last_ch eq "\015") {
- # Remove \012 so it does not get prefixed with another \015 below
- # and escape the . if there is one following it because the fixup
- # below will not find it
- $first_ch = "\012" if $line =~ s/^\012(\.?)/$1$1/;
- }
- elsif ($last_ch eq "\012") {
- # Fixup below will not find the . as the first character of the buffer
- $first_ch = "." if $line =~ /^\./;
- }
-
- $line =~ s/\015?\012(\.?)/\015\012$1$1/sg;
-
- substr($line, 0, 0) = $first_ch;
-
- ${*$cmd}{'net_cmd_last_ch'} = substr($line, -1, 1);
-
- $cmd->_syswrite_with_timeout($line)
- or return;
-
- 1;
-}
-
-
-sub rawdatasend {
- my $cmd = shift;
- my $arr = @_ == 1 && ref($_[0]) ? $_[0] : \@_;
- my $line = join("", @$arr);
-
- return 0
- if $cmd->_is_closed;
-
- return 1
- unless length($line);
-
- if ($cmd->debug) {
- my $b = "$cmd>>> ";
- print STDERR $b, join("\n$b", split(/\n/, $line)), "\n";
- }
-
- $cmd->_syswrite_with_timeout($line)
- or return;
-
- 1;
-}
-
-
-sub dataend {
- my $cmd = shift;
-
- return 0
- if $cmd->_is_closed;
-
- my $ch = ${*$cmd}{'net_cmd_last_ch'};
- my $tosend;
-
- if (!defined $ch) {
- return 1;
- }
- elsif ($ch ne "\012") {
- $tosend = "\015\012";
- }
-
- $tosend .= ".\015\012";
-
- $cmd->debug_print(1, ".\n")
- if ($cmd->debug);
-
- $cmd->_syswrite_with_timeout($tosend)
- or return 0;
-
- delete ${*$cmd}{'net_cmd_last_ch'};
-
- $cmd->response() == CMD_OK;
-}
-
-# read and write to tied filehandle
-sub tied_fh {
- my $cmd = shift;
- ${*$cmd}{'net_cmd_readbuf'} = '';
- my $fh = gensym();
- tie *$fh, ref($cmd), $cmd;
- return $fh;
-}
-
-# tie to myself
-sub TIEHANDLE {
- my $class = shift;
- my $cmd = shift;
- return $cmd;
-}
-
-# Tied filehandle read. Reads requested data length, returning
-# end-of-file when the dot is encountered.
-sub READ {
- my $cmd = shift;
- my ($len, $offset) = @_[1, 2];
- return unless exists ${*$cmd}{'net_cmd_readbuf'};
- my $done = 0;
- while (!$done and length(${*$cmd}{'net_cmd_readbuf'}) < $len) {
- ${*$cmd}{'net_cmd_readbuf'} .= $cmd->getline() or return;
- $done++ if ${*$cmd}{'net_cmd_readbuf'} =~ s/^\.\r?\n\Z//m;
- }
-
- $_[0] = '';
- substr($_[0], $offset + 0) = substr(${*$cmd}{'net_cmd_readbuf'}, 0, $len);
- substr(${*$cmd}{'net_cmd_readbuf'}, 0, $len) = '';
- delete ${*$cmd}{'net_cmd_readbuf'} if $done;
-
- return length $_[0];
-}
-
-
-sub READLINE {
- my $cmd = shift;
-
- # in this context, we use the presence of readbuf to
- # indicate that we have not yet reached the eof
- return unless exists ${*$cmd}{'net_cmd_readbuf'};
- my $line = $cmd->getline;
- return if $line =~ /^\.\r?\n/;
- $line;
-}
-
-
-sub PRINT {
- my $cmd = shift;
- my ($buf, $len, $offset) = @_;
- $len ||= length($buf);
- $offset += 0;
- return unless $cmd->datasend(substr($buf, $offset, $len));
- ${*$cmd}{'net_cmd_sending'}++; # flag that we should call dataend()
- return $len;
-}
-
-
-sub CLOSE {
- my $cmd = shift;
- my $r = exists(${*$cmd}{'net_cmd_sending'}) ? $cmd->dataend : 1;
- delete ${*$cmd}{'net_cmd_readbuf'};
- delete ${*$cmd}{'net_cmd_sending'};
- $r;
-}
-
-1;
-
-__END__
-
-
-#line 874
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/Config.pm b/software/Slic3r-1.3.0.64bit/lib/Net/Config.pm
deleted file mode 100644
index f91384ba..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/Config.pm
+++ /dev/null
@@ -1,139 +0,0 @@
-#line 1 "Net/Config.pm"
-# Net::Config.pm
-#
-# Versions up to 1.11 Copyright (c) 2000 Graham Barr .
-# All rights reserved.
-# Changes in Version 1.11_01 onwards Copyright (C) 2013-2014 Steve Hay. All
-# rights reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-
-package Net::Config;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Exporter;
-use Socket qw(inet_aton inet_ntoa);
-
-our @EXPORT = qw(%NetConfig);
-our @ISA = qw(Net::LocalCfg Exporter);
-our $VERSION = "3.10";
-
-our($CONFIGURE, $LIBNET_CFG);
-
-eval {
- local @INC = @INC;
- pop @INC if $INC[-1] eq '.';
- local $SIG{__DIE__};
- require Net::LocalCfg;
-};
-
-our %NetConfig = (
- nntp_hosts => [],
- snpp_hosts => [],
- pop3_hosts => [],
- smtp_hosts => [],
- ph_hosts => [],
- daytime_hosts => [],
- time_hosts => [],
- inet_domain => undef,
- ftp_firewall => undef,
- ftp_ext_passive => 1,
- ftp_int_passive => 1,
- test_hosts => 1,
- test_exist => 1,
-);
-
-#
-# Try to get as much configuration info as possible from InternetConfig
-#
-{
-## no critic (BuiltinFunctions::ProhibitStringyEval)
-$^O eq 'MacOS' and eval < [ \$InternetConfig{ kICNNTPHost() } ],
- pop3_hosts => [ \$InternetConfig{ kICMailAccount() } =~ /\@(.*)/ ],
- smtp_hosts => [ \$InternetConfig{ kICSMTPHost() } ],
- ftp_testhost => \$InternetConfig{ kICFTPHost() } ? \$InternetConfig{ kICFTPHost()} : undef,
- ph_hosts => [ \$InternetConfig{ kICPhHost() } ],
- ftp_ext_passive => \$InternetConfig{"646F676F\xA5UsePassiveMode"} || 0,
- ftp_int_passive => \$InternetConfig{"646F676F\xA5UsePassiveMode"} || 0,
- socks_hosts =>
- \$InternetConfig{ kICUseSocks() } ? [ \$InternetConfig{ kICSocksHost() } ] : [],
- ftp_firewall =>
- \$InternetConfig{ kICUseFTPProxy() } ? [ \$InternetConfig{ kICFTPProxyHost() } ] : [],
-);
-\@NetConfig{keys %nc} = values %nc;
-}
-TRY_INTERNET_CONFIG
-}
-
-my $file = __FILE__;
-my $ref;
-$file =~ s/Config.pm/libnet.cfg/;
-if (-f $file) {
- $ref = eval { local $SIG{__DIE__}; do $file };
- if (ref($ref) eq 'HASH') {
- %NetConfig = (%NetConfig, %{$ref});
- $LIBNET_CFG = $file;
- }
-}
-if ($< == $> and !$CONFIGURE) {
- my $home = eval { local $SIG{__DIE__}; (getpwuid($>))[7] } || $ENV{HOME};
- $home ||= $ENV{HOMEDRIVE} . ($ENV{HOMEPATH} || '') if defined $ENV{HOMEDRIVE};
- if (defined $home) {
- $file = $home . "/.libnetrc";
- $ref = eval { local $SIG{__DIE__}; do $file } if -f $file;
- %NetConfig = (%NetConfig, %{$ref})
- if ref($ref) eq 'HASH';
- }
-}
-my ($k, $v);
-while (($k, $v) = each %NetConfig) {
- $NetConfig{$k} = [$v]
- if ($k =~ /_hosts$/ and $k ne "test_hosts" and defined($v) and !ref($v));
-}
-
-# Take a hostname and determine if it is inside the firewall
-
-
-sub requires_firewall {
- shift; # ignore package
- my $host = shift;
-
- return 0 unless defined $NetConfig{'ftp_firewall'};
-
- $host = inet_aton($host) or return -1;
- $host = inet_ntoa($host);
-
- if (exists $NetConfig{'local_netmask'}) {
- my $quad = unpack("N", pack("C*", split(/\./, $host)));
- my $list = $NetConfig{'local_netmask'};
- $list = [$list] unless ref($list);
- foreach (@$list) {
- my ($net, $bits) = (m#^(\d+\.\d+\.\d+\.\d+)/(\d+)$#) or next;
- my $mask = ~0 << (32 - $bits);
- my $addr = unpack("N", pack("C*", split(/\./, $net)));
-
- return 0 if (($addr & $mask) == ($quad & $mask));
- }
- return 1;
- }
-
- return 0;
-}
-
-*is_external = \&requires_firewall;
-
-1;
-
-__END__
-
-#line 346
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/Domain.pm b/software/Slic3r-1.3.0.64bit/lib/Net/Domain.pm
deleted file mode 100644
index 5e4d48b6..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/Domain.pm
+++ /dev/null
@@ -1,312 +0,0 @@
-#line 1 "Net/Domain.pm"
-# Net::Domain.pm
-#
-# Versions up to 2.21 Copyright (c) 1995-1998 Graham Barr .
-# All rights reserved.
-# Changes in Version 2.22 onwards Copyright (C) 2013-2014 Steve Hay. All rights
-# reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-
-package Net::Domain;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Exporter;
-use Net::Config;
-
-our @ISA = qw(Exporter);
-our @EXPORT_OK = qw(hostname hostdomain hostfqdn domainname);
-our $VERSION = "3.10";
-
-my ($host, $domain, $fqdn) = (undef, undef, undef);
-
-# Try every conceivable way to get hostname.
-
-
-sub _hostname {
-
- # we already know it
- return $host
- if (defined $host);
-
- if ($^O eq 'MSWin32') {
- require Socket;
- my ($name, $alias, $type, $len, @addr) = gethostbyname($ENV{'COMPUTERNAME'} || 'localhost');
- while (@addr) {
- my $a = shift(@addr);
- $host = gethostbyaddr($a, Socket::AF_INET());
- last if defined $host;
- }
- if (defined($host) && index($host, '.') > 0) {
- $fqdn = $host;
- ($host, $domain) = $fqdn =~ /^([^.]+)\.(.*)$/;
- }
- return $host;
- }
- elsif ($^O eq 'MacOS') {
- chomp($host = `hostname`);
- }
- elsif ($^O eq 'VMS') { ## multiple varieties of net s/w makes this hard
- $host = $ENV{'UCX$INET_HOST'} if defined($ENV{'UCX$INET_HOST'});
- $host = $ENV{'MULTINET_HOST_NAME'} if defined($ENV{'MULTINET_HOST_NAME'});
- if (index($host, '.') > 0) {
- $fqdn = $host;
- ($host, $domain) = $fqdn =~ /^([^.]+)\.(.*)$/;
- }
- return $host;
- }
- else {
- local $SIG{'__DIE__'};
-
- # syscall is preferred since it avoids tainting problems
- eval {
- my $tmp = "\0" x 256; ## preload scalar
- eval {
- package main;
- require "syscall.ph"; ## no critic (Modules::RequireBarewordIncludes)
- defined(&main::SYS_gethostname);
- }
- || eval {
- package main;
- require "sys/syscall.ph"; ## no critic (Modules::RequireBarewordIncludes)
- defined(&main::SYS_gethostname);
- }
- and $host =
- (syscall(&main::SYS_gethostname, $tmp, 256) == 0)
- ? $tmp
- : undef;
- }
-
- # POSIX
- || eval {
- require POSIX;
- $host = (POSIX::uname())[1];
- }
-
- # trusty old hostname command
- || eval {
- chop($host = `(hostname) 2>/dev/null`); # BSD'ish
- }
-
- # sysV/POSIX uname command (may truncate)
- || eval {
- chop($host = `uname -n 2>/dev/null`); ## SYSV'ish && POSIX'ish
- }
-
- # Apollo pre-SR10
- || eval { $host = (split(/[:. ]/, `/com/host`, 6))[0]; }
-
- || eval { $host = ""; };
- }
-
- # remove garbage
- $host =~ s/[\0\r\n]+//go;
- $host =~ s/(\A\.+|\.+\Z)//go;
- $host =~ s/\.\.+/\./go;
-
- $host;
-}
-
-
-sub _hostdomain {
-
- # we already know it
- return $domain
- if (defined $domain);
-
- local $SIG{'__DIE__'};
-
- return $domain = $NetConfig{'inet_domain'}
- if defined $NetConfig{'inet_domain'};
-
- # try looking in /etc/resolv.conf
- # putting this here and assuming that it is correct, eliminates
- # calls to gethostbyname, and therefore DNS lookups. This helps
- # those on dialup systems.
-
- local ($_);
-
- if (open(my $res, '<', "/etc/resolv.conf")) {
- while (<$res>) {
- $domain = $1
- if (/\A\s*(?:domain|search)\s+(\S+)/);
- }
- close($res);
-
- return $domain
- if (defined $domain);
- }
-
- # just try hostname and system calls
-
- my $host = _hostname();
- my (@hosts);
-
- @hosts = ($host, "localhost");
-
- unless (defined($host) && $host =~ /\./) {
- my $dom = undef;
- eval {
- my $tmp = "\0" x 256; ## preload scalar
- eval {
- package main;
- require "syscall.ph"; ## no critic (Modules::RequireBarewordIncludes)
- }
- || eval {
- package main;
- require "sys/syscall.ph"; ## no critic (Modules::RequireBarewordIncludes)
- }
- and $dom =
- (syscall(&main::SYS_getdomainname, $tmp, 256) == 0)
- ? $tmp
- : undef;
- };
-
- if ($^O eq 'VMS') {
- $dom ||= $ENV{'TCPIP$INET_DOMAIN'}
- || $ENV{'UCX$INET_DOMAIN'};
- }
-
- chop($dom = `domainname 2>/dev/null`)
- unless (defined $dom || $^O =~ /^(?:cygwin|MSWin32|android)/);
-
- if (defined $dom) {
- my @h = ();
- $dom =~ s/^\.+//;
- while (length($dom)) {
- push(@h, "$host.$dom");
- $dom =~ s/^[^.]+.+// or last;
- }
- unshift(@hosts, @h);
- }
- }
-
- # Attempt to locate FQDN
-
- foreach (grep { defined $_ } @hosts) {
- my @info = gethostbyname($_);
-
- next unless @info;
-
- # look at real name & aliases
- foreach my $site ($info[0], split(/ /, $info[1])) {
- if (rindex($site, ".") > 0) {
-
- # Extract domain from FQDN
-
- ($domain = $site) =~ s/\A[^.]+\.//;
- return $domain;
- }
- }
- }
-
- # Look for environment variable
-
- $domain ||= $ENV{LOCALDOMAIN} || $ENV{DOMAIN};
-
- if (defined $domain) {
- $domain =~ s/[\r\n\0]+//g;
- $domain =~ s/(\A\.+|\.+\Z)//g;
- $domain =~ s/\.\.+/\./g;
- }
-
- $domain;
-}
-
-
-sub domainname {
-
- return $fqdn
- if (defined $fqdn);
-
- _hostname();
-
- # *.local names are special on darwin. If we call gethostbyname below, it
- # may hang while waiting for another, non-existent computer to respond.
- if($^O eq 'darwin' && $host =~ /\.local$/) {
- return $host;
- }
-
- _hostdomain();
-
- # Assumption: If the host name does not contain a period
- # and the domain name does, then assume that they are correct
- # this helps to eliminate calls to gethostbyname, and therefore
- # eliminate DNS lookups
-
- return $fqdn = $host . "." . $domain
- if (defined $host
- and defined $domain
- and $host !~ /\./
- and $domain =~ /\./);
-
- # For hosts that have no name, just an IP address
- return $fqdn = $host if defined $host and $host =~ /^\d+(\.\d+){3}$/;
-
- my @host = defined $host ? split(/\./, $host) : ('localhost');
- my @domain = defined $domain ? split(/\./, $domain) : ();
- my @fqdn = ();
-
- # Determine from @host & @domain the FQDN
-
- my @d = @domain;
-
-LOOP:
- while (1) {
- my @h = @host;
- while (@h) {
- my $tmp = join(".", @h, @d);
- if ((gethostbyname($tmp))[0]) {
- @fqdn = (@h, @d);
- $fqdn = $tmp;
- last LOOP;
- }
- pop @h;
- }
- last unless shift @d;
- }
-
- if (@fqdn) {
- $host = shift @fqdn;
- until ((gethostbyname($host))[0]) {
- $host .= "." . shift @fqdn;
- }
- $domain = join(".", @fqdn);
- }
- else {
- undef $host;
- undef $domain;
- undef $fqdn;
- }
-
- $fqdn;
-}
-
-
-sub hostfqdn { domainname() }
-
-
-sub hostname {
- domainname()
- unless (defined $host);
- return $host;
-}
-
-
-sub hostdomain {
- domainname()
- unless (defined $domain);
- return $domain;
-}
-
-1; # Keep require happy
-
-__END__
-
-#line 365
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP.pm
deleted file mode 100644
index 73b43ee2..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP.pm
+++ /dev/null
@@ -1,1427 +0,0 @@
-#line 1 "Net/FTP.pm"
-# Net::FTP.pm
-#
-# Versions up to 2.77_2 Copyright (c) 1995-2004 Graham Barr .
-# All rights reserved.
-# Changes in Version 2.77_3 onwards Copyright (C) 2013-2015 Steve Hay. All
-# rights reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-#
-# Documentation (at end) improved 1996 by Nathan Torkington .
-
-package Net::FTP;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Fcntl qw(O_WRONLY O_RDONLY O_APPEND O_CREAT O_TRUNC);
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-use Socket;
-use Time::Local;
-
-our $VERSION = '3.10';
-
-our $IOCLASS;
-my $family_key;
-BEGIN {
- # Code for detecting if we can use SSL
- my $ssl_class = eval {
- require IO::Socket::SSL;
- # first version with default CA on most platforms
- no warnings 'numeric';
- IO::Socket::SSL->VERSION(2.007);
- } && 'IO::Socket::SSL';
-
- my $nossl_warn = !$ssl_class &&
- 'To use SSL please install IO::Socket::SSL with version>=2.007';
-
- # Code for detecting if we can use IPv6
- my $inet6_class = eval {
- require IO::Socket::IP;
- no warnings 'numeric';
- IO::Socket::IP->VERSION(0.25);
- } && 'IO::Socket::IP' || eval {
- require IO::Socket::INET6;
- no warnings 'numeric';
- IO::Socket::INET6->VERSION(2.62);
- } && 'IO::Socket::INET6';
-
- sub can_ssl { $ssl_class };
- sub can_inet6 { $inet6_class };
-
- $IOCLASS = $ssl_class || $inet6_class || 'IO::Socket::INET';
- $family_key =
- ( $ssl_class ? $ssl_class->can_ipv6 : $inet6_class || '' )
- eq 'IO::Socket::IP'
- ? 'Family' : 'Domain';
-}
-
-our @ISA = ('Exporter','Net::Cmd',$IOCLASS);
-
-use constant TELNET_IAC => 255;
-use constant TELNET_IP => 244;
-use constant TELNET_DM => 242;
-
-use constant EBCDIC => $^O eq 'os390';
-
-sub new {
- my $pkg = shift;
- my ($peer, %arg);
- if (@_ % 2) {
- $peer = shift;
- %arg = @_;
- }
- else {
- %arg = @_;
- $peer = delete $arg{Host};
- }
-
- my $host = $peer;
- my $fire = undef;
- my $fire_type = undef;
-
- if (exists($arg{Firewall}) || Net::Config->requires_firewall($peer)) {
- $fire = $arg{Firewall}
- || $ENV{FTP_FIREWALL}
- || $NetConfig{ftp_firewall}
- || undef;
-
- if (defined $fire) {
- $peer = $fire;
- delete $arg{Port};
- $fire_type = $arg{FirewallType}
- || $ENV{FTP_FIREWALL_TYPE}
- || $NetConfig{firewall_type}
- || undef;
- }
- }
-
- my %tlsargs;
- if (can_ssl()) {
- # for name verification strip port from domain:port, ipv4:port, [ipv6]:port
- (my $hostname = $host) =~s{(? 'ftp',
- SSL_verifycn_name => $hostname,
- # use SNI if supported by IO::Socket::SSL
- $pkg->can_client_sni ? (SSL_hostname => $hostname):(),
- # reuse SSL session of control connection in data connections
- SSL_session_cache => Net::FTP::_SSL_SingleSessionCache->new,
- );
- # user defined SSL arg
- $tlsargs{$_} = $arg{$_} for(grep { m{^SSL_} } keys %arg);
-
- } elsif ($arg{SSL}) {
- croak("IO::Socket::SSL >= 2.007 needed for SSL support");
- }
-
- my $ftp = $pkg->SUPER::new(
- PeerAddr => $peer,
- PeerPort => $arg{Port} || ($arg{SSL} ? 'ftps(990)' : 'ftp(21)'),
- LocalAddr => $arg{'LocalAddr'},
- $family_key => $arg{Domain} || $arg{Family},
- Proto => 'tcp',
- Timeout => defined $arg{Timeout} ? $arg{Timeout} : 120,
- %tlsargs,
- $arg{SSL} ? ():( SSL_startHandshake => 0 ),
- ) or return;
-
- ${*$ftp}{'net_ftp_host'} = $host; # Remote hostname
- ${*$ftp}{'net_ftp_type'} = 'A'; # ASCII/binary/etc mode
- ${*$ftp}{'net_ftp_blksize'} = abs($arg{'BlockSize'} || 10240);
-
- ${*$ftp}{'net_ftp_localaddr'} = $arg{'LocalAddr'};
- ${*$ftp}{'net_ftp_domain'} = $arg{Domain} || $arg{Family};
-
- ${*$ftp}{'net_ftp_firewall'} = $fire
- if (defined $fire);
- ${*$ftp}{'net_ftp_firewall_type'} = $fire_type
- if (defined $fire_type);
-
- ${*$ftp}{'net_ftp_passive'} =
- int exists $arg{Passive} ? $arg{Passive}
- : exists $ENV{FTP_PASSIVE} ? $ENV{FTP_PASSIVE}
- : defined $fire ? $NetConfig{ftp_ext_passive}
- : $NetConfig{ftp_int_passive}; # Whew! :-)
-
- ${*$ftp}{net_ftp_tlsargs} = \%tlsargs if %tlsargs;
- if ($arg{SSL}) {
- ${*$ftp}{net_ftp_tlsprot} = 'P';
- ${*$ftp}{net_ftp_tlsdirect} = 1;
- }
-
- $ftp->hash(exists $arg{Hash} ? $arg{Hash} : 0, 1024);
-
- $ftp->autoflush(1);
-
- $ftp->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- unless ($ftp->response() == CMD_OK) {
- $ftp->close();
- # keep @$ if no message. Happens, when response did not start with a code.
- $@ = $ftp->message || $@;
- undef $ftp;
- }
-
- $ftp;
-}
-
-##
-## User interface methods
-##
-
-
-sub host {
- my $me = shift;
- ${*$me}{'net_ftp_host'};
-}
-
-sub passive {
- my $ftp = shift;
- return ${*$ftp}{'net_ftp_passive'} unless @_;
- ${*$ftp}{'net_ftp_passive'} = shift;
-}
-
-
-sub hash {
- my $ftp = shift; # self
-
- my ($h, $b) = @_;
- unless ($h) {
- delete ${*$ftp}{'net_ftp_hash'};
- return [\*STDERR, 0];
- }
- ($h, $b) = (ref($h) ? $h : \*STDERR, $b || 1024);
- select((select($h), $| = 1)[0]);
- $b = 512 if $b < 512;
- ${*$ftp}{'net_ftp_hash'} = [$h, $b];
-}
-
-
-sub quit {
- my $ftp = shift;
-
- $ftp->_QUIT;
- $ftp->close;
-}
-
-
-sub DESTROY { }
-
-
-sub ascii { shift->type('A', @_); }
-sub binary { shift->type('I', @_); }
-
-
-sub ebcdic {
- carp "TYPE E is unsupported, shall default to I";
- shift->type('E', @_);
-}
-
-
-sub byte {
- carp "TYPE L is unsupported, shall default to I";
- shift->type('L', @_);
-}
-
-# Allow the user to send a command directly, BE CAREFUL !!
-
-
-sub quot {
- my $ftp = shift;
- my $cmd = shift;
-
- $ftp->command(uc $cmd, @_);
- $ftp->response();
-}
-
-
-sub site {
- my $ftp = shift;
-
- $ftp->command("SITE", @_);
- $ftp->response();
-}
-
-
-sub mdtm {
- my $ftp = shift;
- my $file = shift;
-
- # Server Y2K bug workaround
- #
- # sigh; some idiotic FTP servers use ("19%d",tm.tm_year) instead of
- # ("%d",tm.tm_year+1900). This results in an extra digit in the
- # string returned. To account for this we allow an optional extra
- # digit in the year. Then if the first two digits are 19 we use the
- # remainder, otherwise we subtract 1900 from the whole year.
-
- $ftp->_MDTM($file)
- && $ftp->message =~ /((\d\d)(\d\d\d?))(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/
- ? timegm($8, $7, $6, $5, $4 - 1, $2 eq '19' ? $3 : ($1 - 1900))
- : undef;
-}
-
-
-sub size {
- my $ftp = shift;
- my $file = shift;
- my $io;
- if ($ftp->supported("SIZE")) {
- return $ftp->_SIZE($file)
- ? ($ftp->message =~ /(\d+)\s*(bytes?\s*)?$/)[0]
- : undef;
- }
- elsif ($ftp->supported("STAT")) {
- my @msg;
- return
- unless $ftp->_STAT($file) && (@msg = $ftp->message) == 3;
- foreach my $line (@msg) {
- return (split(/\s+/, $line))[4]
- if $line =~ /^[-rwxSsTt]{10}/;
- }
- }
- else {
- my @files = $ftp->dir($file);
- if (@files) {
- return (split(/\s+/, $1))[4]
- if $files[0] =~ /^([-rwxSsTt]{10}.*)$/;
- }
- }
- undef;
-}
-
-
-sub starttls {
- my $ftp = shift;
- can_ssl() or croak("IO::Socket::SSL >= 2.007 needed for SSL support");
- $ftp->is_SSL and croak("called starttls within SSL session");
- $ftp->_AUTH('TLS') == CMD_OK or return;
-
- $ftp->connect_SSL or return;
- $ftp->prot('P');
- return 1;
-}
-
-sub prot {
- my ($ftp,$prot) = @_;
- $prot eq 'C' or $prot eq 'P' or croak("prot must by C or P");
- $ftp->_PBSZ(0) or return;
- $ftp->_PROT($prot) or return;
- ${*$ftp}{net_ftp_tlsprot} = $prot;
- return 1;
-}
-
-sub stoptls {
- my $ftp = shift;
- $ftp->is_SSL or croak("called stoptls outside SSL session");
- ${*$ftp}{net_ftp_tlsdirect} and croak("cannot stoptls direct SSL session");
- $ftp->_CCC() or return;
- $ftp->stop_SSL();
- return 1;
-}
-
-sub login {
- my ($ftp, $user, $pass, $acct) = @_;
- my ($ok, $ruser, $fwtype);
-
- unless (defined $user) {
- require Net::Netrc;
-
- my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_host'});
-
- ($user, $pass, $acct) = $rc->lpa()
- if ($rc);
- }
-
- $user ||= "anonymous";
- $ruser = $user;
-
- $fwtype = ${*$ftp}{'net_ftp_firewall_type'}
- || $NetConfig{'ftp_firewall_type'}
- || 0;
-
- if ($fwtype && defined ${*$ftp}{'net_ftp_firewall'}) {
- if ($fwtype == 1 || $fwtype == 7) {
- $user .= '@' . ${*$ftp}{'net_ftp_host'};
- }
- else {
- require Net::Netrc;
-
- my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'});
-
- my ($fwuser, $fwpass, $fwacct) = $rc ? $rc->lpa() : ();
-
- if ($fwtype == 5) {
- $user = join('@', $user, $fwuser, ${*$ftp}{'net_ftp_host'});
- $pass = $pass . '@' . $fwpass;
- }
- else {
- if ($fwtype == 2) {
- $user .= '@' . ${*$ftp}{'net_ftp_host'};
- }
- elsif ($fwtype == 6) {
- $fwuser .= '@' . ${*$ftp}{'net_ftp_host'};
- }
-
- $ok = $ftp->_USER($fwuser);
-
- return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
-
- $ok = $ftp->_PASS($fwpass || "");
-
- return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
-
- $ok = $ftp->_ACCT($fwacct)
- if defined($fwacct);
-
- if ($fwtype == 3) {
- $ok = $ftp->command("SITE", ${*$ftp}{'net_ftp_host'})->response;
- }
- elsif ($fwtype == 4) {
- $ok = $ftp->command("OPEN", ${*$ftp}{'net_ftp_host'})->response;
- }
-
- return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
- }
- }
- }
-
- $ok = $ftp->_USER($user);
-
- # Some dumb firewalls don't prefix the connection messages
- $ok = $ftp->response()
- if ($ok == CMD_OK && $ftp->code == 220 && $user =~ /\@/);
-
- if ($ok == CMD_MORE) {
- unless (defined $pass) {
- require Net::Netrc;
-
- my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_host'}, $ruser);
-
- ($ruser, $pass, $acct) = $rc->lpa()
- if ($rc);
-
- $pass = '-anonymous@'
- if (!defined $pass && (!defined($ruser) || $ruser =~ /^anonymous/o));
- }
-
- $ok = $ftp->_PASS($pass || "");
- }
-
- $ok = $ftp->_ACCT($acct)
- if (defined($acct) && ($ok == CMD_MORE || $ok == CMD_OK));
-
- if ($fwtype == 7 && $ok == CMD_OK && defined ${*$ftp}{'net_ftp_firewall'}) {
- my ($f, $auth, $resp) = _auth_id($ftp);
- $ftp->authorize($auth, $resp) if defined($resp);
- }
-
- $ok == CMD_OK;
-}
-
-
-sub account {
- @_ == 2 or croak 'usage: $ftp->account( ACCT )';
- my $ftp = shift;
- my $acct = shift;
- $ftp->_ACCT($acct) == CMD_OK;
-}
-
-
-sub _auth_id {
- my ($ftp, $auth, $resp) = @_;
-
- unless (defined $resp) {
- require Net::Netrc;
-
- $auth ||= eval { (getpwuid($>))[0] } || $ENV{NAME};
-
- my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'}, $auth)
- || Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'});
-
- ($auth, $resp) = $rc->lpa()
- if ($rc);
- }
- ($ftp, $auth, $resp);
-}
-
-
-sub authorize {
- @_ >= 1 || @_ <= 3 or croak 'usage: $ftp->authorize( [AUTH [, RESP]])';
-
- my ($ftp, $auth, $resp) = &_auth_id;
-
- my $ok = $ftp->_AUTH($auth || "");
-
- return $ftp->_RESP($resp || "")
- if ($ok == CMD_MORE);
-
- $ok == CMD_OK;
-}
-
-
-sub rename {
- @_ == 3 or croak 'usage: $ftp->rename(FROM, TO)';
-
- my ($ftp, $from, $to) = @_;
-
- $ftp->_RNFR($from)
- && $ftp->_RNTO($to);
-}
-
-
-sub type {
- my $ftp = shift;
- my $type = shift;
- my $oldval = ${*$ftp}{'net_ftp_type'};
-
- return $oldval
- unless (defined $type);
-
- return
- unless ($ftp->_TYPE($type, @_));
-
- ${*$ftp}{'net_ftp_type'} = join(" ", $type, @_);
-
- $oldval;
-}
-
-
-sub alloc {
- my $ftp = shift;
- my $size = shift;
- my $oldval = ${*$ftp}{'net_ftp_allo'};
-
- return $oldval
- unless (defined $size);
-
- return
- unless ($ftp->supported("ALLO") and $ftp->_ALLO($size, @_));
-
- ${*$ftp}{'net_ftp_allo'} = join(" ", $size, @_);
-
- $oldval;
-}
-
-
-sub abort {
- my $ftp = shift;
-
- send($ftp, pack("CCC", TELNET_IAC, TELNET_IP, TELNET_IAC), MSG_OOB);
-
- $ftp->command(pack("C", TELNET_DM) . "ABOR");
-
- ${*$ftp}{'net_ftp_dataconn'}->close()
- if defined ${*$ftp}{'net_ftp_dataconn'};
-
- $ftp->response();
-
- $ftp->status == CMD_OK;
-}
-
-
-sub get {
- my ($ftp, $remote, $local, $where) = @_;
-
- my ($loc, $len, $buf, $resp, $data);
- local *FD;
-
- my $localfd = ref($local) || ref(\$local) eq "GLOB";
-
- ($local = $remote) =~ s#^.*/##
- unless (defined $local);
-
- croak("Bad remote filename '$remote'\n")
- if $remote =~ /[\r\n]/s;
-
- ${*$ftp}{'net_ftp_rest'} = $where if defined $where;
- my $rest = ${*$ftp}{'net_ftp_rest'};
-
- delete ${*$ftp}{'net_ftp_port'};
- delete ${*$ftp}{'net_ftp_pasv'};
-
- $data = $ftp->retr($remote)
- or return;
-
- if ($localfd) {
- $loc = $local;
- }
- else {
- $loc = \*FD;
-
- unless (sysopen($loc, $local, O_CREAT | O_WRONLY | ($rest ? O_APPEND: O_TRUNC))) {
- carp "Cannot open Local file $local: $!\n";
- $data->abort;
- return;
- }
- }
-
- if ($ftp->type eq 'I' && !binmode($loc)) {
- carp "Cannot binmode Local file $local: $!\n";
- $data->abort;
- close($loc) unless $localfd;
- return;
- }
-
- $buf = '';
- my ($count, $hashh, $hashb, $ref) = (0);
-
- ($hashh, $hashb) = @$ref
- if ($ref = ${*$ftp}{'net_ftp_hash'});
-
- my $blksize = ${*$ftp}{'net_ftp_blksize'};
- local $\; # Just in case
-
- while (1) {
- last unless $len = $data->read($buf, $blksize);
-
- if (EBCDIC && $ftp->type ne 'I') {
- $buf = $ftp->toebcdic($buf);
- $len = length($buf);
- }
-
- if ($hashh) {
- $count += $len;
- print $hashh "#" x (int($count / $hashb));
- $count %= $hashb;
- }
- unless (print $loc $buf) {
- carp "Cannot write to Local file $local: $!\n";
- $data->abort;
- close($loc)
- unless $localfd;
- return;
- }
- }
-
- print $hashh "\n" if $hashh;
-
- unless ($localfd) {
- unless (close($loc)) {
- carp "Cannot close file $local (perhaps disk space) $!\n";
- return;
- }
- }
-
- unless ($data->close()) # implied $ftp->response
- {
- carp "Unable to close datastream";
- return;
- }
-
- return $local;
-}
-
-
-sub cwd {
- @_ == 1 || @_ == 2 or croak 'usage: $ftp->cwd( [ DIR ] )';
-
- my ($ftp, $dir) = @_;
-
- $dir = "/" unless defined($dir) && $dir =~ /\S/;
-
- $dir eq ".."
- ? $ftp->_CDUP()
- : $ftp->_CWD($dir);
-}
-
-
-sub cdup {
- @_ == 1 or croak 'usage: $ftp->cdup()';
- $_[0]->_CDUP;
-}
-
-
-sub pwd {
- @_ == 1 || croak 'usage: $ftp->pwd()';
- my $ftp = shift;
-
- $ftp->_PWD();
- $ftp->_extract_path;
-}
-
-# rmdir( $ftp, $dir, [ $recurse ] )
-#
-# Removes $dir on remote host via FTP.
-# $ftp is handle for remote host
-#
-# If $recurse is TRUE, the directory and deleted recursively.
-# This means all of its contents and subdirectories.
-#
-# Initial version contributed by Dinkum Software
-#
-sub rmdir {
- @_ == 2 || @_ == 3 or croak('usage: $ftp->rmdir( DIR [, RECURSE ] )');
-
- # Pick off the args
- my ($ftp, $dir, $recurse) = @_;
- my $ok;
-
- return $ok
- if $ok = $ftp->_RMD($dir)
- or !$recurse;
-
- # Try to delete the contents
- # Get a list of all the files in the directory, excluding the current and parent directories
- my @filelist = map { /^(?:\S+;)+ (.+)$/ ? ($1) : () } grep { !/^(?:\S+;)*type=[cp]dir;/ } $ftp->_list_cmd("MLSD", $dir);
-
- # Fallback to using the less well-defined NLST command if MLSD fails
- @filelist = grep { !/^\.{1,2}$/ } $ftp->ls($dir)
- unless @filelist;
-
- return
- unless @filelist; # failed, it is probably not a directory
-
- return $ftp->delete($dir)
- if @filelist == 1 and $dir eq $filelist[0];
-
- # Go thru and delete each file or the directory
- foreach my $file (map { m,/, ? $_ : "$dir/$_" } @filelist) {
- next # successfully deleted the file
- if $ftp->delete($file);
-
- # Failed to delete it, assume its a directory
- # Recurse and ignore errors, the final rmdir() will
- # fail on any errors here
- return $ok
- unless $ok = $ftp->rmdir($file, 1);
- }
-
- # Directory should be empty
- # Try to remove the directory again
- # Pass results directly to caller
- # If any of the prior deletes failed, this
- # rmdir() will fail because directory is not empty
- return $ftp->_RMD($dir);
-}
-
-
-sub restart {
- @_ == 2 || croak 'usage: $ftp->restart( BYTE_OFFSET )';
-
- my ($ftp, $where) = @_;
-
- ${*$ftp}{'net_ftp_rest'} = $where;
-
- return;
-}
-
-
-sub mkdir {
- @_ == 2 || @_ == 3 or croak 'usage: $ftp->mkdir( DIR [, RECURSE ] )';
-
- my ($ftp, $dir, $recurse) = @_;
-
- $ftp->_MKD($dir) || $recurse
- or return;
-
- my $path = $dir;
-
- unless ($ftp->ok) {
- my @path = split(m#(?=/+)#, $dir);
-
- $path = "";
-
- while (@path) {
- $path .= shift @path;
-
- $ftp->_MKD($path);
-
- $path = $ftp->_extract_path($path);
- }
-
- # If the creation of the last element was not successful, see if we
- # can cd to it, if so then return path
-
- unless ($ftp->ok) {
- my ($status, $message) = ($ftp->status, $ftp->message);
- my $pwd = $ftp->pwd;
-
- if ($pwd && $ftp->cwd($dir)) {
- $path = $dir;
- $ftp->cwd($pwd);
- }
- else {
- undef $path;
- }
- $ftp->set_status($status, $message);
- }
- }
-
- $path;
-}
-
-
-sub delete {
- @_ == 2 || croak 'usage: $ftp->delete( FILENAME )';
-
- $_[0]->_DELE($_[1]);
-}
-
-
-sub put { shift->_store_cmd("stor", @_) }
-sub put_unique { shift->_store_cmd("stou", @_) }
-sub append { shift->_store_cmd("appe", @_) }
-
-
-sub nlst { shift->_data_cmd("NLST", @_) }
-sub list { shift->_data_cmd("LIST", @_) }
-sub retr { shift->_data_cmd("RETR", @_) }
-sub stor { shift->_data_cmd("STOR", @_) }
-sub stou { shift->_data_cmd("STOU", @_) }
-sub appe { shift->_data_cmd("APPE", @_) }
-
-
-sub _store_cmd {
- my ($ftp, $cmd, $local, $remote) = @_;
- my ($loc, $sock, $len, $buf);
- local *FD;
-
- my $localfd = ref($local) || ref(\$local) eq "GLOB";
-
- if (!defined($remote) and 'STOU' ne uc($cmd)) {
- croak 'Must specify remote filename with stream input'
- if $localfd;
-
- require File::Basename;
- $remote = File::Basename::basename($local);
- }
- if (defined ${*$ftp}{'net_ftp_allo'}) {
- delete ${*$ftp}{'net_ftp_allo'};
- }
- else {
-
- # if the user hasn't already invoked the alloc method since the last
- # _store_cmd call, figure out if the local file is a regular file(not
- # a pipe, or device) and if so get the file size from stat, and send
- # an ALLO command before sending the STOR, STOU, or APPE command.
- my $size = do { local $^W; -f $local && -s _ }; # no ALLO if sending data from a pipe
- ${*$ftp}{'net_ftp_allo'} = $size if $size;
- }
- croak("Bad remote filename '$remote'\n")
- if defined($remote) and $remote =~ /[\r\n]/s;
-
- if ($localfd) {
- $loc = $local;
- }
- else {
- $loc = \*FD;
-
- unless (sysopen($loc, $local, O_RDONLY)) {
- carp "Cannot open Local file $local: $!\n";
- return;
- }
- }
-
- if ($ftp->type eq 'I' && !binmode($loc)) {
- carp "Cannot binmode Local file $local: $!\n";
- return;
- }
-
- delete ${*$ftp}{'net_ftp_port'};
- delete ${*$ftp}{'net_ftp_pasv'};
-
- $sock = $ftp->_data_cmd($cmd, grep { defined } $remote)
- or return;
-
- $remote = ($ftp->message =~ /\w+\s*:\s*(.*)/)[0]
- if 'STOU' eq uc $cmd;
-
- my $blksize = ${*$ftp}{'net_ftp_blksize'};
-
- my ($count, $hashh, $hashb, $ref) = (0);
-
- ($hashh, $hashb) = @$ref
- if ($ref = ${*$ftp}{'net_ftp_hash'});
-
- while (1) {
- last unless $len = read($loc, $buf = "", $blksize);
-
- if (EBCDIC && $ftp->type ne 'I') {
- $buf = $ftp->toascii($buf);
- $len = length($buf);
- }
-
- if ($hashh) {
- $count += $len;
- print $hashh "#" x (int($count / $hashb));
- $count %= $hashb;
- }
-
- my $wlen;
- unless (defined($wlen = $sock->write($buf, $len)) && $wlen == $len) {
- $sock->abort;
- close($loc)
- unless $localfd;
- print $hashh "\n" if $hashh;
- return;
- }
- }
-
- print $hashh "\n" if $hashh;
-
- close($loc)
- unless $localfd;
-
- $sock->close()
- or return;
-
- if ('STOU' eq uc $cmd and $ftp->message =~ m/unique\s+file\s*name\s*:\s*(.*)\)|"(.*)"/) {
- require File::Basename;
- $remote = File::Basename::basename($+);
- }
-
- return $remote;
-}
-
-
-sub port {
- @_ == 1 || @_ == 2 or croak 'usage: $self->port([PORT])';
- return _eprt('PORT',@_);
-}
-
-sub eprt {
- @_ == 1 || @_ == 2 or croak 'usage: $self->eprt([PORT])';
- return _eprt('EPRT',@_);
-}
-
-sub _eprt {
- my ($cmd,$ftp,$port) = @_;
- delete ${*$ftp}{net_ftp_intern_port};
- unless ($port) {
- my $listen = ${*$ftp}{net_ftp_listen} ||= $IOCLASS->new(
- Listen => 1,
- Timeout => $ftp->timeout,
- LocalAddr => $ftp->sockhost,
- $family_key => $ftp->sockdomain,
- can_ssl() ? (
- %{ ${*$ftp}{net_ftp_tlsargs} },
- SSL_startHandshake => 0,
- ):(),
- );
- ${*$ftp}{net_ftp_intern_port} = 1;
- my $fam = ($listen->sockdomain == AF_INET) ? 1:2;
- if ( $cmd eq 'EPRT' || $fam == 2 ) {
- $port = "|$fam|".$listen->sockhost."|".$listen->sockport."|";
- $cmd = 'EPRT';
- } else {
- my $p = $listen->sockport;
- $port = join(',',split(m{\.},$listen->sockhost),$p >> 8,$p & 0xff);
- }
- } elsif (ref($port) eq 'ARRAY') {
- $port = join(',',split(m{\.},@$port[0]),@$port[1] >> 8,@$port[1] & 0xff);
- }
- my $ok = $cmd eq 'EPRT' ? $ftp->_EPRT($port) : $ftp->_PORT($port);
- ${*$ftp}{net_ftp_port} = $port if $ok;
- return $ok;
-}
-
-
-sub ls { shift->_list_cmd("NLST", @_); }
-sub dir { shift->_list_cmd("LIST", @_); }
-
-
-sub pasv {
- my $ftp = shift;
- @_ and croak 'usage: $ftp->port()';
- return $ftp->epsv if $ftp->sockdomain != AF_INET;
- delete ${*$ftp}{net_ftp_intern_port};
-
- if ( $ftp->_PASV &&
- $ftp->message =~ m{(\d+,\d+,\d+,\d+),(\d+),(\d+)} ) {
- my $port = 256 * $2 + $3;
- ( my $ip = $1 ) =~s{,}{.}g;
- return ${*$ftp}{net_ftp_pasv} = [ $ip,$port ];
- }
- return;
-}
-
-sub epsv {
- my $ftp = shift;
- @_ and croak 'usage: $ftp->epsv()';
- delete ${*$ftp}{net_ftp_intern_port};
-
- $ftp->_EPSV && $ftp->message =~ m{\(([\x33-\x7e])\1\1(\d+)\1\)}
- ? ${*$ftp}{net_ftp_pasv} = [ $ftp->peerhost, $2 ]
- : undef;
-}
-
-
-sub unique_name {
- my $ftp = shift;
- ${*$ftp}{'net_ftp_unique'} || undef;
-}
-
-
-sub supported {
- @_ == 2 or croak 'usage: $ftp->supported( CMD )';
- my $ftp = shift;
- my $cmd = uc shift;
- my $hash = ${*$ftp}{'net_ftp_supported'} ||= {};
-
- return $hash->{$cmd}
- if exists $hash->{$cmd};
-
- return $hash->{$cmd} = 1
- if $ftp->feature($cmd);
-
- return $hash->{$cmd} = 0
- unless $ftp->_HELP($cmd);
-
- my $text = $ftp->message;
- if ($text =~ /following.+commands/i) {
- $text =~ s/^.*\n//;
- while ($text =~ /(\*?)(\w+)(\*?)/sg) {
- $hash->{"\U$2"} = !length("$1$3");
- }
- }
- else {
- $hash->{$cmd} = $text !~ /unimplemented/i;
- }
-
- $hash->{$cmd} ||= 0;
-}
-
-##
-## Deprecated methods
-##
-
-
-sub lsl {
- carp "Use of Net::FTP::lsl deprecated, use 'dir'"
- if $^W;
- goto &dir;
-}
-
-
-sub authorise {
- carp "Use of Net::FTP::authorise deprecated, use 'authorize'"
- if $^W;
- goto &authorize;
-}
-
-
-##
-## Private methods
-##
-
-
-sub _extract_path {
- my ($ftp, $path) = @_;
-
- # This tries to work both with and without the quote doubling
- # convention (RFC 959 requires it, but the first 3 servers I checked
- # didn't implement it). It will fail on a server which uses a quote in
- # the message which isn't a part of or surrounding the path.
- $ftp->ok
- && $ftp->message =~ /(?:^|\s)\"(.*)\"(?:$|\s)/
- && ($path = $1) =~ s/\"\"/\"/g;
-
- $path;
-}
-
-##
-## Communication methods
-##
-
-
-sub _dataconn {
- my $ftp = shift;
- my $pkg = "Net::FTP::" . $ftp->type;
- eval "require " . $pkg ## no critic (BuiltinFunctions::ProhibitStringyEval)
- or croak("cannot load $pkg required for type ".$ftp->type);
- $pkg =~ s/ /_/g;
- delete ${*$ftp}{net_ftp_dataconn};
-
- my $conn;
- my $pasv = ${*$ftp}{net_ftp_pasv};
- if ($pasv) {
- $conn = $pkg->new(
- PeerAddr => $pasv->[0],
- PeerPort => $pasv->[1],
- LocalAddr => ${*$ftp}{net_ftp_localaddr},
- $family_key => ${*$ftp}{net_ftp_domain},
- Timeout => $ftp->timeout,
- can_ssl() ? (
- SSL_startHandshake => 0,
- $ftp->is_SSL ? (
- SSL_reuse_ctx => $ftp,
- SSL_verifycn_name => ${*$ftp}{net_ftp_tlsargs}{SSL_verifycn_name},
- # This will cause the use of SNI if supported by IO::Socket::SSL.
- $ftp->can_client_sni ? (
- SSL_hostname => ${*$ftp}{net_ftp_tlsargs}{SSL_hostname}
- ):(),
- ) :( %{${*$ftp}{net_ftp_tlsargs}} ),
- ):(),
- ) or return;
- } elsif (my $listen = delete ${*$ftp}{net_ftp_listen}) {
- $conn = $listen->accept($pkg) or return;
- $conn->timeout($ftp->timeout);
- close($listen);
- } else {
- croak("no listener in active mode");
- }
-
- if (( ${*$ftp}{net_ftp_tlsprot} || '') eq 'P') {
- if ($conn->connect_SSL) {
- # SSL handshake ok
- } else {
- carp("failed to ssl upgrade dataconn: $IO::Socket::SSL::SSL_ERROR");
- return;
- }
- }
-
- ${*$ftp}{net_ftp_dataconn} = $conn;
- ${*$conn} = "";
- ${*$conn}{net_ftp_cmd} = $ftp;
- ${*$conn}{net_ftp_blksize} = ${*$ftp}{net_ftp_blksize};
- return $conn;
-}
-
-
-sub _list_cmd {
- my $ftp = shift;
- my $cmd = uc shift;
-
- delete ${*$ftp}{'net_ftp_port'};
- delete ${*$ftp}{'net_ftp_pasv'};
-
- my $data = $ftp->_data_cmd($cmd, @_);
-
- return
- unless (defined $data);
-
- require Net::FTP::A;
- bless $data, "Net::FTP::A"; # Force ASCII mode
-
- my $databuf = '';
- my $buf = '';
- my $blksize = ${*$ftp}{'net_ftp_blksize'};
-
- while ($data->read($databuf, $blksize)) {
- $buf .= $databuf;
- }
-
- my $list = [split(/\n/, $buf)];
-
- $data->close();
-
- if (EBCDIC) {
- for (@$list) { $_ = $ftp->toebcdic($_) }
- }
-
- wantarray
- ? @{$list}
- : $list;
-}
-
-
-sub _data_cmd {
- my $ftp = shift;
- my $cmd = uc shift;
- my $ok = 1;
- my $where = delete ${*$ftp}{'net_ftp_rest'} || 0;
- my $arg;
-
- for my $arg (@_) {
- croak("Bad argument '$arg'\n")
- if $arg =~ /[\r\n]/s;
- }
-
- if ( ${*$ftp}{'net_ftp_passive'}
- && !defined ${*$ftp}{'net_ftp_pasv'}
- && !defined ${*$ftp}{'net_ftp_port'})
- {
- return unless defined $ftp->pasv;
-
- if ($where and !$ftp->_REST($where)) {
- my ($status, $message) = ($ftp->status, $ftp->message);
- $ftp->abort;
- $ftp->set_status($status, $message);
- return;
- }
-
- # first send command, then open data connection
- # otherwise the peer might not do a full accept (with SSL
- # handshake if PROT P)
- $ftp->command($cmd, @_);
- my $data = $ftp->_dataconn();
- if (CMD_INFO == $ftp->response()) {
- $data->reading
- if $data && $cmd =~ /RETR|LIST|NLST|MLSD/;
- return $data;
- }
- $data->_close if $data;
-
- return;
- }
-
- $ok = $ftp->port
- unless (defined ${*$ftp}{'net_ftp_port'}
- || defined ${*$ftp}{'net_ftp_pasv'});
-
- $ok = $ftp->_REST($where)
- if $ok && $where;
-
- return
- unless $ok;
-
- if ($cmd =~ /(STOR|APPE|STOU)/ and exists ${*$ftp}{net_ftp_allo} and
- $ftp->supported("ALLO"))
- {
- $ftp->_ALLO(delete ${*$ftp}{net_ftp_allo})
- or return;
- }
-
- $ftp->command($cmd, @_);
-
- return 1
- if (defined ${*$ftp}{'net_ftp_pasv'});
-
- $ok = CMD_INFO == $ftp->response();
-
- return $ok
- unless exists ${*$ftp}{'net_ftp_intern_port'};
-
- if ($ok) {
- my $data = $ftp->_dataconn();
-
- $data->reading
- if $data && $cmd =~ /RETR|LIST|NLST|MLSD/;
-
- return $data;
- }
-
-
- close(delete ${*$ftp}{'net_ftp_listen'});
-
- return;
-}
-
-##
-## Over-ride methods (Net::Cmd)
-##
-
-
-sub debug_text { $_[2] =~ /^(pass|resp|acct)/i ? "$1 ....\n" : $_[2]; }
-
-
-sub command {
- my $ftp = shift;
-
- delete ${*$ftp}{'net_ftp_port'};
- $ftp->SUPER::command(@_);
-}
-
-
-sub response {
- my $ftp = shift;
- my $code = $ftp->SUPER::response() || 5; # assume 500 if undef
-
- delete ${*$ftp}{'net_ftp_pasv'}
- if ($code != CMD_MORE && $code != CMD_INFO);
-
- $code;
-}
-
-
-sub parse_response {
- return ($1, $2 eq "-")
- if $_[1] =~ s/^(\d\d\d)([- ]?)//o;
-
- my $ftp = shift;
-
- # Darn MS FTP server is a load of CRAP !!!!
- # Expect to see undef here.
- return ()
- unless 0 + (${*$ftp}{'net_cmd_code'} || 0);
-
- (${*$ftp}{'net_cmd_code'}, 1);
-}
-
-##
-## Allow 2 servers to talk directly
-##
-
-
-sub pasv_xfer_unique {
- my ($sftp, $sfile, $dftp, $dfile) = @_;
- $sftp->pasv_xfer($sfile, $dftp, $dfile, 1);
-}
-
-
-sub pasv_xfer {
- my ($sftp, $sfile, $dftp, $dfile, $unique) = @_;
-
- ($dfile = $sfile) =~ s#.*/##
- unless (defined $dfile);
-
- my $port = $sftp->pasv
- or return;
-
- $dftp->port($port)
- or return;
-
- return
- unless ($unique ? $dftp->stou($dfile) : $dftp->stor($dfile));
-
- unless ($sftp->retr($sfile) && $sftp->response == CMD_INFO) {
- $sftp->retr($sfile);
- $dftp->abort;
- $dftp->response();
- return;
- }
-
- $dftp->pasv_wait($sftp);
-}
-
-
-sub pasv_wait {
- @_ == 2 or croak 'usage: $ftp->pasv_wait(NON_PASV_FTP)';
-
- my ($ftp, $non_pasv) = @_;
- my ($file, $rin, $rout);
-
- vec($rin = '', fileno($ftp), 1) = 1;
- select($rout = $rin, undef, undef, undef);
-
- my $dres = $ftp->response();
- my $sres = $non_pasv->response();
-
- return
- unless $dres == CMD_OK && $sres == CMD_OK;
-
- return
- unless $ftp->ok() && $non_pasv->ok();
-
- return $1
- if $ftp->message =~ /unique file name:\s*(\S*)\s*\)/;
-
- return $1
- if $non_pasv->message =~ /unique file name:\s*(\S*)\s*\)/;
-
- return 1;
-}
-
-
-sub feature {
- @_ == 2 or croak 'usage: $ftp->feature( NAME )';
- my ($ftp, $feat) = @_;
-
- my $feature = ${*$ftp}{net_ftp_feature} ||= do {
- my @feat;
-
- # Example response
- # 211-Features:
- # MDTM
- # REST STREAM
- # SIZE
- # 211 End
-
- @feat = map { /^\s+(.*\S)/ } $ftp->message
- if $ftp->_FEAT;
-
- \@feat;
- };
-
- return grep { /^\Q$feat\E\b/i } @$feature;
-}
-
-
-sub cmd { shift->command(@_)->response() }
-
-########################################
-#
-# RFC959 + RFC2428 + RFC4217 commands
-#
-
-
-sub _ABOR { shift->command("ABOR")->response() == CMD_OK }
-sub _ALLO { shift->command("ALLO", @_)->response() == CMD_OK }
-sub _CDUP { shift->command("CDUP")->response() == CMD_OK }
-sub _NOOP { shift->command("NOOP")->response() == CMD_OK }
-sub _PASV { shift->command("PASV")->response() == CMD_OK }
-sub _QUIT { shift->command("QUIT")->response() == CMD_OK }
-sub _DELE { shift->command("DELE", @_)->response() == CMD_OK }
-sub _CWD { shift->command("CWD", @_)->response() == CMD_OK }
-sub _PORT { shift->command("PORT", @_)->response() == CMD_OK }
-sub _RMD { shift->command("RMD", @_)->response() == CMD_OK }
-sub _MKD { shift->command("MKD", @_)->response() == CMD_OK }
-sub _PWD { shift->command("PWD", @_)->response() == CMD_OK }
-sub _TYPE { shift->command("TYPE", @_)->response() == CMD_OK }
-sub _RNTO { shift->command("RNTO", @_)->response() == CMD_OK }
-sub _RESP { shift->command("RESP", @_)->response() == CMD_OK }
-sub _MDTM { shift->command("MDTM", @_)->response() == CMD_OK }
-sub _SIZE { shift->command("SIZE", @_)->response() == CMD_OK }
-sub _HELP { shift->command("HELP", @_)->response() == CMD_OK }
-sub _STAT { shift->command("STAT", @_)->response() == CMD_OK }
-sub _FEAT { shift->command("FEAT", @_)->response() == CMD_OK }
-sub _PBSZ { shift->command("PBSZ", @_)->response() == CMD_OK }
-sub _PROT { shift->command("PROT", @_)->response() == CMD_OK }
-sub _CCC { shift->command("CCC", @_)->response() == CMD_OK }
-sub _EPRT { shift->command("EPRT", @_)->response() == CMD_OK }
-sub _EPSV { shift->command("EPSV", @_)->response() == CMD_OK }
-sub _APPE { shift->command("APPE", @_)->response() == CMD_INFO }
-sub _LIST { shift->command("LIST", @_)->response() == CMD_INFO }
-sub _NLST { shift->command("NLST", @_)->response() == CMD_INFO }
-sub _RETR { shift->command("RETR", @_)->response() == CMD_INFO }
-sub _STOR { shift->command("STOR", @_)->response() == CMD_INFO }
-sub _STOU { shift->command("STOU", @_)->response() == CMD_INFO }
-sub _RNFR { shift->command("RNFR", @_)->response() == CMD_MORE }
-sub _REST { shift->command("REST", @_)->response() == CMD_MORE }
-sub _PASS { shift->command("PASS", @_)->response() }
-sub _ACCT { shift->command("ACCT", @_)->response() }
-sub _AUTH { shift->command("AUTH", @_)->response() }
-
-
-sub _USER {
- my $ftp = shift;
- my $ok = $ftp->command("USER", @_)->response();
-
- # A certain brain dead firewall :-)
- $ok = $ftp->command("user", @_)->response()
- unless $ok == CMD_MORE or $ok == CMD_OK;
-
- $ok;
-}
-
-
-sub _SMNT { shift->unsupported(@_) }
-sub _MODE { shift->unsupported(@_) }
-sub _SYST { shift->unsupported(@_) }
-sub _STRU { shift->unsupported(@_) }
-sub _REIN { shift->unsupported(@_) }
-
-{
- # Session Cache with single entry
- # used to make sure that we reuse same session for control and data channels
- package Net::FTP::_SSL_SingleSessionCache;
- sub new { my $x; return bless \$x,shift }
- sub add_session {
- my ($cache,$key,$session) = @_;
- Net::SSLeay::SESSION_free($$cache) if $$cache;
- $$cache = $session;
- }
- sub get_session {
- my $cache = shift;
- return $$cache
- }
- sub DESTROY {
- my $cache = shift;
- Net::SSLeay::SESSION_free($$cache) if $$cache;
- }
-}
-
-1;
-
-__END__
-
-#line 2050
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/A.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP/A.pm
deleted file mode 100644
index d0209362..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/A.pm
+++ /dev/null
@@ -1,116 +0,0 @@
-#line 1 "Net/FTP/A.pm"
-##
-## Package to read/write on ASCII data connections
-##
-
-package Net::FTP::A;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Net::FTP::dataconn;
-
-our @ISA = qw(Net::FTP::dataconn);
-our $VERSION = "3.10";
-
-our $buf;
-
-sub read {
- my $data = shift;
- local *buf = \$_[0];
- shift;
- my $size = shift || croak 'read($buf,$size,[$offset])';
- my $timeout = @_ ? shift: $data->timeout;
-
- if (length(${*$data}) < $size && !${*$data}{'net_ftp_eof'}) {
- my $blksize = ${*$data}{'net_ftp_blksize'};
- $blksize = $size if $size > $blksize;
-
- my $l = 0;
- my $n;
-
- READ:
- {
- my $readbuf = defined(${*$data}{'net_ftp_cr'}) ? "\015" : '';
-
- $data->can_read($timeout)
- or croak "Timeout";
-
- if ($n = sysread($data, $readbuf, $blksize, length $readbuf)) {
- ${*$data}{'net_ftp_bytesread'} += $n;
- ${*$data}{'net_ftp_cr'} =
- substr($readbuf, -1) eq "\015"
- ? chop($readbuf)
- : undef;
- }
- else {
- return
- unless defined $n;
-
- ${*$data}{'net_ftp_eof'} = 1;
- }
-
- $readbuf =~ s/\015\012/\n/sgo;
- ${*$data} .= $readbuf;
-
- unless (length(${*$data})) {
-
- redo READ
- if ($n > 0);
-
- $size = length(${*$data})
- if ($n == 0);
- }
- }
- }
-
- $buf = substr(${*$data}, 0, $size);
- substr(${*$data}, 0, $size) = '';
-
- length $buf;
-}
-
-
-sub write {
- my $data = shift;
- local *buf = \$_[0];
- shift;
- my $size = shift || croak 'write($buf,$size,[$timeout])';
- my $timeout = @_ ? shift: $data->timeout;
-
- my $nr = (my $tmp = substr($buf, 0, $size)) =~ tr/\r\n/\015\012/;
- $tmp =~ s/(?can_write($timeout)
- or croak "Timeout";
-
- $off += $wrote;
- $wrote = syswrite($data, substr($tmp, $off), $len > $blksize ? $blksize : $len);
- return
- unless defined($wrote);
- $len -= $wrote;
- }
-
- $size;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/E.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP/E.pm
deleted file mode 100644
index 22367246..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/E.pm
+++ /dev/null
@@ -1,14 +0,0 @@
-#line 1 "Net/FTP/E.pm"
-package Net::FTP::E;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Net::FTP::I;
-
-our @ISA = qw(Net::FTP::I);
-our $VERSION = "3.10";
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/I.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP/I.pm
deleted file mode 100644
index 99ff5c01..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/I.pm
+++ /dev/null
@@ -1,85 +0,0 @@
-#line 1 "Net/FTP/I.pm"
-##
-## Package to read/write on BINARY data connections
-##
-
-package Net::FTP::I;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Net::FTP::dataconn;
-
-our @ISA = qw(Net::FTP::dataconn);
-our $VERSION = "3.10";
-
-our $buf;
-
-sub read {
- my $data = shift;
- local *buf = \$_[0];
- shift;
- my $size = shift || croak 'read($buf,$size,[$timeout])';
- my $timeout = @_ ? shift: $data->timeout;
-
- my $n;
-
- if ($size > length ${*$data} and !${*$data}{'net_ftp_eof'}) {
- $data->can_read($timeout)
- or croak "Timeout";
-
- my $blksize = ${*$data}{'net_ftp_blksize'};
- $blksize = $size if $size > $blksize;
-
- unless ($n = sysread($data, ${*$data}, $blksize, length ${*$data})) {
- return unless defined $n;
- ${*$data}{'net_ftp_eof'} = 1;
- }
- }
-
- $buf = substr(${*$data}, 0, $size);
-
- $n = length($buf);
-
- substr(${*$data}, 0, $n) = '';
-
- ${*$data}{'net_ftp_bytesread'} += $n;
-
- $n;
-}
-
-
-sub write {
- my $data = shift;
- local *buf = \$_[0];
- shift;
- my $size = shift || croak 'write($buf,$size,[$timeout])';
- my $timeout = @_ ? shift: $data->timeout;
-
- # If the remote server has closed the connection we will be signal'd
- # when we write. This can happen if the disk on the remote server fills up
-
- local $SIG{PIPE} = 'IGNORE'
- unless ($SIG{PIPE} || '') eq 'IGNORE'
- or $^O eq 'MacOS';
- my $sent = $size;
- my $off = 0;
-
- my $blksize = ${*$data}{'net_ftp_blksize'};
- while ($sent > 0) {
- $data->can_write($timeout)
- or croak "Timeout";
-
- my $n = syswrite($data, $buf, $sent > $blksize ? $blksize : $sent, $off);
- return unless defined($n);
- $sent -= $n;
- $off += $n;
- }
-
- $size;
-}
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/L.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP/L.pm
deleted file mode 100644
index cfb9cd05..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/L.pm
+++ /dev/null
@@ -1,14 +0,0 @@
-#line 1 "Net/FTP/L.pm"
-package Net::FTP::L;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Net::FTP::I;
-
-our @ISA = qw(Net::FTP::I);
-our $VERSION = "3.10";
-
-1;
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/dataconn.pm b/software/Slic3r-1.3.0.64bit/lib/Net/FTP/dataconn.pm
deleted file mode 100644
index 44a719de..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/FTP/dataconn.pm
+++ /dev/null
@@ -1,137 +0,0 @@
-#line 1 "Net/FTP/dataconn.pm"
-##
-## Generic data connection package
-##
-
-package Net::FTP::dataconn;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use Errno;
-use Net::Cmd;
-
-our $VERSION = '3.10';
-
-$Net::FTP::IOCLASS or die "please load Net::FTP before Net::FTP::dataconn";
-our @ISA = $Net::FTP::IOCLASS;
-
-sub reading {
- my $data = shift;
- ${*$data}{'net_ftp_bytesread'} = 0;
-}
-
-
-sub abort {
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
-
- # no need to abort if we have finished the xfer
- return $data->close
- if ${*$data}{'net_ftp_eof'};
-
- # for some reason if we continuously open RETR connections and not
- # read a single byte, then abort them after a while the server will
- # close our connection, this prevents the unexpected EOF on the
- # command channel -- GMB
- if (exists ${*$data}{'net_ftp_bytesread'}
- && (${*$data}{'net_ftp_bytesread'} == 0))
- {
- my $buf = "";
- my $timeout = $data->timeout;
- $data->can_read($timeout) && sysread($data, $buf, 1);
- }
-
- ${*$data}{'net_ftp_eof'} = 1; # fake
-
- $ftp->abort; # this will close me
-}
-
-
-sub _close {
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
-
- $data->SUPER::close();
-
- delete ${*$ftp}{'net_ftp_dataconn'}
- if defined $ftp
- && exists ${*$ftp}{'net_ftp_dataconn'}
- && $data == ${*$ftp}{'net_ftp_dataconn'};
-}
-
-
-sub close {
- my $data = shift;
- my $ftp = ${*$data}{'net_ftp_cmd'};
-
- if (exists ${*$data}{'net_ftp_bytesread'} && !${*$data}{'net_ftp_eof'}) {
- my $junk;
- eval { local($SIG{__DIE__}); $data->read($junk, 1, 0) };
- return $data->abort unless ${*$data}{'net_ftp_eof'};
- }
-
- $data->_close;
-
- return unless defined $ftp;
-
- $ftp->response() == CMD_OK
- && $ftp->message =~ /unique file name:\s*(\S*)\s*\)/
- && (${*$ftp}{'net_ftp_unique'} = $1);
-
- $ftp->status == CMD_OK;
-}
-
-
-sub _select {
- my ($data, $timeout, $do_read) = @_;
- my ($rin, $rout, $win, $wout, $tout, $nfound);
-
- vec($rin = '', fileno($data), 1) = 1;
-
- ($win, $rin) = ($rin, $win) unless $do_read;
-
- while (1) {
- $nfound = select($rout = $rin, $wout = $win, undef, $tout = $timeout);
-
- last if $nfound >= 0;
-
- croak "select: $!"
- unless $!{EINTR};
- }
-
- $nfound;
-}
-
-
-sub can_read {
- _select(@_[0, 1], 1);
-}
-
-
-sub can_write {
- _select(@_[0, 1], 0);
-}
-
-
-sub cmd {
- my $ftp = shift;
-
- ${*$ftp}{'net_ftp_cmd'};
-}
-
-
-sub bytes_read {
- my $ftp = shift;
-
- ${*$ftp}{'net_ftp_bytesread'} || 0;
-}
-
-1;
-
-__END__
-
-#line 183
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/HTTP.pm b/software/Slic3r-1.3.0.64bit/lib/Net/HTTP.pm
deleted file mode 100644
index 59d896b0..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/HTTP.pm
+++ /dev/null
@@ -1,49 +0,0 @@
-#line 1 "Net/HTTP.pm"
-package Net::HTTP;
-$Net::HTTP::VERSION = '6.13';
-use strict;
-use warnings;
-
-use vars qw($SOCKET_CLASS);
-unless ($SOCKET_CLASS) {
- # Try several, in order of capability and preference
- if (eval { require IO::Socket::IP }) {
- $SOCKET_CLASS = "IO::Socket::IP"; # IPv4+IPv6
- } elsif (eval { require IO::Socket::INET6 }) {
- $SOCKET_CLASS = "IO::Socket::INET6"; # IPv4+IPv6
- } elsif (eval { require IO::Socket::INET }) {
- $SOCKET_CLASS = "IO::Socket::INET"; # IPv4 only
- } else {
- require IO::Socket;
- $SOCKET_CLASS = "IO::Socket::INET";
- }
-}
-require Net::HTTP::Methods;
-require Carp;
-
-our @ISA = ($SOCKET_CLASS, 'Net::HTTP::Methods');
-
-sub new {
- my $class = shift;
- Carp::croak("No Host option provided") unless @_;
- $class->SUPER::new(@_);
-}
-
-sub configure {
- my($self, $cnf) = @_;
- $self->http_configure($cnf);
-}
-
-sub http_connect {
- my($self, $cnf) = @_;
- $self->SUPER::configure($cnf);
-}
-
-1;
-
-#line 303
-
-__END__
-
-# ABSTRACT: Low-level HTTP connection (client)
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/HTTP/Methods.pm b/software/Slic3r-1.3.0.64bit/lib/Net/HTTP/Methods.pm
deleted file mode 100644
index 8ba41a72..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/HTTP/Methods.pm
+++ /dev/null
@@ -1,651 +0,0 @@
-#line 1 "Net/HTTP/Methods.pm"
-package Net::HTTP::Methods;
-$Net::HTTP::Methods::VERSION = '6.13';
-use strict;
-use warnings;
-use URI;
-
-my $CRLF = "\015\012"; # "\r\n" is not portable
-
-*_bytes = defined(&utf8::downgrade) ?
- sub {
- unless (utf8::downgrade($_[0], 1)) {
- require Carp;
- Carp::croak("Wide character in HTTP request (bytes required)");
- }
- return $_[0];
- }
- :
- sub {
- return $_[0];
- };
-
-
-sub new {
- my $class = shift;
- unshift(@_, "Host") if @_ == 1;
- my %cnf = @_;
- require Symbol;
- my $self = bless Symbol::gensym(), $class;
- return $self->http_configure(\%cnf);
-}
-
-sub http_configure {
- my($self, $cnf) = @_;
-
- die "Listen option not allowed" if $cnf->{Listen};
- my $explicit_host = (exists $cnf->{Host});
- my $host = delete $cnf->{Host};
- my $peer = $cnf->{PeerAddr} || $cnf->{PeerHost};
- if (!$peer) {
- die "No Host option provided" unless $host;
- $cnf->{PeerAddr} = $peer = $host;
- }
-
- # CONNECTIONS
- # PREFER: port number from PeerAddr, then PeerPort, then http_default_port
- my $peer_uri = URI->new("http://$peer");
- $cnf->{"PeerPort"} = $peer_uri->_port || $cnf->{PeerPort} || $self->http_default_port;
- $cnf->{"PeerAddr"} = $peer_uri->host;
-
- # HOST header:
- # If specified but blank, ignore.
- # If specified with a value, add the port number
- # If not specified, set to PeerAddr and port number
- # ALWAYS: If IPv6 address, use [brackets] (thanks to the URI package)
- # ALWAYS: omit port number if http_default_port
- if (($host) || (! $explicit_host)) {
- my $uri = ($explicit_host) ? URI->new("http://$host") : $peer_uri->clone;
- if (!$uri->_port) {
- # Always use *our* $self->http_default_port instead of URI's (Covers HTTP, HTTPS)
- $uri->port( $cnf->{PeerPort} || $self->http_default_port);
- }
- my $host_port = $uri->host_port; # Returns host:port or [ipv6]:port
- my $remove = ":" . $self->http_default_port; # we want to remove the default port number
- if (substr($host_port,0-length($remove)) eq $remove) {
- substr($host_port,0-length($remove)) = "";
- }
- $host = $host_port;
- }
-
- $cnf->{Proto} = 'tcp';
-
- my $keep_alive = delete $cnf->{KeepAlive};
- my $http_version = delete $cnf->{HTTPVersion};
- $http_version = "1.1" unless defined $http_version;
- my $peer_http_version = delete $cnf->{PeerHTTPVersion};
- $peer_http_version = "1.0" unless defined $peer_http_version;
- my $send_te = delete $cnf->{SendTE};
- my $max_line_length = delete $cnf->{MaxLineLength};
- $max_line_length = 8*1024 unless defined $max_line_length;
- my $max_header_lines = delete $cnf->{MaxHeaderLines};
- $max_header_lines = 128 unless defined $max_header_lines;
-
- return undef unless $self->http_connect($cnf);
-
- $self->host($host);
- $self->keep_alive($keep_alive);
- $self->send_te($send_te);
- $self->http_version($http_version);
- $self->peer_http_version($peer_http_version);
- $self->max_line_length($max_line_length);
- $self->max_header_lines($max_header_lines);
-
- ${*$self}{'http_buf'} = "";
-
- return $self;
-}
-
-sub http_default_port {
- 80;
-}
-
-# set up property accessors
-for my $method (qw(host keep_alive send_te max_line_length max_header_lines peer_http_version)) {
- my $prop_name = "http_" . $method;
- no strict 'refs';
- *$method = sub {
- my $self = shift;
- my $old = ${*$self}{$prop_name};
- ${*$self}{$prop_name} = shift if @_;
- return $old;
- };
-}
-
-# we want this one to be a bit smarter
-sub http_version {
- my $self = shift;
- my $old = ${*$self}{'http_version'};
- if (@_) {
- my $v = shift;
- $v = "1.0" if $v eq "1"; # float
- unless ($v eq "1.0" or $v eq "1.1") {
- require Carp;
- Carp::croak("Unsupported HTTP version '$v'");
- }
- ${*$self}{'http_version'} = $v;
- }
- $old;
-}
-
-sub format_request {
- my $self = shift;
- my $method = shift;
- my $uri = shift;
-
- my $content = (@_ % 2) ? pop : "";
-
- for ($method, $uri) {
- require Carp;
- Carp::croak("Bad method or uri") if /\s/ || !length;
- }
-
- push(@{${*$self}{'http_request_method'}}, $method);
- my $ver = ${*$self}{'http_version'};
- my $peer_ver = ${*$self}{'http_peer_http_version'} || "1.0";
-
- my @h;
- my @connection;
- my %given = (host => 0, "content-length" => 0, "te" => 0);
- while (@_) {
- my($k, $v) = splice(@_, 0, 2);
- my $lc_k = lc($k);
- if ($lc_k eq "connection") {
- $v =~ s/^\s+//;
- $v =~ s/\s+$//;
- push(@connection, split(/\s*,\s*/, $v));
- next;
- }
- if (exists $given{$lc_k}) {
- $given{$lc_k}++;
- }
- push(@h, "$k: $v");
- }
-
- if (length($content) && !$given{'content-length'}) {
- push(@h, "Content-Length: " . length($content));
- }
-
- my @h2;
- if ($given{te}) {
- push(@connection, "TE") unless grep lc($_) eq "te", @connection;
- }
- elsif ($self->send_te && gunzip_ok()) {
- # gzip is less wanted since the IO::Uncompress::Gunzip interface for
- # it does not really allow chunked decoding to take place easily.
- push(@h2, "TE: deflate,gzip;q=0.3");
- push(@connection, "TE");
- }
-
- unless (grep lc($_) eq "close", @connection) {
- if ($self->keep_alive) {
- if ($peer_ver eq "1.0") {
- # from looking at Netscape's headers
- push(@h2, "Keep-Alive: 300");
- unshift(@connection, "Keep-Alive");
- }
- }
- else {
- push(@connection, "close") if $ver ge "1.1";
- }
- }
- push(@h2, "Connection: " . join(", ", @connection)) if @connection;
- unless ($given{host}) {
- my $h = ${*$self}{'http_host'};
- push(@h2, "Host: $h") if $h;
- }
-
- return _bytes(join($CRLF, "$method $uri HTTP/$ver", @h2, @h, "", $content));
-}
-
-
-sub write_request {
- my $self = shift;
- $self->print($self->format_request(@_));
-}
-
-sub format_chunk {
- my $self = shift;
- return $_[0] unless defined($_[0]) && length($_[0]);
- return _bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF);
-}
-
-sub write_chunk {
- my $self = shift;
- return 1 unless defined($_[0]) && length($_[0]);
- $self->print(_bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF));
-}
-
-sub format_chunk_eof {
- my $self = shift;
- my @h;
- while (@_) {
- push(@h, sprintf "%s: %s$CRLF", splice(@_, 0, 2));
- }
- return _bytes(join("", "0$CRLF", @h, $CRLF));
-}
-
-sub write_chunk_eof {
- my $self = shift;
- $self->print($self->format_chunk_eof(@_));
-}
-
-
-sub my_read {
- die if @_ > 3;
- my $self = shift;
- my $len = $_[1];
- for (${*$self}{'http_buf'}) {
- if (length) {
- $_[0] = substr($_, 0, $len, "");
- return length($_[0]);
- }
- else {
- die "read timeout" unless $self->can_read;
- return $self->sysread($_[0], $len);
- }
- }
-}
-
-
-sub my_readline {
- my $self = shift;
- my $what = shift;
- for (${*$self}{'http_buf'}) {
- my $max_line_length = ${*$self}{'http_max_line_length'};
- my $pos;
- while (1) {
- # find line ending
- $pos = index($_, "\012");
- last if $pos >= 0;
- die "$what line too long (limit is $max_line_length)"
- if $max_line_length && length($_) > $max_line_length;
-
- # need to read more data to find a line ending
- my $new_bytes = 0;
-
- READ:
- { # wait until bytes start arriving
- $self->can_read
- or die "read timeout";
-
- # consume all incoming bytes
- while(1) {
- my $bytes_read = $self->sysread($_, 1024, length);
- if(defined $bytes_read) {
- $new_bytes += $bytes_read;
- last if $bytes_read < 1024;
- # We got exactly 1024 bytes, so we need to select() to know if there is more data
- last unless $self->can_read(0);
- }
- elsif($!{EINTR} || $!{EAGAIN} || $!{EWOULDBLOCK}) {
- redo READ;
- }
- else {
- # if we have already accumulated some data let's at
- # least return that as a line
- length or die "$what read failed: $!";
- last;
- }
- }
-
- # no line-ending, no new bytes
- return length($_) ? substr($_, 0, length($_), "") : undef
- if $new_bytes==0;
- }
- }
- die "$what line too long ($pos; limit is $max_line_length)"
- if $max_line_length && $pos > $max_line_length;
-
- my $line = substr($_, 0, $pos+1, "");
- $line =~ s/(\015?\012)\z// || die "Assert";
- return wantarray ? ($line, $1) : $line;
- }
-}
-
-
-sub can_read {
- my $self = shift;
- return 1 unless defined(fileno($self));
- return 1 if $self->isa('IO::Socket::SSL') && $self->pending;
- return 1 if $self->isa('Net::SSL') && $self->can('pending') && $self->pending;
-
- # With no timeout, wait forever. An explicit timeout of 0 can be
- # used to just check if the socket is readable without waiting.
- my $timeout = @_ ? shift : (${*$self}{io_socket_timeout} || undef);
-
- my $fbits = '';
- vec($fbits, fileno($self), 1) = 1;
- SELECT:
- {
- my $before;
- $before = time if $timeout;
- my $nfound = select($fbits, undef, undef, $timeout);
- if ($nfound < 0) {
- if ($!{EINTR} || $!{EAGAIN} || $!{EWOULDBLOCK}) {
- # don't really think EAGAIN/EWOULDBLOCK can happen here
- if ($timeout) {
- $timeout -= time - $before;
- $timeout = 0 if $timeout < 0;
- }
- redo SELECT;
- }
- die "select failed: $!";
- }
- return $nfound > 0;
- }
-}
-
-
-sub _rbuf {
- my $self = shift;
- if (@_) {
- for (${*$self}{'http_buf'}) {
- my $old;
- $old = $_ if defined wantarray;
- $_ = shift;
- return $old;
- }
- }
- else {
- return ${*$self}{'http_buf'};
- }
-}
-
-sub _rbuf_length {
- my $self = shift;
- return length ${*$self}{'http_buf'};
-}
-
-
-sub _read_header_lines {
- my $self = shift;
- my $junk_out = shift;
-
- my @headers;
- my $line_count = 0;
- my $max_header_lines = ${*$self}{'http_max_header_lines'};
- while (my $line = my_readline($self, 'Header')) {
- if ($line =~ /^(\S+?)\s*:\s*(.*)/s) {
- push(@headers, $1, $2);
- }
- elsif (@headers && $line =~ s/^\s+//) {
- $headers[-1] .= " " . $line;
- }
- elsif ($junk_out) {
- push(@$junk_out, $line);
- }
- else {
- die "Bad header: '$line'\n";
- }
- if ($max_header_lines) {
- $line_count++;
- if ($line_count >= $max_header_lines) {
- die "Too many header lines (limit is $max_header_lines)";
- }
- }
- }
- return @headers;
-}
-
-
-sub read_response_headers {
- my($self, %opt) = @_;
- my $laxed = $opt{laxed};
-
- my($status, $eol) = my_readline($self, 'Status');
- unless (defined $status) {
- die "Server closed connection without sending any data back";
- }
-
- my($peer_ver, $code, $message) = split(/\s+/, $status, 3);
- if (!$peer_ver || $peer_ver !~ s,^HTTP/,, || $code !~ /^[1-5]\d\d$/) {
- die "Bad response status line: '$status'" unless $laxed;
- # assume HTTP/0.9
- ${*$self}{'http_peer_http_version'} = "0.9";
- ${*$self}{'http_status'} = "200";
- substr(${*$self}{'http_buf'}, 0, 0) = $status . ($eol || "");
- return 200 unless wantarray;
- return (200, "Assumed OK");
- };
-
- ${*$self}{'http_peer_http_version'} = $peer_ver;
- ${*$self}{'http_status'} = $code;
-
- my $junk_out;
- if ($laxed) {
- $junk_out = $opt{junk_out} || [];
- }
- my @headers = $self->_read_header_lines($junk_out);
-
- # pick out headers that read_entity_body might need
- my @te;
- my $content_length;
- for (my $i = 0; $i < @headers; $i += 2) {
- my $h = lc($headers[$i]);
- if ($h eq 'transfer-encoding') {
- my $te = $headers[$i+1];
- $te =~ s/^\s+//;
- $te =~ s/\s+$//;
- push(@te, $te) if length($te);
- }
- elsif ($h eq 'content-length') {
- # ignore bogus and overflow values
- if ($headers[$i+1] =~ /^\s*(\d{1,15})(?:\s|$)/) {
- $content_length = $1;
- }
- }
- }
- ${*$self}{'http_te'} = join(",", @te);
- ${*$self}{'http_content_length'} = $content_length;
- ${*$self}{'http_first_body'}++;
- delete ${*$self}{'http_trailers'};
- return $code unless wantarray;
- return ($code, $message, @headers);
-}
-
-
-sub read_entity_body {
- my $self = shift;
- my $buf_ref = \$_[0];
- my $size = $_[1];
- die "Offset not supported yet" if $_[2];
-
- my $chunked;
- my $bytes;
-
- if (${*$self}{'http_first_body'}) {
- ${*$self}{'http_first_body'} = 0;
- delete ${*$self}{'http_chunked'};
- delete ${*$self}{'http_bytes'};
- my $method = shift(@{${*$self}{'http_request_method'}});
- my $status = ${*$self}{'http_status'};
- if ($method eq "HEAD") {
- # this response is always empty regardless of other headers
- $bytes = 0;
- }
- elsif (my $te = ${*$self}{'http_te'}) {
- my @te = split(/\s*,\s*/, lc($te));
- die "Chunked must be last Transfer-Encoding '$te'"
- unless pop(@te) eq "chunked";
- pop(@te) while @te && $te[-1] eq "chunked"; # ignore repeated chunked spec
-
- for (@te) {
- if ($_ eq "deflate" && inflate_ok()) {
- #require Compress::Raw::Zlib;
- my ($i, $status) = Compress::Raw::Zlib::Inflate->new();
- die "Can't make inflator: $status" unless $i;
- $_ = sub { my $out; $i->inflate($_[0], \$out); $out }
- }
- elsif ($_ eq "gzip" && gunzip_ok()) {
- #require IO::Uncompress::Gunzip;
- my @buf;
- $_ = sub {
- push(@buf, $_[0]);
- return "" unless $_[1];
- my $input = join("", @buf);
- my $output;
- IO::Uncompress::Gunzip::gunzip(\$input, \$output, Transparent => 0)
- or die "Can't gunzip content: $IO::Uncompress::Gunzip::GunzipError";
- return \$output;
- };
- }
- elsif ($_ eq "identity") {
- $_ = sub { $_[0] };
- }
- else {
- die "Can't handle transfer encoding '$te'";
- }
- }
-
- @te = reverse(@te);
-
- ${*$self}{'http_te2'} = @te ? \@te : "";
- $chunked = -1;
- }
- elsif (defined(my $content_length = ${*$self}{'http_content_length'})) {
- $bytes = $content_length;
- }
- elsif ($status =~ /^(?:1|[23]04)/) {
- # RFC 2616 says that these responses should always be empty
- # but that does not appear to be true in practice [RT#17907]
- $bytes = 0;
- }
- else {
- # XXX Multi-Part types are self delimiting, but RFC 2616 says we
- # only has to deal with 'multipart/byteranges'
-
- # Read until EOF
- }
- }
- else {
- $chunked = ${*$self}{'http_chunked'};
- $bytes = ${*$self}{'http_bytes'};
- }
-
- if (defined $chunked) {
- # The state encoded in $chunked is:
- # $chunked == 0: read CRLF after chunk, then chunk header
- # $chunked == -1: read chunk header
- # $chunked > 0: bytes left in current chunk to read
-
- if ($chunked <= 0) {
- my $line = my_readline($self, 'Entity body');
- if ($chunked == 0) {
- die "Missing newline after chunk data: '$line'"
- if !defined($line) || $line ne "";
- $line = my_readline($self, 'Entity body');
- }
- die "EOF when chunk header expected" unless defined($line);
- my $chunk_len = $line;
- $chunk_len =~ s/;.*//; # ignore potential chunk parameters
- unless ($chunk_len =~ /^([\da-fA-F]+)\s*$/) {
- die "Bad chunk-size in HTTP response: $line";
- }
- $chunked = hex($1);
- ${*$self}{'http_chunked'} = $chunked;
- if ($chunked == 0) {
- ${*$self}{'http_trailers'} = [$self->_read_header_lines];
- $$buf_ref = "";
-
- my $n = 0;
- if (my $transforms = delete ${*$self}{'http_te2'}) {
- for (@$transforms) {
- $$buf_ref = &$_($$buf_ref, 1);
- }
- $n = length($$buf_ref);
- }
-
- # in case somebody tries to read more, make sure we continue
- # to return EOF
- delete ${*$self}{'http_chunked'};
- ${*$self}{'http_bytes'} = 0;
-
- return $n;
- }
- }
-
- my $n = $chunked;
- $n = $size if $size && $size < $n;
- $n = my_read($self, $$buf_ref, $n);
- return undef unless defined $n;
-
- ${*$self}{'http_chunked'} = $chunked - $n;
-
- if ($n > 0) {
- if (my $transforms = ${*$self}{'http_te2'}) {
- for (@$transforms) {
- $$buf_ref = &$_($$buf_ref, 0);
- }
- $n = length($$buf_ref);
- $n = -1 if $n == 0;
- }
- }
- return $n;
- }
- elsif (defined $bytes) {
- unless ($bytes) {
- $$buf_ref = "";
- return 0;
- }
- my $n = $bytes;
- $n = $size if $size && $size < $n;
- $n = my_read($self, $$buf_ref, $n);
- ${*$self}{'http_bytes'} = defined $n ? $bytes - $n : $bytes;
- return $n;
- }
- else {
- # read until eof
- $size ||= 8*1024;
- return my_read($self, $$buf_ref, $size);
- }
-}
-
-sub get_trailers {
- my $self = shift;
- @{${*$self}{'http_trailers'} || []};
-}
-
-BEGIN {
-my $gunzip_ok;
-my $inflate_ok;
-
-sub gunzip_ok {
- return $gunzip_ok if defined $gunzip_ok;
-
- # Try to load IO::Uncompress::Gunzip.
- local $@;
- local $SIG{__DIE__};
- $gunzip_ok = 0;
-
- eval {
- require IO::Uncompress::Gunzip;
- $gunzip_ok++;
- };
-
- return $gunzip_ok;
-}
-
-sub inflate_ok {
- return $inflate_ok if defined $inflate_ok;
-
- # Try to load Compress::Raw::Zlib.
- local $@;
- local $SIG{__DIE__};
- $inflate_ok = 0;
-
- eval {
- require Compress::Raw::Zlib;
- $inflate_ok++;
- };
-
- return $inflate_ok;
-}
-
-} # BEGIN
-
-1;
-
-__END__
-
-#line 674
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/HTTPS.pm b/software/Slic3r-1.3.0.64bit/lib/Net/HTTPS.pm
deleted file mode 100644
index eab13ac9..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/HTTPS.pm
+++ /dev/null
@@ -1,89 +0,0 @@
-#line 1 "Net/HTTPS.pm"
-package Net::HTTPS;
-$Net::HTTPS::VERSION = '6.13';
-use strict;
-use warnings;
-
-# Figure out which SSL implementation to use
-use vars qw($SSL_SOCKET_CLASS);
-if ($SSL_SOCKET_CLASS) {
- # somebody already set it
-}
-elsif ($SSL_SOCKET_CLASS = $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}) {
- unless ($SSL_SOCKET_CLASS =~ /^(IO::Socket::SSL|Net::SSL)\z/) {
- die "Bad socket class [$SSL_SOCKET_CLASS]";
- }
- eval "require $SSL_SOCKET_CLASS";
- die $@ if $@;
-}
-elsif ($IO::Socket::SSL::VERSION) {
- $SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded
-}
-elsif ($Net::SSL::VERSION) {
- $SSL_SOCKET_CLASS = "Net::SSL";
-}
-else {
- eval { require IO::Socket::SSL; };
- if ($@) {
- my $old_errsv = $@;
- eval {
- require Net::SSL; # from Crypt-SSLeay
- };
- if ($@) {
- $old_errsv =~ s/\s\(\@INC contains:.*\)/)/g;
- die $old_errsv . $@;
- }
- $SSL_SOCKET_CLASS = "Net::SSL";
- }
- else {
- $SSL_SOCKET_CLASS = "IO::Socket::SSL";
- }
-}
-
-require Net::HTTP::Methods;
-
-our @ISA=($SSL_SOCKET_CLASS, 'Net::HTTP::Methods');
-
-sub configure {
- my($self, $cnf) = @_;
- $self->http_configure($cnf);
-}
-
-sub http_connect {
- my($self, $cnf) = @_;
- if ($self->isa("Net::SSL")) {
- if ($cnf->{SSL_verify_mode}) {
- if (my $f = $cnf->{SSL_ca_file}) {
- $ENV{HTTPS_CA_FILE} = $f;
- }
- if (my $f = $cnf->{SSL_ca_path}) {
- $ENV{HTTPS_CA_DIR} = $f;
- }
- }
- if ($cnf->{SSL_verifycn_scheme}) {
- $@ = "Net::SSL from Crypt-SSLeay can't verify hostnames; either install IO::Socket::SSL or turn off verification by setting the PERL_LWP_SSL_VERIFY_HOSTNAME environment variable to 0";
- return undef;
- }
- }
- $self->SUPER::configure($cnf);
-}
-
-sub http_default_port {
- 443;
-}
-
-if ($SSL_SOCKET_CLASS eq "Net::SSL") {
- # The underlying SSLeay classes fails to work if the socket is
- # placed in non-blocking mode. This override of the blocking
- # method makes sure it stays the way it was created.
- *blocking = sub { };
-}
-
-1;
-
-#line 131
-
-__END__
-
-#ABSTRACT: Low-level HTTP over SSL/TLS connection (client)
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/NNTP.pm b/software/Slic3r-1.3.0.64bit/lib/Net/NNTP.pm
deleted file mode 100644
index 4ba51023..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/NNTP.pm
+++ /dev/null
@@ -1,784 +0,0 @@
-#line 1 "Net/NNTP.pm"
-# Net::NNTP.pm
-#
-# Versions up to 2.24_1 Copyright (c) 1995-1997 Graham Barr .
-# All rights reserved.
-# Changes in Version 2.25 onwards Copyright (C) 2013-2015 Steve Hay. All rights
-# reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-
-package Net::NNTP;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-use Time::Local;
-
-our $VERSION = "3.10";
-
-# Code for detecting if we can use SSL
-my $ssl_class = eval {
- require IO::Socket::SSL;
- # first version with default CA on most platforms
- no warnings 'numeric';
- IO::Socket::SSL->VERSION(2.007);
-} && 'IO::Socket::SSL';
-
-my $nossl_warn = !$ssl_class &&
- 'To use SSL please install IO::Socket::SSL with version>=2.007';
-
-# Code for detecting if we can use IPv6
-my $family_key = 'Domain';
-my $inet6_class = eval {
- require IO::Socket::IP;
- no warnings 'numeric';
- IO::Socket::IP->VERSION(0.25) || die;
- $family_key = 'Family';
-} && 'IO::Socket::IP' || eval {
- require IO::Socket::INET6;
- no warnings 'numeric';
- IO::Socket::INET6->VERSION(2.62);
-} && 'IO::Socket::INET6';
-
-
-sub can_ssl { $ssl_class };
-sub can_inet6 { $inet6_class };
-
-our @ISA = ('Net::Cmd', $inet6_class || 'IO::Socket::INET');
-
-
-sub new {
- my $self = shift;
- my $type = ref($self) || $self;
- my ($host, %arg);
- if (@_ % 2) {
- $host = shift;
- %arg = @_;
- }
- else {
- %arg = @_;
- $host = delete $arg{Host};
- }
- my $obj;
-
- $host ||= $ENV{NNTPSERVER} || $ENV{NEWSHOST};
-
- my $hosts = defined $host ? [$host] : $NetConfig{nntp_hosts};
-
- @{$hosts} = qw(news)
- unless @{$hosts};
-
- my %connect = ( Proto => 'tcp');
-
- if ($arg{SSL}) {
- # SSL from start
- die $nossl_warn if ! $ssl_class;
- $arg{Port} ||= 563;
- $connect{$_} = $arg{$_} for(grep { m{^SSL_} } keys %arg);
- }
-
- foreach my $o (qw(LocalAddr LocalPort Timeout)) {
- $connect{$o} = $arg{$o} if exists $arg{$o};
- }
- $connect{$family_key} = $arg{Domain} || $arg{Family};
- $connect{Timeout} = 120 unless defined $connect{Timeout};
- $connect{PeerPort} = $arg{Port} || 'nntp(119)';
- foreach my $h (@{$hosts}) {
- $connect{PeerAddr} = $h;
- $obj = $type->SUPER::new(%connect) or next;
- ${*$obj}{'net_nntp_host'} = $h;
- ${*$obj}{'net_nntp_arg'} = \%arg;
- if ($arg{SSL}) {
- Net::NNTP::_SSL->start_SSL($obj,%arg) or next;
- }
- last:
- }
-
- return
- unless defined $obj;
-
- $obj->autoflush(1);
- $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- unless ($obj->response() == CMD_OK) {
- $obj->close;
- return;
- }
-
- my $c = $obj->code;
- my @m = $obj->message;
-
- unless (exists $arg{Reader} && $arg{Reader} == 0) {
-
- # if server is INN and we have transfer rights the we are currently
- # talking to innd not nnrpd
- if ($obj->reader) {
-
- # If reader succeeds the we need to consider this code to determine postok
- $c = $obj->code;
- }
- else {
-
- # I want to ignore this failure, so restore the previous status.
- $obj->set_status($c, \@m);
- }
- }
-
- ${*$obj}{'net_nntp_post'} = $c == 200 ? 1 : 0;
-
- $obj;
-}
-
-
-sub host {
- my $me = shift;
- ${*$me}{'net_nntp_host'};
-}
-
-
-sub debug_text {
- my $nntp = shift;
- my $inout = shift;
- my $text = shift;
-
- if ( (ref($nntp) and $nntp->code == 350 and $text =~ /^(\S+)/)
- || ($text =~ /^(authinfo\s+pass)/io))
- {
- $text = "$1 ....\n";
- }
-
- $text;
-}
-
-
-sub postok {
- @_ == 1 or croak 'usage: $nntp->postok()';
- my $nntp = shift;
- ${*$nntp}{'net_nntp_post'} || 0;
-}
-
-
-sub starttls {
- my $self = shift;
- $ssl_class or die $nossl_warn;
- $self->_STARTTLS or return;
- Net::NNTP::_SSL->start_SSL($self,
- %{ ${*$self}{'net_nntp_arg'} }, # (ssl) args given in new
- @_ # more (ssl) args
- ) or return;
- return 1;
-}
-
-
-sub article {
- @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->article( [ MSGID ], [ FH ] )';
- my $nntp = shift;
- my @fh;
-
- @fh = (pop) if @_ == 2 || (@_ && (ref($_[0]) || ref(\$_[0]) eq 'GLOB'));
-
- $nntp->_ARTICLE(@_)
- ? $nntp->read_until_dot(@fh)
- : undef;
-}
-
-
-sub articlefh {
- @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->articlefh( [ MSGID ] )';
- my $nntp = shift;
-
- return unless $nntp->_ARTICLE(@_);
- return $nntp->tied_fh;
-}
-
-
-sub authinfo {
- @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )';
- my ($nntp, $user, $pass) = @_;
-
- $nntp->_AUTHINFO("USER", $user) == CMD_MORE
- && $nntp->_AUTHINFO("PASS", $pass) == CMD_OK;
-}
-
-
-sub authinfo_simple {
- @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )';
- my ($nntp, $user, $pass) = @_;
-
- $nntp->_AUTHINFO('SIMPLE') == CMD_MORE
- && $nntp->command($user, $pass)->response == CMD_OK;
-}
-
-
-sub body {
- @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->body( [ MSGID ], [ FH ] )';
- my $nntp = shift;
- my @fh;
-
- @fh = (pop) if @_ == 2 || (@_ && ref($_[0]) || ref(\$_[0]) eq 'GLOB');
-
- $nntp->_BODY(@_)
- ? $nntp->read_until_dot(@fh)
- : undef;
-}
-
-
-sub bodyfh {
- @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->bodyfh( [ MSGID ] )';
- my $nntp = shift;
- return unless $nntp->_BODY(@_);
- return $nntp->tied_fh;
-}
-
-
-sub head {
- @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->head( [ MSGID ], [ FH ] )';
- my $nntp = shift;
- my @fh;
-
- @fh = (pop) if @_ == 2 || (@_ && ref($_[0]) || ref(\$_[0]) eq 'GLOB');
-
- $nntp->_HEAD(@_)
- ? $nntp->read_until_dot(@fh)
- : undef;
-}
-
-
-sub headfh {
- @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->headfh( [ MSGID ] )';
- my $nntp = shift;
- return unless $nntp->_HEAD(@_);
- return $nntp->tied_fh;
-}
-
-
-sub nntpstat {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->nntpstat( [ MSGID ] )';
- my $nntp = shift;
-
- $nntp->_STAT(@_) && $nntp->message =~ /(<[^>]+>)/o
- ? $1
- : undef;
-}
-
-
-sub group {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->group( [ GROUP ] )';
- my $nntp = shift;
- my $grp = ${*$nntp}{'net_nntp_group'};
-
- return $grp
- unless (@_ || wantarray);
-
- my $newgrp = shift;
-
- $newgrp = (defined($grp) and length($grp)) ? $grp : ""
- unless defined($newgrp) and length($newgrp);
-
- return
- unless $nntp->_GROUP($newgrp) and $nntp->message =~ /(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/;
-
- my ($count, $first, $last, $group) = ($1, $2, $3, $4);
-
- # group may be replied as '(current group)'
- $group = ${*$nntp}{'net_nntp_group'}
- if $group =~ /\(/;
-
- ${*$nntp}{'net_nntp_group'} = $group;
-
- wantarray
- ? ($count, $first, $last, $group)
- : $group;
-}
-
-
-sub help {
- @_ == 1 or croak 'usage: $nntp->help()';
- my $nntp = shift;
-
- $nntp->_HELP
- ? $nntp->read_until_dot
- : undef;
-}
-
-
-sub ihave {
- @_ >= 2 or croak 'usage: $nntp->ihave( MESSAGE-ID [, MESSAGE ])';
- my $nntp = shift;
- my $mid = shift;
-
- $nntp->_IHAVE($mid) && $nntp->datasend(@_)
- ? @_ == 0 || $nntp->dataend
- : undef;
-}
-
-
-sub last {
- @_ == 1 or croak 'usage: $nntp->last()';
- my $nntp = shift;
-
- $nntp->_LAST && $nntp->message =~ /(<[^>]+>)/o
- ? $1
- : undef;
-}
-
-
-sub list {
- @_ == 1 or croak 'usage: $nntp->list()';
- my $nntp = shift;
-
- $nntp->_LIST
- ? $nntp->_grouplist
- : undef;
-}
-
-
-sub newgroups {
- @_ >= 2 or croak 'usage: $nntp->newgroups( SINCE [, DISTRIBUTIONS ])';
- my $nntp = shift;
- my $time = _timestr(shift);
- my $dist = shift || "";
-
- $dist = join(",", @{$dist})
- if ref($dist);
-
- $nntp->_NEWGROUPS($time, $dist)
- ? $nntp->_grouplist
- : undef;
-}
-
-
-sub newnews {
- @_ >= 2 && @_ <= 4
- or croak 'usage: $nntp->newnews( SINCE [, GROUPS [, DISTRIBUTIONS ]])';
- my $nntp = shift;
- my $time = _timestr(shift);
- my $grp = @_ ? shift: $nntp->group;
- my $dist = shift || "";
-
- $grp ||= "*";
- $grp = join(",", @{$grp})
- if ref($grp);
-
- $dist = join(",", @{$dist})
- if ref($dist);
-
- $nntp->_NEWNEWS($grp, $time, $dist)
- ? $nntp->_articlelist
- : undef;
-}
-
-
-sub next {
- @_ == 1 or croak 'usage: $nntp->next()';
- my $nntp = shift;
-
- $nntp->_NEXT && $nntp->message =~ /(<[^>]+>)/o
- ? $1
- : undef;
-}
-
-
-sub post {
- @_ >= 1 or croak 'usage: $nntp->post( [ MESSAGE ] )';
- my $nntp = shift;
-
- $nntp->_POST() && $nntp->datasend(@_)
- ? @_ == 0 || $nntp->dataend
- : undef;
-}
-
-
-sub postfh {
- my $nntp = shift;
- return unless $nntp->_POST();
- return $nntp->tied_fh;
-}
-
-
-sub quit {
- @_ == 1 or croak 'usage: $nntp->quit()';
- my $nntp = shift;
-
- $nntp->_QUIT;
- $nntp->close;
-}
-
-
-sub slave {
- @_ == 1 or croak 'usage: $nntp->slave()';
- my $nntp = shift;
-
- $nntp->_SLAVE;
-}
-
-##
-## The following methods are not implemented by all servers
-##
-
-
-sub active {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->active( [ PATTERN ] )';
- my $nntp = shift;
-
- $nntp->_LIST('ACTIVE', @_)
- ? $nntp->_grouplist
- : undef;
-}
-
-
-sub active_times {
- @_ == 1 or croak 'usage: $nntp->active_times()';
- my $nntp = shift;
-
- $nntp->_LIST('ACTIVE.TIMES')
- ? $nntp->_grouplist
- : undef;
-}
-
-
-sub distributions {
- @_ == 1 or croak 'usage: $nntp->distributions()';
- my $nntp = shift;
-
- $nntp->_LIST('DISTRIBUTIONS')
- ? $nntp->_description
- : undef;
-}
-
-
-sub distribution_patterns {
- @_ == 1 or croak 'usage: $nntp->distributions()';
- my $nntp = shift;
-
- my $arr;
- local $_;
-
- ## no critic (ControlStructures::ProhibitMutatingListFunctions)
- $nntp->_LIST('DISTRIB.PATS')
- && ($arr = $nntp->read_until_dot)
- ? [grep { /^\d/ && (chomp, $_ = [split /:/]) } @$arr]
- : undef;
-}
-
-
-sub newsgroups {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->newsgroups( [ PATTERN ] )';
- my $nntp = shift;
-
- $nntp->_LIST('NEWSGROUPS', @_)
- ? $nntp->_description
- : undef;
-}
-
-
-sub overview_fmt {
- @_ == 1 or croak 'usage: $nntp->overview_fmt()';
- my $nntp = shift;
-
- $nntp->_LIST('OVERVIEW.FMT')
- ? $nntp->_articlelist
- : undef;
-}
-
-
-sub subscriptions {
- @_ == 1 or croak 'usage: $nntp->subscriptions()';
- my $nntp = shift;
-
- $nntp->_LIST('SUBSCRIPTIONS')
- ? $nntp->_articlelist
- : undef;
-}
-
-
-sub listgroup {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->listgroup( [ GROUP ] )';
- my $nntp = shift;
-
- $nntp->_LISTGROUP(@_)
- ? $nntp->_articlelist
- : undef;
-}
-
-
-sub reader {
- @_ == 1 or croak 'usage: $nntp->reader()';
- my $nntp = shift;
-
- $nntp->_MODE('READER');
-}
-
-
-sub xgtitle {
- @_ == 1 || @_ == 2 or croak 'usage: $nntp->xgtitle( [ PATTERN ] )';
- my $nntp = shift;
-
- $nntp->_XGTITLE(@_)
- ? $nntp->_description
- : undef;
-}
-
-
-sub xhdr {
- @_ >= 2 && @_ <= 4 or croak 'usage: $nntp->xhdr( HEADER, [ MESSAGE-SPEC ] )';
- my $nntp = shift;
- my $hdr = shift;
- my $arg = _msg_arg(@_);
-
- $nntp->_XHDR($hdr, $arg)
- ? $nntp->_description
- : undef;
-}
-
-
-sub xover {
- @_ == 2 || @_ == 3 or croak 'usage: $nntp->xover( MESSAGE-SPEC )';
- my $nntp = shift;
- my $arg = _msg_arg(@_);
-
- $nntp->_XOVER($arg)
- ? $nntp->_fieldlist
- : undef;
-}
-
-
-sub xpat {
- @_ == 4 || @_ == 5 or croak '$nntp->xpat( HEADER, PATTERN, MESSAGE-SPEC )';
- my $nntp = shift;
- my $hdr = shift;
- my $pat = shift;
- my $arg = _msg_arg(@_);
-
- $pat = join(" ", @$pat)
- if ref($pat);
-
- $nntp->_XPAT($hdr, $arg, $pat)
- ? $nntp->_description
- : undef;
-}
-
-
-sub xpath {
- @_ == 2 or croak 'usage: $nntp->xpath( MESSAGE-ID )';
- my ($nntp, $mid) = @_;
-
- return
- unless $nntp->_XPATH($mid);
-
- my $m;
- ($m = $nntp->message) =~ s/^\d+\s+//o;
- my @p = split /\s+/, $m;
-
- wantarray ? @p : $p[0];
-}
-
-
-sub xrover {
- @_ == 2 || @_ == 3 or croak 'usage: $nntp->xrover( MESSAGE-SPEC )';
- my $nntp = shift;
- my $arg = _msg_arg(@_);
-
- $nntp->_XROVER($arg)
- ? $nntp->_description
- : undef;
-}
-
-
-sub date {
- @_ == 1 or croak 'usage: $nntp->date()';
- my $nntp = shift;
-
- $nntp->_DATE
- && $nntp->message =~ /(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/
- ? timegm($6, $5, $4, $3, $2 - 1, $1 - 1900)
- : undef;
-}
-
-
-##
-## Private subroutines
-##
-
-
-sub _msg_arg {
- my $spec = shift;
- my $arg = "";
-
- if (@_) {
- carp "Depriciated passing of two message numbers, " . "pass a reference"
- if $^W;
- $spec = [$spec, $_[0]];
- }
-
- if (defined $spec) {
- if (ref($spec)) {
- $arg = $spec->[0];
- if (defined $spec->[1]) {
- $arg .= "-"
- if $spec->[1] != $spec->[0];
- $arg .= $spec->[1]
- if $spec->[1] > $spec->[0];
- }
- }
- else {
- $arg = $spec;
- }
- }
-
- $arg;
-}
-
-
-sub _timestr {
- my $time = shift;
- my @g = reverse((gmtime($time))[0 .. 5]);
- $g[1] += 1;
- $g[0] %= 100;
- sprintf "%02d%02d%02d %02d%02d%02d GMT", @g;
-}
-
-
-sub _grouplist {
- my $nntp = shift;
- my $arr = $nntp->read_until_dot
- or return;
-
- my $hash = {};
-
- foreach my $ln (@$arr) {
- my @a = split(/[\s\n]+/, $ln);
- $hash->{$a[0]} = [@a[1, 2, 3]];
- }
-
- $hash;
-}
-
-
-sub _fieldlist {
- my $nntp = shift;
- my $arr = $nntp->read_until_dot
- or return;
-
- my $hash = {};
-
- foreach my $ln (@$arr) {
- my @a = split(/[\t\n]/, $ln);
- my $m = shift @a;
- $hash->{$m} = [@a];
- }
-
- $hash;
-}
-
-
-sub _articlelist {
- my $nntp = shift;
- my $arr = $nntp->read_until_dot;
-
- chomp(@$arr)
- if $arr;
-
- $arr;
-}
-
-
-sub _description {
- my $nntp = shift;
- my $arr = $nntp->read_until_dot
- or return;
-
- my $hash = {};
-
- foreach my $ln (@$arr) {
- chomp($ln);
-
- $hash->{$1} = $ln
- if $ln =~ s/^\s*(\S+)\s*//o;
- }
-
- $hash;
-
-}
-
-##
-## The commands
-##
-
-
-sub _ARTICLE { shift->command('ARTICLE', @_)->response == CMD_OK }
-sub _AUTHINFO { shift->command('AUTHINFO', @_)->response }
-sub _BODY { shift->command('BODY', @_)->response == CMD_OK }
-sub _DATE { shift->command('DATE')->response == CMD_INFO }
-sub _GROUP { shift->command('GROUP', @_)->response == CMD_OK }
-sub _HEAD { shift->command('HEAD', @_)->response == CMD_OK }
-sub _HELP { shift->command('HELP', @_)->response == CMD_INFO }
-sub _IHAVE { shift->command('IHAVE', @_)->response == CMD_MORE }
-sub _LAST { shift->command('LAST')->response == CMD_OK }
-sub _LIST { shift->command('LIST', @_)->response == CMD_OK }
-sub _LISTGROUP { shift->command('LISTGROUP', @_)->response == CMD_OK }
-sub _NEWGROUPS { shift->command('NEWGROUPS', @_)->response == CMD_OK }
-sub _NEWNEWS { shift->command('NEWNEWS', @_)->response == CMD_OK }
-sub _NEXT { shift->command('NEXT')->response == CMD_OK }
-sub _POST { shift->command('POST', @_)->response == CMD_MORE }
-sub _QUIT { shift->command('QUIT', @_)->response == CMD_OK }
-sub _SLAVE { shift->command('SLAVE', @_)->response == CMD_OK }
-sub _STARTTLS { shift->command("STARTTLS")->response() == CMD_MORE }
-sub _STAT { shift->command('STAT', @_)->response == CMD_OK }
-sub _MODE { shift->command('MODE', @_)->response == CMD_OK }
-sub _XGTITLE { shift->command('XGTITLE', @_)->response == CMD_OK }
-sub _XHDR { shift->command('XHDR', @_)->response == CMD_OK }
-sub _XPAT { shift->command('XPAT', @_)->response == CMD_OK }
-sub _XPATH { shift->command('XPATH', @_)->response == CMD_OK }
-sub _XOVER { shift->command('XOVER', @_)->response == CMD_OK }
-sub _XROVER { shift->command('XROVER', @_)->response == CMD_OK }
-sub _XTHREAD { shift->unsupported }
-sub _XSEARCH { shift->unsupported }
-sub _XINDEX { shift->unsupported }
-
-##
-## IO/perl methods
-##
-
-
-sub DESTROY {
- my $nntp = shift;
- defined(fileno($nntp)) && $nntp->quit;
-}
-
-{
- package Net::NNTP::_SSL;
- our @ISA = ( $ssl_class ? ($ssl_class):(), 'Net::NNTP' );
- sub starttls { die "NNTP connection is already in SSL mode" }
- sub start_SSL {
- my ($class,$nntp,%arg) = @_;
- delete @arg{ grep { !m{^SSL_} } keys %arg };
- ( $arg{SSL_verifycn_name} ||= $nntp->host )
- =~s{(?can_client_sni;
- my $ok = $class->SUPER::start_SSL($nntp,
- SSL_verifycn_scheme => 'nntp',
- %arg
- );
- $@ = $ssl_class->errstr if !$ok;
- return $ok;
- }
-}
-
-
-
-
-1;
-
-__END__
-
-#line 1303
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/Netrc.pm b/software/Slic3r-1.3.0.64bit/lib/Net/Netrc.pm
deleted file mode 100644
index 59ef8487..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/Netrc.pm
+++ /dev/null
@@ -1,207 +0,0 @@
-#line 1 "Net/Netrc.pm"
-# Net::Netrc.pm
-#
-# Versions up to 2.13 Copyright (c) 1995-1998 Graham Barr .
-# All rights reserved.
-# Changes in Version 2.13_01 onwards Copyright (C) 2013-2014 Steve Hay. All
-# rights reserved.
-# This module is free software; you can redistribute it and/or modify it under
-# the same terms as Perl itself, i.e. under the terms of either the GNU General
-# Public License or the Artistic License, as specified in the F file.
-
-package Net::Netrc;
-
-use 5.008001;
-
-use strict;
-use warnings;
-
-use Carp;
-use FileHandle;
-
-our $VERSION = "3.10";
-
-our $TESTING;
-
-my %netrc = ();
-
-sub _readrc {
- my($class, $host) = @_;
- my ($home, $file);
-
- if ($^O eq "MacOS") {
- $home = $ENV{HOME} || `pwd`;
- chomp($home);
- $file = ($home =~ /:$/ ? $home . "netrc" : $home . ":netrc");
- }
- else {
-
- # Some OS's don't have "getpwuid", so we default to $ENV{HOME}
- $home = eval { (getpwuid($>))[7] } || $ENV{HOME};
- $home ||= $ENV{HOMEDRIVE} . ($ENV{HOMEPATH} || '') if defined $ENV{HOMEDRIVE};
- if (-e $home . "/.netrc") {
- $file = $home . "/.netrc";
- }
- elsif (-e $home . "/_netrc") {
- $file = $home . "/_netrc";
- }
- else {
- return unless $TESTING;
- }
- }
-
- my ($login, $pass, $acct) = (undef, undef, undef);
- my $fh;
- local $_;
-
- $netrc{default} = undef;
-
- # OS/2 and Win32 do not handle stat in a way compatible with this check :-(
- unless ($^O eq 'os2'
- || $^O eq 'MSWin32'
- || $^O eq 'MacOS'
- || $^O =~ /^cygwin/)
- {
- my @stat = stat($file);
-
- if (@stat) {
- if ($stat[2] & 077) { ## no critic (ValuesAndExpressions::ProhibitLeadingZeros)
- carp "Bad permissions: $file";
- return;
- }
- if ($stat[4] != $<) {
- carp "Not owner: $file";
- return;
- }
- }
- }
-
- if ($fh = FileHandle->new($file, "r")) {
- my ($mach, $macdef, $tok, @tok) = (0, 0);
-
- while (<$fh>) {
- undef $macdef if /\A\n\Z/;
-
- if ($macdef) {
- push(@$macdef, $_);
- next;
- }
-
- s/^\s*//;
- chomp;
-
- while (length && s/^("((?:[^"]+|\\.)*)"|((?:[^\\\s]+|\\.)*))\s*//) {
- (my $tok = $+) =~ s/\\(.)/$1/g;
- push(@tok, $tok);
- }
-
- TOKEN:
- while (@tok) {
- if ($tok[0] eq "default") {
- shift(@tok);
- $mach = bless {}, $class;
- $netrc{default} = [$mach];
-
- next TOKEN;
- }
-
- last TOKEN
- unless @tok > 1;
-
- $tok = shift(@tok);
-
- if ($tok eq "machine") {
- my $host = shift @tok;
- $mach = bless {machine => $host}, $class;
-
- $netrc{$host} = []
- unless exists($netrc{$host});
- push(@{$netrc{$host}}, $mach);
- }
- elsif ($tok =~ /^(login|password|account)$/) {
- next TOKEN unless $mach;
- my $value = shift @tok;
-
- # Following line added by rmerrell to remove '/' escape char in .netrc
- $value =~ s/\/\\/\\/g;
- $mach->{$1} = $value;
- }
- elsif ($tok eq "macdef") {
- next TOKEN unless $mach;
- my $value = shift @tok;
- $mach->{macdef} = {}
- unless exists $mach->{macdef};
- $macdef = $mach->{machdef}{$value} = [];
- }
- }
- }
- $fh->close();
- }
-}
-
-
-sub lookup {
- my ($class, $mach, $login) = @_;
-
- $class->_readrc()
- unless exists $netrc{default};
-
- $mach ||= 'default';
- undef $login
- if $mach eq 'default';
-
- if (exists $netrc{$mach}) {
- if (defined $login) {
- foreach my $m (@{$netrc{$mach}}) {
- return $m
- if (exists $m->{login} && $m->{login} eq $login);
- }
- return;
- }
- return $netrc{$mach}->[0];
- }
-
- return $netrc{default}->[0]
- if defined $netrc{default};
-
- return;
-}
-
-
-sub login {
- my $me = shift;
-
- exists $me->{login}
- ? $me->{login}
- : undef;
-}
-
-
-sub account {
- my $me = shift;
-
- exists $me->{account}
- ? $me->{account}
- : undef;
-}
-
-
-sub password {
- my $me = shift;
-
- exists $me->{password}
- ? $me->{password}
- : undef;
-}
-
-
-sub lpa {
- my $me = shift;
- ($me->login, $me->password, $me->account);
-}
-
-1;
-
-__END__
-
-#line 348
diff --git a/software/Slic3r-1.3.0.64bit/lib/Net/SSLeay.pm b/software/Slic3r-1.3.0.64bit/lib/Net/SSLeay.pm
deleted file mode 100644
index a232c929..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Net/SSLeay.pm
+++ /dev/null
@@ -1,1427 +0,0 @@
-#line 1 "Net/SSLeay.pm"
-# Net::SSLeay.pm - Perl module for using Eric Young's implementation of SSL
-#
-# Copyright (c) 1996-2003 Sampo Kellomaki , All Rights Reserved.
-# Copyright (C) 2005 Florian Ragwitz , All Rights Reserved.
-# Copyright (C) 2005 Mike McCauley , All Rights Reserved.
-#
-# $Id: SSLeay.pm 483 2017-01-03 07:55:54Z mikem-guest $
-#
-# Change data removed from here. See Changes
-# The distribution and use of this module are subject to the conditions
-# listed in LICENSE file at the root of the Net-SSLeay
-# distribution (i.e. same license as Perl itself).
-
-package Net::SSLeay;
-
-use strict;
-use Carp;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $CRLF);
-use Socket;
-use Errno;
-require 5.005_000;
-
-require Exporter;
-use AutoLoader;
-
-# 0=no warns, 1=only errors, 2=ciphers, 3=progress, 4=dump data
-$Net::SSLeay::trace = 0; # Do not change here, use
- # $Net::SSLeay::trace = [1-4] in caller
-
-# 2 = insist on v2 SSL protocol
-# 3 = insist on v3 SSL
-# 10 = insist on TLSv1
-# 11 = insist on TLSv1.1
-# 12 = insist on TLSv1.2
-# 0 or undef = guess (v23)
-#
-$Net::SSLeay::ssl_version = 0; # don't change here, use
- # Net::SSLeay::version=[2,3,0] in caller
-
-#define to enable the "cat /proc/$$/stat" stuff
-$Net::SSLeay::linux_debug = 0;
-
-# Number of seconds to sleep after sending message and before half
-# closing connection. Useful with antiquated broken servers.
-$Net::SSLeay::slowly = 0;
-
-# RANDOM NUMBER INITIALIZATION
-#
-# Edit to your taste. Using /dev/random would be more secure, but may
-# block if randomness is not available, thus the default is
-# /dev/urandom. $how_random determines how many bits of randomness to take
-# from the device. You should take enough (read SSLeay/doc/rand), but
-# beware that randomness is limited resource so you should not waste
-# it either or you may end up with randomness depletion (situation where
-# /dev/random would block and /dev/urandom starts to return predictable
-# numbers).
-#
-# N.B. /dev/urandom does not exit on all systems, such as Solaris 2.6. In that
-# case you should get a third party package that emulates /dev/urandom
-# (e.g. via named pipe) or supply a random number file. Some such
-# packages are documented in Caveat section of the POD documentation.
-
-$Net::SSLeay::random_device = '/dev/urandom';
-$Net::SSLeay::how_random = 512;
-
-$VERSION = '1.80'; # Dont forget to set version in META.yml too
-@ISA = qw(Exporter);
-
-#BEWARE:
-# 3-columns part of @EXPORT_OK related to constants is the output of command:
-# perl helper_script/regen_openssl_constants.pl -gen-pod
-# if you add/remove any constant you need to update it manually
-
-@EXPORT_OK = qw(
- ASN1_STRFLGS_ESC_CTRL NID_ext_key_usage OP_CRYPTOPRO_TLSEXT_BUG
- ASN1_STRFLGS_ESC_MSB NID_ext_req OP_DONT_INSERT_EMPTY_FRAGMENTS
- ASN1_STRFLGS_ESC_QUOTE NID_friendlyName OP_EPHEMERAL_RSA
- ASN1_STRFLGS_RFC2253 NID_givenName OP_LEGACY_SERVER_CONNECT
- CB_ACCEPT_EXIT NID_hmacWithSHA1 OP_MICROSOFT_BIG_SSLV3_BUFFER
- CB_ACCEPT_LOOP NID_id_ad OP_MICROSOFT_SESS_ID_BUG
- CB_ALERT NID_id_ce OP_MSIE_SSLV2_RSA_PADDING
- CB_CONNECT_EXIT NID_id_kp OP_NETSCAPE_CA_DN_BUG
- CB_CONNECT_LOOP NID_id_pbkdf2 OP_NETSCAPE_CHALLENGE_BUG
- CB_EXIT NID_id_pe OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
- CB_HANDSHAKE_DONE NID_id_pkix OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
- CB_HANDSHAKE_START NID_id_qt_cps OP_NON_EXPORT_FIRST
- CB_LOOP NID_id_qt_unotice OP_NO_COMPRESSION
- CB_READ NID_idea_cbc OP_NO_QUERY_MTU
- CB_READ_ALERT NID_idea_cfb64 OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
- CB_WRITE NID_idea_ecb OP_NO_SSLv2
- CB_WRITE_ALERT NID_idea_ofb64 OP_NO_SSLv3
- ERROR_NONE NID_info_access OP_NO_TICKET
- ERROR_SSL NID_initials OP_NO_TLSv1
- ERROR_SYSCALL NID_invalidity_date OP_NO_TLSv1_1
- ERROR_WANT_ACCEPT NID_issuer_alt_name OP_NO_TLSv1_2
- ERROR_WANT_CONNECT NID_keyBag OP_PKCS1_CHECK_1
- ERROR_WANT_READ NID_key_usage OP_PKCS1_CHECK_2
- ERROR_WANT_WRITE NID_localKeyID OP_SINGLE_DH_USE
- ERROR_WANT_X509_LOOKUP NID_localityName OP_SINGLE_ECDH_USE
- ERROR_ZERO_RETURN NID_md2 OP_SSLEAY_080_CLIENT_DH_BUG
- EVP_PKS_DSA NID_md2WithRSAEncryption OP_SSLREF2_REUSE_CERT_TYPE_BUG
- EVP_PKS_EC NID_md5 OP_TLS_BLOCK_PADDING_BUG
- EVP_PKS_RSA NID_md5WithRSA OP_TLS_D5_BUG
- EVP_PKT_ENC NID_md5WithRSAEncryption OP_TLS_ROLLBACK_BUG
- EVP_PKT_EXCH NID_md5_sha1 READING
- EVP_PKT_EXP NID_mdc2 RECEIVED_SHUTDOWN
- EVP_PKT_SIGN NID_mdc2WithRSA RSA_3
- EVP_PK_DH NID_ms_code_com RSA_F4
- EVP_PK_DSA NID_ms_code_ind R_BAD_AUTHENTICATION_TYPE
- EVP_PK_EC NID_ms_ctl_sign R_BAD_CHECKSUM
- EVP_PK_RSA NID_ms_efs R_BAD_MAC_DECODE
- FILETYPE_ASN1 NID_ms_ext_req R_BAD_RESPONSE_ARGUMENT
- FILETYPE_PEM NID_ms_sgc R_BAD_SSL_FILETYPE
- F_CLIENT_CERTIFICATE NID_name R_BAD_SSL_SESSION_ID_LENGTH
- F_CLIENT_HELLO NID_netscape R_BAD_STATE
- F_CLIENT_MASTER_KEY NID_netscape_base_url R_BAD_WRITE_RETRY
- F_D2I_SSL_SESSION NID_netscape_ca_policy_url R_CHALLENGE_IS_DIFFERENT
- F_GET_CLIENT_FINISHED NID_netscape_ca_revocation_url R_CIPHER_TABLE_SRC_ERROR
- F_GET_CLIENT_HELLO NID_netscape_cert_extension R_INVALID_CHALLENGE_LENGTH
- F_GET_CLIENT_MASTER_KEY NID_netscape_cert_sequence R_NO_CERTIFICATE_SET
- F_GET_SERVER_FINISHED NID_netscape_cert_type R_NO_CERTIFICATE_SPECIFIED
- F_GET_SERVER_HELLO NID_netscape_comment R_NO_CIPHER_LIST
- F_GET_SERVER_VERIFY NID_netscape_data_type R_NO_CIPHER_MATCH
- F_I2D_SSL_SESSION NID_netscape_renewal_url R_NO_PRIVATEKEY
- F_READ_N NID_netscape_revocation_url R_NO_PUBLICKEY
- F_REQUEST_CERTIFICATE NID_netscape_ssl_server_name R_NULL_SSL_CTX
- F_SERVER_HELLO NID_ns_sgc R_PEER_DID_NOT_RETURN_A_CERTIFICATE
- F_SSL_CERT_NEW NID_organizationName R_PEER_ERROR
- F_SSL_GET_NEW_SESSION NID_organizationalUnitName R_PEER_ERROR_CERTIFICATE
- F_SSL_NEW NID_pbeWithMD2AndDES_CBC R_PEER_ERROR_NO_CIPHER
- F_SSL_READ NID_pbeWithMD2AndRC2_CBC R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
- F_SSL_RSA_PRIVATE_DECRYPT NID_pbeWithMD5AndCast5_CBC R_PUBLIC_KEY_ENCRYPT_ERROR
- F_SSL_RSA_PUBLIC_ENCRYPT NID_pbeWithMD5AndDES_CBC R_PUBLIC_KEY_IS_NOT_RSA
- F_SSL_SESSION_NEW NID_pbeWithMD5AndRC2_CBC R_READ_WRONG_PACKET_TYPE
- F_SSL_SESSION_PRINT_FP NID_pbeWithSHA1AndDES_CBC R_SHORT_READ
- F_SSL_SET_FD NID_pbeWithSHA1AndRC2_CBC R_SSL_SESSION_ID_IS_DIFFERENT
- F_SSL_SET_RFD NID_pbe_WithSHA1And128BitRC2_CBC R_UNABLE_TO_EXTRACT_PUBLIC_KEY
- F_SSL_SET_WFD NID_pbe_WithSHA1And128BitRC4 R_UNKNOWN_REMOTE_ERROR_TYPE
- F_SSL_USE_CERTIFICATE NID_pbe_WithSHA1And2_Key_TripleDES_CBC R_UNKNOWN_STATE
- F_SSL_USE_CERTIFICATE_ASN1 NID_pbe_WithSHA1And3_Key_TripleDES_CBC R_X509_LIB
- F_SSL_USE_CERTIFICATE_FILE NID_pbe_WithSHA1And40BitRC2_CBC SENT_SHUTDOWN
- F_SSL_USE_PRIVATEKEY NID_pbe_WithSHA1And40BitRC4 SESSION_ASN1_VERSION
- F_SSL_USE_PRIVATEKEY_ASN1 NID_pbes2 ST_ACCEPT
- F_SSL_USE_PRIVATEKEY_FILE NID_pbmac1 ST_BEFORE
- F_SSL_USE_RSAPRIVATEKEY NID_pkcs ST_CONNECT
- F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_pkcs3 ST_INIT
- F_SSL_USE_RSAPRIVATEKEY_FILE NID_pkcs7 ST_OK
- F_WRITE_PENDING NID_pkcs7_data ST_READ_BODY
- GEN_DIRNAME NID_pkcs7_digest ST_READ_HEADER
- GEN_DNS NID_pkcs7_encrypted TLSEXT_STATUSTYPE_ocsp
- GEN_EDIPARTY NID_pkcs7_enveloped VERIFY_CLIENT_ONCE
- GEN_EMAIL NID_pkcs7_signed VERIFY_FAIL_IF_NO_PEER_CERT
- GEN_IPADD NID_pkcs7_signedAndEnveloped VERIFY_NONE
- GEN_OTHERNAME NID_pkcs8ShroudedKeyBag VERIFY_PEER
- GEN_RID NID_pkcs9 V_OCSP_CERTSTATUS_GOOD
- GEN_URI NID_pkcs9_challengePassword V_OCSP_CERTSTATUS_REVOKED
- GEN_X400 NID_pkcs9_contentType V_OCSP_CERTSTATUS_UNKNOWN
- LIBRESSL_VERSION_NUMBER NID_pkcs9_countersignature WRITING
- MBSTRING_ASC NID_pkcs9_emailAddress X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
- MBSTRING_BMP NID_pkcs9_extCertAttributes X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
- MBSTRING_FLAG NID_pkcs9_messageDigest X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
- MBSTRING_UNIV NID_pkcs9_signingTime X509_CHECK_FLAG_NO_WILDCARDS
- MBSTRING_UTF8 NID_pkcs9_unstructuredAddress X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
- MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_pkcs9_unstructuredName X509_LOOKUP
- MODE_ACCEPT_MOVING_WRITE_BUFFER NID_private_key_usage_period X509_PURPOSE_ANY
- MODE_AUTO_RETRY NID_rc2_40_cbc X509_PURPOSE_CRL_SIGN
- MODE_ENABLE_PARTIAL_WRITE NID_rc2_64_cbc X509_PURPOSE_NS_SSL_SERVER
- MODE_RELEASE_BUFFERS NID_rc2_cbc X509_PURPOSE_OCSP_HELPER
- NID_OCSP_sign NID_rc2_cfb64 X509_PURPOSE_SMIME_ENCRYPT
- NID_SMIMECapabilities NID_rc2_ecb X509_PURPOSE_SMIME_SIGN
- NID_X500 NID_rc2_ofb64 X509_PURPOSE_SSL_CLIENT
- NID_X509 NID_rc4 X509_PURPOSE_SSL_SERVER
- NID_ad_OCSP NID_rc4_40 X509_PURPOSE_TIMESTAMP_SIGN
- NID_ad_ca_issuers NID_rc5_cbc X509_TRUST_COMPAT
- NID_algorithm NID_rc5_cfb64 X509_TRUST_EMAIL
- NID_authority_key_identifier NID_rc5_ecb X509_TRUST_OBJECT_SIGN
- NID_basic_constraints NID_rc5_ofb64 X509_TRUST_OCSP_REQUEST
- NID_bf_cbc NID_ripemd160 X509_TRUST_OCSP_SIGN
- NID_bf_cfb64 NID_ripemd160WithRSA X509_TRUST_SSL_CLIENT
- NID_bf_ecb NID_rle_compression X509_TRUST_SSL_SERVER
- NID_bf_ofb64 NID_rsa X509_TRUST_TSA
- NID_cast5_cbc NID_rsaEncryption X509_V_FLAG_ALLOW_PROXY_CERTS
- NID_cast5_cfb64 NID_rsadsi X509_V_FLAG_CB_ISSUER_CHECK
- NID_cast5_ecb NID_safeContentsBag X509_V_FLAG_CHECK_SS_SIGNATURE
- NID_cast5_ofb64 NID_sdsiCertificate X509_V_FLAG_CRL_CHECK
- NID_certBag NID_secretBag X509_V_FLAG_CRL_CHECK_ALL
- NID_certificate_policies NID_serialNumber X509_V_FLAG_EXPLICIT_POLICY
- NID_client_auth NID_server_auth X509_V_FLAG_EXTENDED_CRL_SUPPORT
- NID_code_sign NID_sha X509_V_FLAG_IGNORE_CRITICAL
- NID_commonName NID_sha1 X509_V_FLAG_INHIBIT_ANY
- NID_countryName NID_sha1WithRSA X509_V_FLAG_INHIBIT_MAP
- NID_crlBag NID_sha1WithRSAEncryption X509_V_FLAG_NOTIFY_POLICY
- NID_crl_distribution_points NID_shaWithRSAEncryption X509_V_FLAG_POLICY_CHECK
- NID_crl_number NID_stateOrProvinceName X509_V_FLAG_POLICY_MASK
- NID_crl_reason NID_subject_alt_name X509_V_FLAG_TRUSTED_FIRST
- NID_delta_crl NID_subject_key_identifier X509_V_FLAG_USE_CHECK_TIME
- NID_des_cbc NID_surname X509_V_FLAG_USE_DELTAS
- NID_des_cfb64 NID_sxnet X509_V_FLAG_X509_STRICT
- NID_des_ecb NID_time_stamp X509_V_OK
- NID_des_ede NID_title XN_FLAG_COMPAT
- NID_des_ede3 NID_undef XN_FLAG_DN_REV
- NID_des_ede3_cbc NID_uniqueIdentifier XN_FLAG_DUMP_UNKNOWN_FIELDS
- NID_des_ede3_cfb64 NID_x509Certificate XN_FLAG_FN_ALIGN
- NID_des_ede3_ofb64 NID_x509Crl XN_FLAG_FN_LN
- NID_des_ede_cbc NID_zlib_compression XN_FLAG_FN_MASK
- NID_des_ede_cfb64 NOTHING XN_FLAG_FN_NONE
- NID_des_ede_ofb64 OCSP_RESPONSE_STATUS_INTERNALERROR XN_FLAG_FN_OID
- NID_des_ofb64 OCSP_RESPONSE_STATUS_MALFORMEDREQUEST XN_FLAG_FN_SN
- NID_description OCSP_RESPONSE_STATUS_SIGREQUIRED XN_FLAG_MULTILINE
- NID_desx_cbc OCSP_RESPONSE_STATUS_SUCCESSFUL XN_FLAG_ONELINE
- NID_dhKeyAgreement OCSP_RESPONSE_STATUS_TRYLATER XN_FLAG_RFC2253
- NID_dnQualifier OCSP_RESPONSE_STATUS_UNAUTHORIZED XN_FLAG_SEP_COMMA_PLUS
- NID_dsa OPENSSL_VERSION_NUMBER XN_FLAG_SEP_CPLUS_SPC
- NID_dsaWithSHA OP_ALL XN_FLAG_SEP_MASK
- NID_dsaWithSHA1 OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION XN_FLAG_SEP_MULTILINE
- NID_dsaWithSHA1_2 OP_CIPHER_SERVER_PREFERENCE XN_FLAG_SEP_SPLUS_SPC
- NID_dsa_2 OP_CISCO_ANYCONNECT XN_FLAG_SPC_EQ
- NID_email_protect OP_COOKIE_EXCHANGE
- BIO_eof
- BIO_f_ssl
- BIO_free
- BIO_new
- BIO_new_file
- BIO_pending
- BIO_read
- BIO_s_mem
- BIO_wpending
- BIO_write
- CTX_free
- CTX_get_cert_store
- CTX_new
- CTX_use_RSAPrivateKey_file
- CTX_use_certificate_file
- CTX_v23_new
- CTX_v2_new
- CTX_v3_new
- ERR_error_string
- ERR_get_error
- ERR_load_RAND_strings
- ERR_load_SSL_strings
- PEM_read_bio_X509_CRL
- RSA_free
- RSA_generate_key
- SESSION
- SESSION_free
- SESSION_get_master_key
- SESSION_new
- SESSION_print
- X509_NAME_get_text_by_NID
- X509_NAME_oneline
- X509_STORE_CTX_set_flags
- X509_STORE_add_cert
- X509_STORE_add_crl
- X509_check_email
- X509_check_host
- X509_check_ip
- X509_check_ip_asc
- X509_free
- X509_get_issuer_name
- X509_get_subject_name
- X509_load_cert_crl_file
- X509_load_cert_file
- X509_load_crl_file
- accept
- add_session
- clear
- clear_error
- connect
- copy_session_id
- d2i_SSL_SESSION
- die_if_ssl_error
- die_now
- do_https
- dump_peer_certificate
- err
- flush_sessions
- free
- get_cipher
- get_cipher_list
- get_client_random
- get_fd
- get_http
- get_http4
- get_https
- get_https3
- get_https4
- get_httpx
- get_httpx4
- get_peer_certificate
- get_peer_cert_chain
- get_rbio
- get_read_ahead
- get_server_random
- get_shared_ciphers
- get_time
- get_timeout
- get_wbio
- i2d_SSL_SESSION
- load_error_strings
- make_form
- make_headers
- new
- peek
- pending
- post_http
- post_http4
- post_https
- post_https3
- post_https4
- post_httpx
- post_httpx4
- print_errs
- read
- remove_session
- rstate_string
- rstate_string_long
- set_bio
- set_cert_and_key
- set_cipher_list
- set_fd
- set_read_ahead
- set_rfd
- set_server_cert_and_key
- set_session
- set_time
- set_timeout
- set_verify
- set_wfd
- ssl_read_CRLF
- ssl_read_all
- ssl_read_until
- ssl_write_CRLF
- ssl_write_all
- sslcat
- state_string
- state_string_long
- tcp_read_CRLF
- tcp_read_all
- tcp_read_until
- tcp_write_CRLF
- tcp_write_all
- tcpcat
- tcpxcat
- use_PrivateKey
- use_PrivateKey_ASN1
- use_PrivateKey_file
- use_RSAPrivateKey
- use_RSAPrivateKey_ASN1
- use_RSAPrivateKey_file
- use_certificate
- use_certificate_ASN1
- use_certificate_file
- write
- d2i_OCSP_RESPONSE
- i2d_OCSP_RESPONSE
- OCSP_RESPONSE_free
- d2i_OCSP_REQUEST
- i2d_OCSP_REQUEST
- OCSP_REQUEST_free
- OCSP_cert2ids
- OCSP_ids2req
- OCSP_response_status
- OCSP_response_status_str
- OCSP_response_verify
- OCSP_response_results
- OCSP_RESPONSE_STATUS_INTERNALERROR
- OCSP_RESPONSE_STATUS_MALFORMEDREQUEST
- OCSP_RESPONSE_STATUS_SIGREQUIRED
- OCSP_RESPONSE_STATUS_SUCCESSFUL
- OCSP_RESPONSE_STATUS_TRYLATER
- OCSP_RESPONSE_STATUS_UNAUTHORIZED
- TLSEXT_STATUSTYPE_ocsp
- V_OCSP_CERTSTATUS_GOOD
- V_OCSP_CERTSTATUS_REVOKED
- V_OCSP_CERTSTATUS_UNKNOWN
-);
-
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function. If a constant is not found then control is passed
- # to the AUTOLOAD in AutoLoader.
-
- my $constname;
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname);
- if ($! != 0) {
- if ($! =~ /((Invalid)|(not valid))/i || $!{EINVAL}) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- croak "Your vendor has not defined SSLeay macro $constname";
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-}
-
-eval {
- require XSLoader;
- XSLoader::load('Net::SSLeay', $VERSION);
- 1;
-} or do {
- require DynaLoader;
- push @ISA, 'DynaLoader';
- bootstrap Net::SSLeay $VERSION;
-};
-
-# Preloaded methods go here.
-
-$CRLF = "\x0d\x0a"; # because \r\n is not fully portable
-
-### Print SSLeay error stack
-
-sub print_errs {
- my ($msg) = @_;
- my ($count, $err, $errs, $e) = (0,0,'');
- while ($err = ERR_get_error()) {
- $count ++;
- $e = "$msg $$: $count - " . ERR_error_string($err) . "\n";
- $errs .= $e;
- warn $e if $Net::SSLeay::trace;
- }
- return $errs;
-}
-
-# Death is conditional to SSLeay errors existing, i.e. this function checks
-# for errors and only dies in affirmative.
-# usage: Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)");
-
-sub die_if_ssl_error {
- my ($msg) = @_;
- die "$$: $msg\n" if print_errs($msg);
-}
-
-# Unconditional death. Used to print SSLeay errors before dying.
-# usage: Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)");
-
-sub die_now {
- my ($msg) = @_;
- print_errs($msg);
- die "$$: $msg\n";
-}
-
-# Perl 5.6.* unicode support causes that length() no longer reliably
-# reflects the byte length of a string. This eval is to fix that.
-# Thanks to Sean Burke for the snippet.
-
-BEGIN{
-eval 'use bytes; sub blength ($) { defined $_[0] ? length $_[0] : 0 }';
-$@ and eval ' sub blength ($) { defined $_[0] ? length $_[0] : 0 }' ;
-}
-
-# Autoload methods go after __END__, and are processed by the autosplit program.
-
-
-1;
-__END__
-
-### Some methods that are macros in C
-
-sub want_nothing { want(shift) == 1 }
-sub want_read { want(shift) == 2 }
-sub want_write { want(shift) == 3 }
-sub want_X509_lookup { want(shift) == 4 }
-
-###
-### Open TCP stream to given host and port, looking up the details
-### from system databases or DNS.
-###
-
-sub open_tcp_connection {
- my ($dest_serv, $port) = @_;
- my ($errs);
-
- $port = getservbyname($port, 'tcp') unless $port =~ /^\d+$/;
- my $dest_serv_ip = gethostbyname($dest_serv);
- unless (defined($dest_serv_ip)) {
- $errs = "$0 $$: open_tcp_connection: destination host not found:"
- . " `$dest_serv' (port $port) ($!)\n";
- warn $errs if $trace;
- return wantarray ? (0, $errs) : 0;
- }
- my $sin = sockaddr_in($port, $dest_serv_ip);
-
- warn "Opening connection to $dest_serv:$port (" .
- inet_ntoa($dest_serv_ip) . ")" if $trace>2;
-
- my $proto = &Socket::IPPROTO_TCP; # getprotobyname('tcp') not available on android
- if (socket (SSLCAT_S, &PF_INET(), &SOCK_STREAM(), $proto)) {
- warn "next connect" if $trace>3;
- if (CORE::connect (SSLCAT_S, $sin)) {
- my $old_out = select (SSLCAT_S); $| = 1; select ($old_out);
- warn "connected to $dest_serv, $port" if $trace>3;
- return wantarray ? (1, undef) : 1; # Success
- }
- }
- $errs = "$0 $$: open_tcp_connection: failed `$dest_serv', $port ($!)\n";
- warn $errs if $trace;
- close SSLCAT_S;
- return wantarray ? (0, $errs) : 0; # Fail
-}
-
-### Open connection via standard web proxy, if one was defined
-### using set_proxy().
-
-sub open_proxy_tcp_connection {
- my ($dest_serv, $port) = @_;
- return open_tcp_connection($dest_serv, $port) if !$proxyhost;
-
- warn "Connect via proxy: $proxyhost:$proxyport" if $trace>2;
- my ($ret, $errs) = open_tcp_connection($proxyhost, $proxyport);
- return wantarray ? (0, $errs) : 0 if !$ret; # Connection fail
-
- warn "Asking proxy to connect to $dest_serv:$port" if $trace>2;
- #print SSLCAT_S "CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF";
- #my $line = ; # *** bug? Mixing stdio with syscall read?
- ($ret, $errs) =
- tcp_write_all("CONNECT $dest_serv:$port HTTP/1.0$proxyauth$CRLF$CRLF");
- return wantarray ? (0,$errs) : 0 if $errs;
- ($line, $errs) = tcp_read_until($CRLF . $CRLF, 1024);
- warn "Proxy response: $line" if $trace>2;
- return wantarray ? (0,$errs) : 0 if $errs;
- return wantarray ? (1,'') : 1; # Success
-}
-
-###
-### read and write helpers that block
-###
-
-sub debug_read {
- my ($replyr, $gotr) = @_;
- my $vm = $trace>2 && $linux_debug ?
- (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
- warn " got " . blength($$gotr) . ':'
- . blength($$replyr) . " bytes (VM=$vm).\n" if $trace == 3;
- warn " got `$$gotr' (" . blength($$gotr) . ':'
- . blength($$replyr) . " bytes, VM=$vm)\n" if $trace>3;
-}
-
-sub ssl_read_all {
- my ($ssl,$how_much) = @_;
- $how_much = 2000000000 unless $how_much;
- my ($got, $errs);
- my $reply = '';
-
- while ($how_much > 0) {
- $got = Net::SSLeay::read($ssl,
- ($how_much > 32768) ? 32768 : $how_much
- );
- last if $errs = print_errs('SSL_read');
- $how_much -= blength($got);
- debug_read(\$reply, \$got) if $trace>1;
- last if $got eq ''; # EOF
- $reply .= $got;
- }
-
- return wantarray ? ($reply, $errs) : $reply;
-}
-
-sub tcp_read_all {
- my ($how_much) = @_;
- $how_much = 2000000000 unless $how_much;
- my ($n, $got, $errs);
- my $reply = '';
-
- my $bsize = 0x10000;
- while ($how_much > 0) {
- $n = sysread(SSLCAT_S,$got, (($bsize < $how_much) ? $bsize : $how_much));
- warn "Read error: $! ($n,$how_much)" unless defined $n;
- last if !$n; # EOF
- $how_much -= $n;
- debug_read(\$reply, \$got) if $trace>1;
- $reply .= $got;
- }
- return wantarray ? ($reply, $errs) : $reply;
-}
-
-sub ssl_write_all {
- my $ssl = $_[0];
- my ($data_ref, $errs);
- if (ref $_[1]) {
- $data_ref = $_[1];
- } else {
- $data_ref = \$_[1];
- }
- my ($wrote, $written, $to_write) = (0,0, blength($$data_ref));
- my $vm = $trace>2 && $linux_debug ?
- (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
- warn " write_all VM at entry=$vm\n" if $trace>2;
- while ($to_write) {
- #sleep 1; # *** DEBUG
- warn "partial `$$data_ref'\n" if $trace>3;
- $wrote = write_partial($ssl, $written, $to_write, $$data_ref);
- if (defined $wrote && ($wrote > 0)) { # write_partial can return -1
- $written += $wrote;
- $to_write -= $wrote;
- } else {
- if (defined $wrote) {
- # check error conditions via SSL_get_error per man page
- if ( my $sslerr = get_error($ssl, $wrote) ) {
- my $errstr = ERR_error_string($sslerr);
- my $errname = '';
- SWITCH: {
- $sslerr == constant("ERROR_NONE") && do {
- # according to map page SSL_get_error(3ssl):
- # The TLS/SSL I/O operation completed.
- # This result code is returned if and only if ret > 0
- # so if we received it here complain...
- warn "ERROR_NONE unexpected with invalid return value!"
- if $trace;
- $errname = "SSL_ERROR_NONE";
- };
- $sslerr == constant("ERROR_WANT_READ") && do {
- # operation did not complete, call again later, so do not
- # set errname and empty err_que since this is a known
- # error that is expected but, we should continue to try
- # writing the rest of our data with same io call and params.
- warn "ERROR_WANT_READ (TLS/SSL Handshake, will continue)\n"
- if $trace;
- print_errs('SSL_write(want read)');
- last SWITCH;
- };
- $sslerr == constant("ERROR_WANT_WRITE") && do {
- # operation did not complete, call again later, so do not
- # set errname and empty err_que since this is a known
- # error that is expected but, we should continue to try
- # writing the rest of our data with same io call and params.
- warn "ERROR_WANT_WRITE (TLS/SSL Handshake, will continue)\n"
- if $trace;
- print_errs('SSL_write(want write)');
- last SWITCH;
- };
- $sslerr == constant("ERROR_ZERO_RETURN") && do {
- # valid protocol closure from other side, no longer able to
- # write, since there is no longer a session...
- warn "ERROR_ZERO_RETURN($wrote): TLS/SSLv3 Closure alert\n"
- if $trace;
- $errname = "SSL_ERROR_ZERO_RETURN";
- last SWITCH;
- };
- $sslerr == constant("ERROR_SSL") && do {
- # library/protocol error
- warn "ERROR_SSL($wrote): Library/Protocol error occured\n"
- if $trace;
- $errname = "SSL_ERROR_SSL";
- last SWITCH;
- };
- $sslerr == constant("ERROR_WANT_CONNECT") && do {
- # according to man page, should never happen on call to
- # SSL_write, so complain, but handle as known error type
- warn "ERROR_WANT_CONNECT: Unexpected error for SSL_write\n"
- if $trace;
- $errname = "SSL_ERROR_WANT_CONNECT";
- last SWITCH;
- };
- $sslerr == constant("ERROR_WANT_ACCEPT") && do {
- # according to man page, should never happen on call to
- # SSL_write, so complain, but handle as known error type
- warn "ERROR_WANT_ACCEPT: Unexpected error for SSL_write\n"
- if $trace;
- $errname = "SSL_ERROR_WANT_ACCEPT";
- last SWITCH;
- };
- $sslerr == constant("ERROR_WANT_X509_LOOKUP") && do {
- # operation did not complete: waiting on call back,
- # call again later, so do not set errname and empty err_que
- # since this is a known error that is expected but, we should
- # continue to try writing the rest of our data with same io
- # call parameter.
- warn "ERROR_WANT_X509_LOOKUP: (Cert Callback asked for in ".
- "SSL_write will contine)\n" if $trace;
- print_errs('SSL_write(want x509');
- last SWITCH;
- };
- $sslerr == constant("ERROR_SYSCALL") && do {
- # some IO error occured. According to man page:
- # Check retval, ERR, fallback to errno
- if ($wrote==0) { # EOF
- warn "ERROR_SYSCALL($wrote): EOF violates protocol.\n"
- if $trace;
- $errname = "SSL_ERROR_SYSCALL(EOF)";
- } else { # -1 underlying BIO error reported.
- # check error que for details, don't set errname since we
- # are directly appending to errs
- my $chkerrs = print_errs('SSL_write (syscall)');
- if ($chkerrs) {
- warn "ERROR_SYSCALL($wrote): Have errors\n" if $trace;
- $errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,".
- "$sslerr,$errstr,$!)\n$chkerrs";
- } else { # que was empty, use errno
- warn "ERROR_SYSCALL($wrote): errno($!)\n" if $trace;
- $errs .= "ssl_write_all $$: 1 - ERROR_SYSCALL($wrote,".
- "$sslerr) : $!\n";
- }
- }
- last SWITCH;
- };
- warn "Unhandled val $sslerr from SSL_get_error(SSL,$wrote)\n"
- if $trace;
- $errname = "SSL_ERROR_?($sslerr)";
- } # end of SWITCH block
- if ($errname) { # if we had an errname set add the error
- $errs .= "ssl_write_all $$: 1 - $errname($wrote,$sslerr,".
- "$errstr,$!)\n";
- }
- } # endif on have SSL_get_error val
- } # endif on $wrote defined
- } # endelse on $wrote > 0
- $vm = $trace>2 && $linux_debug ?
- (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
- warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2;
- # append remaining errors in que and report if errs exist
- $errs .= print_errs('SSL_write');
- return (wantarray ? (undef, $errs) : undef) if $errs;
- }
- return wantarray ? ($written, $errs) : $written;
-}
-
-sub tcp_write_all {
- my ($data_ref, $errs);
- if (ref $_[0]) {
- $data_ref = $_[0];
- } else {
- $data_ref = \$_[0];
- }
- my ($wrote, $written, $to_write) = (0,0, blength($$data_ref));
- my $vm = $trace>2 && $linux_debug ?
- (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
- warn " write_all VM at entry=$vm to_write=$to_write\n" if $trace>2;
- while ($to_write) {
- warn "partial `$$data_ref'\n" if $trace>3;
- $wrote = syswrite(SSLCAT_S, $$data_ref, $to_write, $written);
- if (defined $wrote && ($wrote > 0)) { # write_partial can return -1
- $written += $wrote;
- $to_write -= $wrote;
- } elsif (!defined($wrote)) {
- warn "tcp_write_all: $!";
- return (wantarray ? (undef, "$!") : undef);
- }
- $vm = $trace>2 && $linux_debug ?
- (split ' ', `cat /proc/$$/stat`)[22] : 'vm_unknown';
- warn " written so far $wrote:$written bytes (VM=$vm)\n" if $trace>2;
- }
- return wantarray ? ($written, '') : $written;
-}
-
-### from patch by Clinton Wong
-
-# ssl_read_until($ssl [, $delimit [, $max_length]])
-# if $delimit missing, use $/ if it exists, otherwise use \n
-# read until delimiter reached, up to $max_length chars if defined
-
-sub ssl_read_until ($;$$) {
- my ($ssl,$delim, $max_length) = @_;
-
- # guess the delim string if missing
- if ( ! defined $delim ) {
- if ( defined $/ && length $/ ) { $delim = $/ }
- else { $delim = "\n" } # Note: \n,$/ value depends on the platform
- }
- my $len_delim = length $delim;
-
- my ($got);
- my $reply = '';
-
- # If we have OpenSSL 0.9.6a or later, we can use SSL_peek to
- # speed things up.
- # N.B. 0.9.6a has security problems, so the support for
- # anything earlier than 0.9.6e will be dropped soon.
- if (&Net::SSLeay::OPENSSL_VERSION_NUMBER >= 0x0090601f) {
- $max_length = 2000000000 unless (defined $max_length);
- my ($pending, $peek_length, $found, $done);
- while (blength($reply) < $max_length and !$done) {
- #Block if necessary until we get some data
- $got = Net::SSLeay::peek($ssl,1);
- last if print_errs('SSL_peek');
-
- $pending = Net::SSLeay::pending($ssl) + blength($reply);
- $peek_length = ($pending > $max_length) ? $max_length : $pending;
- $peek_length -= blength($reply);
- $got = Net::SSLeay::peek($ssl, $peek_length);
- last if print_errs('SSL_peek');
- $peek_length = blength($got);
-
- #$found = index($got, $delim); # Old and broken
-
- # the delimiter may be split across two gets, so we prepend
- # a little from the last get onto this one before we check
- # for a match
- my $match;
- if(blength($reply) >= blength($delim) - 1) {
- #if what we've read so far is greater or equal
- #in length of what we need to prepatch
- $match = substr $reply, blength($reply) - blength($delim) + 1;
- } else {
- $match = $reply;
- }
-
- $match .= $got;
- $found = index($match, $delim);
-
- if ($found > -1) {
- #$got = Net::SSLeay::read($ssl, $found+$len_delim);
- #read up to the end of the delimiter
- $got = Net::SSLeay::read($ssl,
- $found + $len_delim
- - ((blength($match)) - (blength($got))));
- $done = 1;
- } else {
- $got = Net::SSLeay::read($ssl, $peek_length);
- $done = 1 if ($peek_length == $max_length - blength($reply));
- }
-
- last if print_errs('SSL_read');
- debug_read(\$reply, \$got) if $trace>1;
- last if $got eq '';
- $reply .= $got;
- }
- } else {
- while (!defined $max_length || length $reply < $max_length) {
- $got = Net::SSLeay::read($ssl,1); # one by one
- last if print_errs('SSL_read');
- debug_read(\$reply, \$got) if $trace>1;
- last if $got eq '';
- $reply .= $got;
- last if $len_delim
- && substr($reply, blength($reply)-$len_delim) eq $delim;
- }
- }
- return $reply;
-}
-
-sub tcp_read_until {
- my ($delim, $max_length) = @_;
-
- # guess the delim string if missing
- if ( ! defined $delim ) {
- if ( defined $/ && length $/ ) { $delim = $/ }
- else { $delim = "\n" } # Note: \n,$/ value depends on the platform
- }
- my $len_delim = length $delim;
-
- my ($n,$got);
- my $reply = '';
-
- while (!defined $max_length || length $reply < $max_length) {
- $n = sysread(SSLCAT_S, $got, 1); # one by one
- warn "tcp_read_until: $!" if !defined $n;
- debug_read(\$reply, \$got) if $trace>1;
- last if !$n; # EOF
- $reply .= $got;
- last if $len_delim
- && substr($reply, blength($reply)-$len_delim) eq $delim;
- }
- return $reply;
-}
-
-# ssl_read_CRLF($ssl [, $max_length])
-sub ssl_read_CRLF ($;$) { ssl_read_until($_[0], $CRLF, $_[1]) }
-sub tcp_read_CRLF { tcp_read_until($CRLF, $_[0]) }
-
-# ssl_write_CRLF($ssl, $message) writes $message and appends CRLF
-sub ssl_write_CRLF ($$) {
- # the next line uses less memory but might use more network packets
- return ssl_write_all($_[0], $_[1]) + ssl_write_all($_[0], $CRLF);
-
- # the next few lines do the same thing at the expense of memory, with
- # the chance that it will use less packets, since CRLF is in the original
- # message and won't be sent separately.
-
- #my $data_ref;
- #if (ref $_[1]) { $data_ref = $_[1] }
- # else { $data_ref = \$_[1] }
- #my $message = $$data_ref . $CRLF;
- #return ssl_write_all($_[0], \$message);
-}
-
-sub tcp_write_CRLF {
- # the next line uses less memory but might use more network packets
- return tcp_write_all($_[0]) + tcp_write_all($CRLF);
-
- # the next few lines do the same thing at the expense of memory, with
- # the chance that it will use less packets, since CRLF is in the original
- # message and won't be sent separately.
-
- #my $data_ref;
- #if (ref $_[1]) { $data_ref = $_[1] }
- # else { $data_ref = \$_[1] }
- #my $message = $$data_ref . $CRLF;
- #return tcp_write_all($_[0], \$message);
-}
-
-### Quickly print out with whom we're talking
-
-sub dump_peer_certificate ($) {
- my ($ssl) = @_;
- my $cert = get_peer_certificate($ssl);
- return if print_errs('get_peer_certificate');
- print "no cert defined\n" if !defined($cert);
- # Cipher=NONE with empty cert fix
- if (!defined($cert) || ($cert == 0)) {
- warn "cert = `$cert'\n" if $trace;
- return "Subject Name: undefined\nIssuer Name: undefined\n";
- } else {
- my $x = 'Subject Name: '
- . X509_NAME_oneline(X509_get_subject_name($cert)) . "\n"
- . 'Issuer Name: '
- . X509_NAME_oneline(X509_get_issuer_name($cert)) . "\n";
- Net::SSLeay::X509_free($cert);
- return $x;
- }
-}
-
-### Arrange some randomness for eay PRNG
-
-sub randomize (;$$$) {
- my ($rn_seed_file, $seed, $egd_path) = @_;
- my $rnsf = defined($rn_seed_file) && -r $rn_seed_file;
-
- $egd_path = '';
- $egd_path = $ENV{'EGD_PATH'} if $ENV{'EGD_PATH'};
-
- RAND_seed(rand() + $$); # Stir it with time and pid
-
- unless ($rnsf || -r $Net::SSLeay::random_device || $seed || -S $egd_path) {
- my $poll_retval = Net::SSLeay::RAND_poll();
- warn "Random number generator not seeded!!!" if $trace && !$poll_retval;
- }
-
- RAND_load_file($rn_seed_file, -s _) if $rnsf;
- RAND_seed($seed) if $seed;
- RAND_seed($ENV{RND_SEED}) if $ENV{RND_SEED};
- RAND_load_file($Net::SSLeay::random_device, $Net::SSLeay::how_random/8)
- if -r $Net::SSLeay::random_device;
-}
-
-sub new_x_ctx {
- if ($ssl_version == 2) {
- unless (exists &Net::SSLeay::CTX_v2_new) {
- warn "ssl_version has been set to 2, but this version of OpenSSL has been compiled without SSLv2 support";
- return undef;
- }
- $ctx = CTX_v2_new();
- }
- elsif ($ssl_version == 3) { $ctx = CTX_v3_new(); }
- elsif ($ssl_version == 10) { $ctx = CTX_tlsv1_new(); }
- elsif ($ssl_version == 11) {
- unless (exists &Net::SSLeay::CTX_tlsv1_1_new) {
- warn "ssl_version has been set to 11, but this version of OpenSSL has been compiled without TLSv1.1 support";
- return undef;
- }
- $ctx = CTX_tlsv1_1_new;
- }
- elsif ($ssl_version == 12) {
- unless (exists &Net::SSLeay::CTX_tlsv1_2_new) {
- warn "ssl_version has been set to 12, but this version of OpenSSL has been compiled without TLSv1.2 support";
- return undef;
- }
- $ctx = CTX_tlsv1_2_new;
- }
- else { $ctx = CTX_new(); }
- return $ctx;
-}
-
-###
-### Standard initialisation. Initialise the ssl library in the usual way
-### at most once. Override this if you need differnet initialisation
-### SSLeay_add_ssl_algorithms is also protected against multiple runs in SSLeay.xs
-### and is also mutex protected in threading perls
-###
-
-my $library_initialised;
-sub initialize
-{
- if (!$library_initialised)
- {
- load_error_strings(); # Some bloat, but I'm after ease of use
- SSLeay_add_ssl_algorithms(); # and debuggability.
- randomize();
- $library_initialised++;
- }
-}
-
-###
-### Basic request - response primitive (don't use for https)
-###
-
-sub sslcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert)
- my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_;
- my ($ctx, $ssl, $got, $errs, $written);
-
- ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
- return (wantarray ? (undef, $errs) : undef) unless $got;
-
- ### Do SSL negotiation stuff
-
- warn "Creating SSL $ssl_version context...\n" if $trace>2;
- initialize(); # Will init at most once
-
- $ctx = new_x_ctx();
- goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx;
-
- CTX_set_options($ctx, &OP_ALL);
- goto cleanup2 if $errs = print_errs('CTX_set_options');
-
- warn "Cert `$crt_path' given without key" if $crt_path && !$key_path;
- set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path;
-
- warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2;
- $ssl = new($ctx);
- goto cleanup if $errs = print_errs('SSL_new') or !$ssl;
-
- warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2;
- set_fd($ssl, fileno(SSLCAT_S));
- goto cleanup if $errs = print_errs('set_fd');
-
- warn "Entering SSL negotiation phase...\n" if $trace>2;
-
- if ($trace>2) {
- my $i = 0;
- my $p = '';
- my $cipher_list = 'Cipher list: ';
- $p=Net::SSLeay::get_cipher_list($ssl,$i);
- $cipher_list .= $p if $p;
- do {
- $i++;
- $cipher_list .= ', ' . $p if $p;
- $p=Net::SSLeay::get_cipher_list($ssl,$i);
- } while $p;
- $cipher_list .= '\n';
- warn $cipher_list;
- }
-
- $got = Net::SSLeay::connect($ssl);
- warn "SSLeay connect returned $got\n" if $trace>2;
- goto cleanup if $errs = print_errs('SSL_connect');
-
- my $server_cert = get_peer_certificate($ssl);
- print_errs('get_peer_certificate');
- if ($trace>1) {
- warn "Cipher `" . get_cipher($ssl) . "'\n";
- print_errs('get_ciper');
- warn dump_peer_certificate($ssl);
- }
-
- ### Connected. Exchange some data (doing repeated tries if necessary).
-
- warn "sslcat $$: sending " . blength($out_message) . " bytes...\n"
- if $trace==3;
- warn "sslcat $$: sending `$out_message' (" . blength($out_message)
- . " bytes)...\n" if $trace>3;
- ($written, $errs) = ssl_write_all($ssl, $out_message);
- goto cleanup unless $written;
-
- sleep $slowly if $slowly; # Closing too soon can abort broken servers
- CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server
-
- warn "waiting for reply...\n" if $trace>2;
- ($got, $errs) = ssl_read_all($ssl);
- warn "Got " . blength($got) . " bytes.\n" if $trace==3;
- warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
-
-cleanup:
- free ($ssl);
- $errs .= print_errs('SSL_free');
-cleanup2:
- CTX_free ($ctx);
- $errs .= print_errs('CTX_free');
- close SSLCAT_S;
- return wantarray ? ($got, $errs, $server_cert) : $got;
-}
-
-sub tcpcat { # address, port, message, $crt, $key --> reply / (reply,errs,cert)
- my ($dest_serv, $port, $out_message) = @_;
- my ($got, $errs, $written);
-
- ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
- return (wantarray ? (undef, $errs) : undef) unless $got;
-
- ### Connected. Exchange some data (doing repeated tries if necessary).
-
- warn "tcpcat $$: sending " . blength($out_message) . " bytes...\n"
- if $trace==3;
- warn "tcpcat $$: sending `$out_message' (" . blength($out_message)
- . " bytes)...\n" if $trace>3;
- ($written, $errs) = tcp_write_all($out_message);
- goto cleanup unless $written;
-
- sleep $slowly if $slowly; # Closing too soon can abort broken servers
- CORE::shutdown SSLCAT_S, 1; # Half close --> No more output, send EOF to server
-
- warn "waiting for reply...\n" if $trace>2;
- ($got, $errs) = tcp_read_all();
- warn "Got " . blength($got) . " bytes.\n" if $trace==3;
- warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
-
-cleanup:
- close SSLCAT_S;
- return wantarray ? ($got, $errs) : $got;
-}
-
-sub tcpxcat {
- my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_;
- if ($usessl) {
- return sslcat($site, $port, $req, $crt_path, $key_path);
- } else {
- return tcpcat($site, $port, $req);
- }
-}
-
-###
-### Basic request - response primitive, this is different from sslcat
-### because this does not shutdown the connection.
-###
-
-sub https_cat { # address, port, message --> returns reply / (reply,errs,cert)
- my ($dest_serv, $port, $out_message, $crt_path, $key_path) = @_;
- my ($ctx, $ssl, $got, $errs, $written);
-
- ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
- return (wantarray ? (undef, $errs) : undef) unless $got;
-
- ### Do SSL negotiation stuff
-
- warn "Creating SSL $ssl_version context...\n" if $trace>2;
- initialize();
-
- $ctx = new_x_ctx();
- goto cleanup2 if $errs = print_errs('CTX_new') or !$ctx;
-
- CTX_set_options($ctx, &OP_ALL);
- goto cleanup2 if $errs = print_errs('CTX_set_options');
-
- warn "Cert `$crt_path' given without key" if $crt_path && !$key_path;
- set_cert_and_key($ctx, $crt_path, $key_path) if $crt_path;
-
- warn "Creating SSL connection (context was '$ctx')...\n" if $trace>2;
- $ssl = new($ctx);
- goto cleanup if $errs = print_errs('SSL_new') or !$ssl;
-
- warn "Setting fd (ctx $ctx, con $ssl)...\n" if $trace>2;
- set_fd($ssl, fileno(SSLCAT_S));
- goto cleanup if $errs = print_errs('set_fd');
-
- warn "Entering SSL negotiation phase...\n" if $trace>2;
-
- if ($trace>2) {
- my $i = 0;
- my $p = '';
- my $cipher_list = 'Cipher list: ';
- $p=Net::SSLeay::get_cipher_list($ssl,$i);
- $cipher_list .= $p if $p;
- do {
- $i++;
- $cipher_list .= ', ' . $p if $p;
- $p=Net::SSLeay::get_cipher_list($ssl,$i);
- } while $p;
- $cipher_list .= '\n';
- warn $cipher_list;
- }
-
- $got = Net::SSLeay::connect($ssl);
- warn "SSLeay connect failed" if $trace>2 && $got==0;
- goto cleanup if $errs = print_errs('SSL_connect');
-
- my $server_cert = get_peer_certificate($ssl);
- print_errs('get_peer_certificate');
- if ($trace>1) {
- warn "Cipher `" . get_cipher($ssl) . "'\n";
- print_errs('get_ciper');
- warn dump_peer_certificate($ssl);
- }
-
- ### Connected. Exchange some data (doing repeated tries if necessary).
-
- warn "https_cat $$: sending " . blength($out_message) . " bytes...\n"
- if $trace==3;
- warn "https_cat $$: sending `$out_message' (" . blength($out_message)
- . " bytes)...\n" if $trace>3;
- ($written, $errs) = ssl_write_all($ssl, $out_message);
- goto cleanup unless $written;
-
- warn "waiting for reply...\n" if $trace>2;
- ($got, $errs) = ssl_read_all($ssl);
- warn "Got " . blength($got) . " bytes.\n" if $trace==3;
- warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
-
-cleanup:
- free ($ssl);
- $errs .= print_errs('SSL_free');
-cleanup2:
- CTX_free ($ctx);
- $errs .= print_errs('CTX_free');
- close SSLCAT_S;
- return wantarray ? ($got, $errs, $server_cert) : $got;
-}
-
-sub http_cat { # address, port, message --> returns reply / (reply,errs,cert)
- my ($dest_serv, $port, $out_message) = @_;
- my ($got, $errs, $written);
-
- ($got, $errs) = open_proxy_tcp_connection($dest_serv, $port);
- return (wantarray ? (undef, $errs) : undef) unless $got;
-
- ### Connected. Exchange some data (doing repeated tries if necessary).
-
- warn "http_cat $$: sending " . blength($out_message) . " bytes...\n"
- if $trace==3;
- warn "http_cat $$: sending `$out_message' (" . blength($out_message)
- . " bytes)...\n" if $trace>3;
- ($written, $errs) = tcp_write_all($out_message);
- goto cleanup unless $written;
-
- warn "waiting for reply...\n" if $trace>2;
- ($got, $errs) = tcp_read_all();
- warn "Got " . blength($got) . " bytes.\n" if $trace==3;
- warn "Got `$got' (" . blength($got) . " bytes)\n" if $trace>3;
-
-cleanup:
- close SSLCAT_S;
- return wantarray ? ($got, $errs) : $got;
-}
-
-sub httpx_cat {
- my ($usessl, $site, $port, $req, $crt_path, $key_path) = @_;
- warn "httpx_cat: usessl=$usessl ($site:$port)" if $trace;
- if ($usessl) {
- return https_cat($site, $port, $req, $crt_path, $key_path);
- } else {
- return http_cat($site, $port, $req);
- }
-}
-
-###
-### Easy set up of private key and certificate
-###
-
-sub set_cert_and_key ($$$) {
- my ($ctx, $cert_path, $key_path) = @_;
- my $errs = '';
- # Following will ask password unless private key is not encrypted
- CTX_use_PrivateKey_file ($ctx, $key_path, &FILETYPE_PEM);
- $errs .= print_errs("private key `$key_path' ($!)");
- CTX_use_certificate_file ($ctx, $cert_path, &FILETYPE_PEM);
- $errs .= print_errs("certificate `$cert_path' ($!)");
- return wantarray ? (undef, $errs) : ($errs eq '');
-}
-
-### Old deprecated API
-
-sub set_server_cert_and_key ($$$) { &set_cert_and_key }
-
-### Set up to use web proxy
-
-sub set_proxy ($$;**) {
- ($proxyhost, $proxyport, $proxyuser, $proxypass) = @_;
- require MIME::Base64 if $proxyuser;
- $proxyauth = $proxyuser
- ? $CRLF . 'Proxy-authorization: Basic '
- . MIME::Base64::encode("$proxyuser:$proxypass", '')
- : '';
-}
-
-###
-### Easy https manipulation routines
-###
-
-sub make_form {
- my (@fields) = @_;
- my $form;
- while (@fields) {
- my ($name, $data) = (shift(@fields), shift(@fields));
- $data =~ s/([^\w\-.\@\$ ])/sprintf("%%%2.2x",ord($1))/gse;
- $data =~ tr[ ][+];
- $form .= "$name=$data&";
- }
- chop $form;
- return $form;
-}
-
-sub make_headers {
- my (@headers) = @_;
- my $headers;
- while (@headers) {
- my $header = shift(@headers);
- my $value = shift(@headers);
- $header =~ s/:$//;
- $value =~ s/\x0d?\x0a$//; # because we add it soon, see below
- $headers .= "$header: $value$CRLF";
- }
- return $headers;
-}
-
-sub do_httpx3 {
- my ($method, $usessl, $site, $port, $path, $headers,
- $content, $mime_type, $crt_path, $key_path) = @_;
- my ($response, $page, $h,$v);
-
- my $len = blength($content);
- if ($len) {
- $mime_type = "application/x-www-form-urlencoded" unless $mime_type;
- $content = "Content-Type: $mime_type$CRLF"
- . "Content-Length: $len$CRLF$CRLF$content";
- } else {
- $content = "$CRLF$CRLF";
- }
- my $req = "$method $path HTTP/1.0$CRLF";
- unless (defined $headers && $headers =~ /^Host:/m) {
- $req .= "Host: $site";
- unless (($port == 80 && !$usessl) || ($port == 443 && $usessl)) {
- $req .= ":$port";
- }
- $req .= $CRLF;
- }
- $req .= (defined $headers ? $headers : '') . "Accept: */*$CRLF$content";
-
- warn "do_httpx3($method,$usessl,$site:$port)" if $trace;
- my ($http, $errs, $server_cert)
- = httpx_cat($usessl, $site, $port, $req, $crt_path, $key_path);
- return (undef, "HTTP/1.0 900 NET OR SSL ERROR$CRLF$CRLF$errs") if $errs;
-
- $http = '' if !defined $http;
- ($headers, $page) = split /\s?\n\s?\n/, $http, 2;
- warn "headers >$headers< page >>$page<< http >>>$http<<<" if $trace>1;
- ($response, $headers) = split /\s?\n/, $headers, 2;
- return ($page, $response, $headers, $server_cert);
-}
-
-sub do_https3 { splice(@_,1,0) = 1; do_httpx3; } # Legacy undocumented
-
-### do_https2() is a legacy version in the sense that it is unable
-### to return all instances of duplicate headers.
-
-sub do_httpx2 {
- my ($page, $response, $headers, $server_cert) = &do_httpx3;
- X509_free($server_cert) if defined $server_cert;
- return ($page, $response, defined $headers ?
- map( { ($h,$v)=/^(\S+)\:\s*(.*)$/; (uc($h),$v); }
- split(/\s?\n/, $headers)
- ) : ()
- );
-}
-
-sub do_https2 { splice(@_,1,0) = 1; do_httpx2; } # Legacy undocumented
-
-### Returns headers as a hash where multiple instances of same header
-### are handled correctly.
-
-sub do_httpx4 {
- my ($page, $response, $headers, $server_cert) = &do_httpx3;
- my %hr = ();
- for my $hh (split /\s?\n/, $headers) {
- my ($h,$v) = ($hh =~ /^(\S+)\:\s*(.*)$/);
- push @{$hr{uc($h)}}, $v;
- }
- return ($page, $response, \%hr, $server_cert);
-}
-
-sub do_https4 { splice(@_,1,0) = 1; do_httpx4; } # Legacy undocumented
-
-# https
-
-sub get_https { do_httpx2(GET => 1, @_) }
-sub post_https { do_httpx2(POST => 1, @_) }
-sub put_https { do_httpx2(PUT => 1, @_) }
-sub head_https { do_httpx2(HEAD => 1, @_) }
-
-sub get_https3 { do_httpx3(GET => 1, @_) }
-sub post_https3 { do_httpx3(POST => 1, @_) }
-sub put_https3 { do_httpx3(PUT => 1, @_) }
-sub head_https3 { do_httpx3(HEAD => 1, @_) }
-
-sub get_https4 { do_httpx4(GET => 1, @_) }
-sub post_https4 { do_httpx4(POST => 1, @_) }
-sub put_https4 { do_httpx4(PUT => 1, @_) }
-sub head_https4 { do_httpx4(HEAD => 1, @_) }
-
-# http
-
-sub get_http { do_httpx2(GET => 0, @_) }
-sub post_http { do_httpx2(POST => 0, @_) }
-sub put_http { do_httpx2(PUT => 0, @_) }
-sub head_http { do_httpx2(HEAD => 0, @_) }
-
-sub get_http3 { do_httpx3(GET => 0, @_) }
-sub post_http3 { do_httpx3(POST => 0, @_) }
-sub put_http3 { do_httpx3(PUT => 0, @_) }
-sub head_http3 { do_httpx3(HEAD => 0, @_) }
-
-sub get_http4 { do_httpx4(GET => 0, @_) }
-sub post_http4 { do_httpx4(POST => 0, @_) }
-sub put_http4 { do_httpx4(PUT => 0, @_) }
-sub head_http4 { do_httpx4(HEAD => 0, @_) }
-
-# Either https or http
-
-sub get_httpx { do_httpx2(GET => @_) }
-sub post_httpx { do_httpx2(POST => @_) }
-sub put_httpx { do_httpx2(PUT => @_) }
-sub head_httpx { do_httpx2(HEAD => @_) }
-
-sub get_httpx3 { do_httpx3(GET => @_) }
-sub post_httpx3 { do_httpx3(POST => @_) }
-sub put_httpx3 { do_httpx3(PUT => @_) }
-sub head_httpx3 { do_httpx3(HEAD => @_) }
-
-sub get_httpx4 { do_httpx4(GET => @_) }
-sub post_httpx4 { do_httpx4(POST => @_) }
-sub put_httpx4 { do_httpx4(PUT => @_) }
-sub head_httpx4 { do_httpx4(HEAD => @_) }
-
-### Legacy, don't use
-# ($page, $respone_or_err, %headers) = do_https(...);
-
-sub do_https {
- my ($site, $port, $path, $method, $headers,
- $content, $mime_type, $crt_path, $key_path) = @_;
-
- do_https2($method, $site, $port, $path, $headers,
- $content, $mime_type, $crt_path, $key_path);
-}
-
-1;
-__END__
-
diff --git a/software/Slic3r-1.3.0.64bit/lib/POSIX.pm b/software/Slic3r-1.3.0.64bit/lib/POSIX.pm
deleted file mode 100644
index a9710f0c..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/POSIX.pm
+++ /dev/null
@@ -1,543 +0,0 @@
-#line 1 "POSIX.pm"
-package POSIX;
-use strict;
-use warnings;
-
-our ($AUTOLOAD, %SIGRT);
-
-our $VERSION = '1.65';
-
-require XSLoader;
-
-use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD
- F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND
- O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
- O_WRONLY SEEK_CUR SEEK_END SEEK_SET
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG
- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID
- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR);
-
-my $loaded;
-
-sub import {
- my $pkg = shift;
-
- load_imports() unless $loaded++;
-
- # Grandfather old foo_h form to new :foo_h form
- s/^(?=\w+_h$)/:/ for my @list = @_;
-
- local $Exporter::ExportLevel = 1;
- Exporter::import($pkg,@list);
-}
-
-sub croak { require Carp; goto &Carp::croak }
-sub usage { croak "Usage: POSIX::$_[0]" }
-
-XSLoader::load();
-
-my %replacement = (
- atexit => 'END {}',
- atof => undef,
- atoi => undef,
- atol => undef,
- bsearch => \'not supplied',
- calloc => undef,
- clearerr => 'IO::Handle::clearerr',
- div => '/, % and int',
- execl => undef,
- execle => undef,
- execlp => undef,
- execv => undef,
- execve => undef,
- execvp => undef,
- fclose => 'IO::Handle::close',
- fdopen => 'IO::Handle::new_from_fd',
- feof => 'IO::Handle::eof',
- ferror => 'IO::Handle::error',
- fflush => 'IO::Handle::flush',
- fgetc => 'IO::Handle::getc',
- fgetpos => 'IO::Seekable::getpos',
- fgets => 'IO::Handle::gets',
- fileno => 'IO::Handle::fileno',
- fopen => 'IO::File::open',
- fprintf => 'printf',
- fputc => 'print',
- fputs => 'print',
- fread => 'read',
- free => undef,
- freopen => 'open',
- fscanf => '<> and regular expressions',
- fseek => 'IO::Seekable::seek',
- fsetpos => 'IO::Seekable::setpos',
- fsync => 'IO::Handle::sync',
- ftell => 'IO::Seekable::tell',
- fwrite => 'print',
- labs => 'abs',
- ldiv => '/, % and int',
- longjmp => 'die',
- malloc => undef,
- memchr => 'index()',
- memcmp => 'eq',
- memcpy => '=',
- memmove => '=',
- memset => 'x',
- offsetof => undef,
- putc => 'print',
- putchar => 'print',
- puts => 'print',
- qsort => 'sort',
- rand => \'non-portable, use Perl\'s rand instead',
- realloc => undef,
- scanf => '<> and regular expressions',
- setbuf => 'IO::Handle::setbuf',
- setjmp => 'eval {}',
- setvbuf => 'IO::Handle::setvbuf',
- siglongjmp => 'die',
- sigsetjmp => 'eval {}',
- srand => \'not supplied; refer to Perl\'s srand documentation',
- sscanf => 'regular expressions',
- strcat => '.=',
- strchr => 'index()',
- strcmp => 'eq',
- strcpy => '=',
- strcspn => 'regular expressions',
- strlen => 'length',
- strncat => '.=',
- strncmp => 'eq',
- strncpy => '=',
- strpbrk => undef,
- strrchr => 'rindex()',
- strspn => undef,
- strtok => undef,
- tmpfile => 'IO::File::new_tmpfile',
- ungetc => 'IO::Handle::ungetc',
- vfprintf => undef,
- vprintf => undef,
- vsprintf => undef,
-);
-
-my %reimpl = (
- assert => 'expr => croak "Assertion failed" if !$_[0]',
- tolower => 'string => lc($_[0])',
- toupper => 'string => uc($_[0])',
- closedir => 'dirhandle => CORE::closedir($_[0])',
- opendir => 'directory => my $dh; CORE::opendir($dh, $_[0]) ? $dh : undef',
- readdir => 'dirhandle => CORE::readdir($_[0])',
- rewinddir => 'dirhandle => CORE::rewinddir($_[0])',
- errno => '$! + 0',
- creat => 'filename, mode => &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1])',
- fcntl => 'filehandle, cmd, arg => CORE::fcntl($_[0], $_[1], $_[2])',
- getgrgid => 'gid => CORE::getgrgid($_[0])',
- getgrnam => 'name => CORE::getgrnam($_[0])',
- atan2 => 'x, y => CORE::atan2($_[0], $_[1])',
- cos => 'x => CORE::cos($_[0])',
- exp => 'x => CORE::exp($_[0])',
- fabs => 'x => CORE::abs($_[0])',
- log => 'x => CORE::log($_[0])',
- pow => 'x, exponent => $_[0] ** $_[1]',
- sin => 'x => CORE::sin($_[0])',
- sqrt => 'x => CORE::sqrt($_[0])',
- getpwnam => 'name => CORE::getpwnam($_[0])',
- getpwuid => 'uid => CORE::getpwuid($_[0])',
- kill => 'pid, sig => CORE::kill $_[1], $_[0]',
- raise => 'sig => CORE::kill $_[0], $$; # Is this good enough',
- getc => 'handle => CORE::getc($_[0])',
- getchar => 'CORE::getc(STDIN)',
- gets => 'scalar ',
- remove => 'filename => (-d $_[0]) ? CORE::rmdir($_[0]) : CORE::unlink($_[0])',
- rename => 'oldfilename, newfilename => CORE::rename($_[0], $_[1])',
- rewind => 'filehandle => CORE::seek($_[0],0,0)',
- abs => 'x => CORE::abs($_[0])',
- exit => 'status => CORE::exit($_[0])',
- getenv => 'name => $ENV{$_[0]}',
- system => 'command => CORE::system($_[0])',
- strerror => 'errno => BEGIN { local $!; require locale; locale->import} my $e = $_[0] + 0; local $!; $! = $e; "$!"',
- strstr => 'big, little => CORE::index($_[0], $_[1])',
- chmod => 'mode, filename => CORE::chmod($_[0], $_[1])',
- fstat => 'fd => CORE::open my $dup, "<&", $_[0]; CORE::stat($dup)', # Gross.
- mkdir => 'directoryname, mode => CORE::mkdir($_[0], $_[1])',
- stat => 'filename => CORE::stat($_[0])',
- umask => 'mask => CORE::umask($_[0])',
- wait => 'CORE::wait()',
- waitpid => 'pid, options => CORE::waitpid($_[0], $_[1])',
- gmtime => 'time => CORE::gmtime($_[0])',
- localtime => 'time => CORE::localtime($_[0])',
- time => 'CORE::time',
- alarm => 'seconds => CORE::alarm($_[0])',
- chdir => 'directory => CORE::chdir($_[0])',
- chown => 'uid, gid, filename => CORE::chown($_[0], $_[1], $_[2])',
- fork => 'CORE::fork',
- getegid => '$) + 0',
- geteuid => '$> + 0',
- getgid => '$( + 0',
- getgroups => 'my %seen; grep !$seen{$_}++, split " ", $)',
- getlogin => 'CORE::getlogin()',
- getpgrp => 'CORE::getpgrp',
- getpid => '$$',
- getppid => 'CORE::getppid',
- getuid => '$<',
- isatty => 'filehandle => -t $_[0]',
- link => 'oldfilename, newfilename => CORE::link($_[0], $_[1])',
- rmdir => 'directoryname => CORE::rmdir($_[0])',
- unlink => 'filename => CORE::unlink($_[0])',
- utime => 'filename, atime, mtime => CORE::utime($_[1], $_[2], $_[0])',
-);
-
-eval join ';', map "sub $_", keys %replacement, keys %reimpl;
-
-sub AUTOLOAD {
- my ($func) = ($AUTOLOAD =~ /.*::(.*)/);
-
- die "POSIX.xs has failed to load\n" if $func eq 'constant';
-
- if (my $code = $reimpl{$func}) {
- my ($num, $arg) = (0, '');
- if ($code =~ s/^(.*?) *=> *//) {
- $arg = $1;
- $num = 1 + $arg =~ tr/,//;
- }
- # no warnings to be consistent with the old implementation, where each
- # function was in its own little AutoSplit world:
- eval qq{ sub $func {
- no warnings;
- usage "$func($arg)" if \@_ != $num;
- $code
- } };
- no strict;
- goto &$AUTOLOAD;
- }
- if (exists $replacement{$func}) {
- my $how = $replacement{$func};
- croak "Unimplemented: POSIX::$func() is C-specific, stopped"
- unless defined $how;
- croak "Unimplemented: POSIX::$func() is $$how" if ref $how;
- croak "Use method $how() instead of POSIX::$func()" if $how =~ /::/;
- croak "Unimplemented: POSIX::$func() is C-specific: use $how instead";
- }
-
- constant($func);
-}
-
-sub perror {
- print STDERR "@_: " if @_;
- print STDERR $!,"\n";
-}
-
-sub printf {
- usage "printf(pattern, args...)" if @_ < 1;
- CORE::printf STDOUT @_;
-}
-
-sub sprintf {
- usage "sprintf(pattern, args...)" if @_ == 0;
- CORE::sprintf(shift,@_);
-}
-
-sub load_imports {
-my %default_export_tags = ( # cf. exports policy below
-
- assert_h => [qw(assert NDEBUG)],
-
- ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower
- isprint ispunct isspace isupper isxdigit tolower toupper)],
-
- dirent_h => [],
-
- errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN
- EALREADY EBADF EBADMSG EBUSY ECANCELED ECHILD ECONNABORTED
- ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST
- EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ EINPROGRESS
- EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE
- ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS
- ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG
- ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK ENOTCONN ENOTDIR
- ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP ENOTTY ENXIO
- EOPNOTSUPP EOTHER EOVERFLOW EOWNERDEAD EPERM EPFNOSUPPORT EPIPE
- EPROCLIM EPROTO EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE
- ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE
- ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV
- errno)],
-
- fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
- F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
- O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
- O_RDONLY O_RDWR O_TRUNC O_WRONLY
- creat
- SEEK_CUR SEEK_END SEEK_SET
- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
- S_IWGRP S_IWOTH S_IWUSR)],
-
- float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
- DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
- DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
- FLT_DIG FLT_EPSILON FLT_MANT_DIG
- FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
- FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
- FLT_RADIX FLT_ROUNDS
- LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
- LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
- LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
-
- grp_h => [],
-
- limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
- INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
- MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
- PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
- SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
- ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
- _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
- _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
- _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
- _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
-
- locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
- LC_MONETARY LC_NUMERIC LC_TIME NULL
- localeconv setlocale)],
-
- math_h => [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
- FP_SUBNORMAL FP_ZERO
- M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E
- M_PI M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2
- HUGE_VAL INFINITY NAN
- acos asin atan ceil cosh fabs floor fmod
- frexp ldexp log10 modf pow sinh tan tanh)],
-
- pwd_h => [],
-
- setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
-
- signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
- SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
- SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
- SIGPIPE %SIGRT SIGRTMIN SIGRTMAX SIGQUIT SIGSEGV SIGSTOP
- SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGBUS
- SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ
- SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK
- raise sigaction signal sigpending sigprocmask sigsuspend)],
-
- stdarg_h => [],
-
- stddef_h => [qw(NULL offsetof)],
-
- stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
- L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
- STREAM_MAX TMP_MAX stderr stdin stdout
- clearerr fclose fdopen feof ferror fflush fgetc fgetpos
- fgets fopen fprintf fputc fputs fread freopen
- fscanf fseek fsetpos ftell fwrite getchar gets
- perror putc putchar puts remove rewind
- scanf setbuf setvbuf sscanf tmpfile tmpnam
- ungetc vfprintf vprintf vsprintf)],
-
- stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
- abort atexit atof atoi atol bsearch calloc div
- free getenv labs ldiv malloc mblen mbstowcs mbtowc
- qsort realloc strtod strtol strtoul wcstombs wctomb)],
-
- string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
- strchr strcmp strcoll strcpy strcspn strerror strlen
- strncat strncmp strncpy strpbrk strrchr strspn strstr
- strtok strxfrm)],
-
- sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
- S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
- fstat mkfifo)],
-
- sys_times_h => [],
-
- sys_types_h => [],
-
- sys_utsname_h => [qw(uname)],
-
- sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
- WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
-
- termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
- B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
- CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
- ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
- INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
- PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
- TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
- TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
- VSTOP VSUSP VTIME
- cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
- tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
-
- time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
- difftime mktime strftime tzset tzname)],
-
- unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
- STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
- _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
- _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
- _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
- _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
- _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
- _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
- _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
- _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
- _exit access ctermid cuserid
- dup2 dup execl execle execlp execv execve execvp
- fpathconf fsync getcwd getegid geteuid getgid getgroups
- getpid getuid isatty lseek pathconf pause setgid setpgid
- setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
-
- utime_h => [],
-);
-
-if ($^O eq 'MSWin32') {
- $default_export_tags{winsock_h} = [qw(
- WSAEINTR WSAEBADF WSAEACCES WSAEFAULT WSAEINVAL WSAEMFILE WSAEWOULDBLOCK
- WSAEINPROGRESS WSAEALREADY WSAENOTSOCK WSAEDESTADDRREQ WSAEMSGSIZE
- WSAEPROTOTYPE WSAENOPROTOOPT WSAEPROTONOSUPPORT WSAESOCKTNOSUPPORT
- WSAEOPNOTSUPP WSAEPFNOSUPPORT WSAEAFNOSUPPORT WSAEADDRINUSE
- WSAEADDRNOTAVAIL WSAENETDOWN WSAENETUNREACH WSAENETRESET WSAECONNABORTED
- WSAECONNRESET WSAENOBUFS WSAEISCONN WSAENOTCONN WSAESHUTDOWN
- WSAETOOMANYREFS WSAETIMEDOUT WSAECONNREFUSED WSAELOOP WSAENAMETOOLONG
- WSAEHOSTDOWN WSAEHOSTUNREACH WSAENOTEMPTY WSAEPROCLIM WSAEUSERS
- WSAEDQUOT WSAESTALE WSAEREMOTE WSAEDISCON WSAENOMORE WSAECANCELLED
- WSAEINVALIDPROCTABLE WSAEINVALIDPROVIDER WSAEPROVIDERFAILEDINIT
- WSAEREFUSED)];
-}
-
-my %other_export_tags = ( # cf. exports policy below
- fenv_h => [qw(
- FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD fegetround fesetround
- )],
-
- math_h_c99 => [ @{$default_export_tags{math_h}}, qw(
- Inf NaN acosh asinh atanh cbrt copysign erf erfc exp2 expm1 fdim fma
- fmax fmin fpclassify hypot ilogb isfinite isgreater isgreaterequal
- isinf isless islessequal islessgreater isnan isnormal isunordered j0 j1
- jn lgamma log1p log2 logb lrint nan nearbyint nextafter nexttoward
- remainder remquo rint round scalbn signbit tgamma trunc y0 y1 yn
- )],
-
- stdlib_h_c99 => [ @{$default_export_tags{stdlib_h}}, 'strtold' ],
-
- nan_payload => [ qw(getpayload setpayload setpayloadsig issignaling) ],
-
- signal_h_si_code => [qw(
- ILL_ILLOPC ILL_ILLOPN ILL_ILLADR ILL_ILLTRP ILL_PRVOPC ILL_PRVREG
- ILL_COPROC ILL_BADSTK
- FPE_INTDIV FPE_INTOVF FPE_FLTDIV FPE_FLTOVF FPE_FLTUND
- FPE_FLTRES FPE_FLTINV FPE_FLTSUB
- SEGV_MAPERR SEGV_ACCERR
- BUS_ADRALN BUS_ADRERR BUS_OBJERR
- TRAP_BRKPT TRAP_TRACE
- CLD_EXITED CLD_KILLED CLD_DUMPED CLD_TRAPPED CLD_STOPPED CLD_CONTINUED
- POLL_IN POLL_OUT POLL_MSG POLL_ERR POLL_PRI POLL_HUP
- SI_USER SI_QUEUE SI_TIMER SI_ASYNCIO SI_MESGQ
- )],
-);
-
-# exports policy:
-# - new functions may not be added to @EXPORT, only to @EXPORT_OK
-# - new SHOUTYCONSTANTS are OK to add to @EXPORT
-
-{
- # De-duplicate the export list:
- my ( %export, %export_ok );
- @export {map {@$_} values %default_export_tags} = ();
- @export_ok{map {@$_} values %other_export_tags} = ();
- # Doing the de-dup with a temporary hash has the advantage that the SVs in
- # @EXPORT are actually shared hash key scalars, which will save some memory.
- our @EXPORT = keys %export;
-
- # you do not want to add symbols to the following list. add a new tag instead
- our @EXPORT_OK = (qw(close lchown nice open pipe read sleep times write
- printf sprintf lround),
- # lround() should really be in the :math_h_c99 tag, but
- # we're too far into the 5.24 code freeze for that to be
- # done now. This can be revisited in the 5.25.x cycle.
- grep {!exists $export{$_}} keys %reimpl, keys %replacement, keys %export_ok);
-
- our %EXPORT_TAGS = ( %default_export_tags, %other_export_tags );
-}
-
-require Exporter;
-}
-
-package POSIX::SigAction;
-
-sub new { bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0, SAFE => 0}, $_[0] }
-sub handler { $_[0]->{HANDLER} = $_[1] if @_ > 1; $_[0]->{HANDLER} };
-sub mask { $_[0]->{MASK} = $_[1] if @_ > 1; $_[0]->{MASK} };
-sub flags { $_[0]->{FLAGS} = $_[1] if @_ > 1; $_[0]->{FLAGS} };
-sub safe { $_[0]->{SAFE} = $_[1] if @_ > 1; $_[0]->{SAFE} };
-
-{
-package POSIX::SigSet;
-# This package is here entirely to make sure that POSIX::SigSet is seen by the
-# PAUSE indexer, so that it will always be clearly indexed in core. This is to
-# prevent the accidental case where a third-party distribution can accidentally
-# claim the POSIX::SigSet package, as occurred in 2011-12. -- rjbs, 2011-12-30
-}
-
-package POSIX::SigRt;
-
-require Tie::Hash;
-
-our @ISA = 'Tie::StdHash';
-
-our ($_SIGRTMIN, $_SIGRTMAX, $_sigrtn);
-
-our $SIGACTION_FLAGS = 0;
-
-sub _init {
- $_SIGRTMIN = &POSIX::SIGRTMIN;
- $_SIGRTMAX = &POSIX::SIGRTMAX;
- $_sigrtn = $_SIGRTMAX - $_SIGRTMIN;
-}
-
-sub _croak {
- &_init unless defined $_sigrtn;
- die "POSIX::SigRt not available" unless defined $_sigrtn && $_sigrtn > 0;
-}
-
-sub _getsig {
- &_croak;
- my $rtsig = $_[0];
- # Allow (SIGRT)?MIN( + n)?, a common idiom when doing these things in C.
- $rtsig = $_SIGRTMIN + ($1 || 0)
- if $rtsig =~ /^(?:(?:SIG)?RT)?MIN(\s*\+\s*(\d+))?$/;
- return $rtsig;
-}
-
-sub _exist {
- my $rtsig = _getsig($_[1]);
- my $ok = $rtsig >= $_SIGRTMIN && $rtsig <= $_SIGRTMAX;
- ($rtsig, $ok);
-}
-
-sub _check {
- my ($rtsig, $ok) = &_exist;
- die "No POSIX::SigRt signal $_[1] (valid range SIGRTMIN..SIGRTMAX, or $_SIGRTMIN..$_SIGRTMAX)"
- unless $ok;
- return $rtsig;
-}
-
-sub new {
- my ($rtsig, $handler, $flags) = @_;
- my $sigset = POSIX::SigSet->new($rtsig);
- my $sigact = POSIX::SigAction->new($handler, $sigset, $flags);
- POSIX::sigaction($rtsig, $sigact);
-}
-
-sub EXISTS { &_exist }
-sub FETCH { my $rtsig = &_check;
- my $oa = POSIX::SigAction->new();
- POSIX::sigaction($rtsig, undef, $oa);
- return $oa->{HANDLER} }
-sub STORE { my $rtsig = &_check; new($rtsig, $_[2], $SIGACTION_FLAGS) }
-sub DELETE { delete $SIG{ &_check } }
-sub CLEAR { &_exist; delete @SIG{ &POSIX::SIGRTMIN .. &POSIX::SIGRTMAX } }
-sub SCALAR { &_croak; $_sigrtn + 1 }
-
-tie %POSIX::SIGRT, 'POSIX::SigRt';
-# and the expression on the line above is true, so we return true.
diff --git a/software/Slic3r-1.3.0.64bit/lib/Params/Util.pm b/software/Slic3r-1.3.0.64bit/lib/Params/Util.pm
deleted file mode 100644
index 8a44b004..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Params/Util.pm
+++ /dev/null
@@ -1,371 +0,0 @@
-#line 1 "Params/Util.pm"
-package Params::Util;
-
-#line 57
-
-use 5.00503;
-use strict;
-require overload;
-require Exporter;
-require Scalar::Util;
-require DynaLoader;
-
-use vars qw{$VERSION @ISA @EXPORT_OK %EXPORT_TAGS};
-
-$VERSION = '1.07';
-@ISA = qw{
- Exporter
- DynaLoader
-};
-@EXPORT_OK = qw{
- _STRING _IDENTIFIER
- _CLASS _CLASSISA _SUBCLASS _DRIVER _CLASSDOES
- _NUMBER _POSINT _NONNEGINT
- _SCALAR _SCALAR0
- _ARRAY _ARRAY0 _ARRAYLIKE
- _HASH _HASH0 _HASHLIKE
- _CODE _CODELIKE
- _INVOCANT _REGEX _INSTANCE _INSTANCEDOES
- _SET _SET0
- _HANDLE
-};
-%EXPORT_TAGS = ( ALL => \@EXPORT_OK );
-
-eval {
- local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY};
- bootstrap Params::Util $VERSION;
- 1;
-} unless $ENV{PERL_PARAMS_UTIL_PP};
-
-# Use a private pure-perl copy of looks_like_number if the version of
-# Scalar::Util is old (for whatever reason).
-my $SU = eval "$Scalar::Util::VERSION" || 0;
-if ( $SU >= 1.18 ) {
- Scalar::Util->import('looks_like_number');
-} else {
- eval <<'END_PERL';
-sub looks_like_number {
- local $_ = shift;
-
- # checks from perlfaq4
- return 0 if !defined($_);
- if (ref($_)) {
- return overload::Overloaded($_) ? defined(0 + $_) : 0;
- }
- return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer
- return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float
- return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i);
-
- 0;
-}
-END_PERL
-}
-
-
-
-
-
-#####################################################################
-# Param Checking Functions
-
-#line 147
-
-eval <<'END_PERL' unless defined &_STRING;
-sub _STRING ($) {
- (defined $_[0] and ! ref $_[0] and length($_[0])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 166
-
-eval <<'END_PERL' unless defined &_IDENTIFIER;
-sub _IDENTIFIER ($) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*\z/s) ? $_[0] : undef;
-}
-END_PERL
-
-#line 189
-
-eval <<'END_PERL' unless defined &_CLASS;
-sub _CLASS ($) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef;
-}
-END_PERL
-
-#line 215
-
-eval <<'END_PERL' unless defined &_CLASSISA;
-sub _CLASSISA ($$) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->isa($_[1])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 230
-
-eval <<'END_PERL' unless defined &_CLASSDOES;
-sub _CLASSDOES ($$) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0]->DOES($_[1])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 256
-
-eval <<'END_PERL' unless defined &_SUBCLASS;
-sub _SUBCLASS ($$) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s and $_[0] ne $_[1] and $_[0]->isa($_[1])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 278
-
-eval <<'END_PERL' unless defined &_NUMBER;
-sub _NUMBER ($) {
- ( defined $_[0] and ! ref $_[0] and looks_like_number($_[0]) )
- ? $_[0]
- : undef;
-}
-END_PERL
-
-#line 302
-
-eval <<'END_PERL' unless defined &_POSINT;
-sub _POSINT ($) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[1-9]\d*$/) ? $_[0] : undef;
-}
-END_PERL
-
-#line 332
-
-eval <<'END_PERL' unless defined &_NONNEGINT;
-sub _NONNEGINT ($) {
- (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^(?:0|[1-9]\d*)$/) ? $_[0] : undef;
-}
-END_PERL
-
-#line 354
-
-eval <<'END_PERL' unless defined &_SCALAR;
-sub _SCALAR ($) {
- (ref $_[0] eq 'SCALAR' and defined ${$_[0]} and ${$_[0]} ne '') ? $_[0] : undef;
-}
-END_PERL
-
-#line 376
-
-eval <<'END_PERL' unless defined &_SCALAR0;
-sub _SCALAR0 ($) {
- ref $_[0] eq 'SCALAR' ? $_[0] : undef;
-}
-END_PERL
-
-#line 398
-
-eval <<'END_PERL' unless defined &_ARRAY;
-sub _ARRAY ($) {
- (ref $_[0] eq 'ARRAY' and @{$_[0]}) ? $_[0] : undef;
-}
-END_PERL
-
-#line 421
-
-eval <<'END_PERL' unless defined &_ARRAY0;
-sub _ARRAY0 ($) {
- ref $_[0] eq 'ARRAY' ? $_[0] : undef;
-}
-END_PERL
-
-#line 437
-
-eval <<'END_PERL' unless defined &_ARRAYLIKE;
-sub _ARRAYLIKE {
- (defined $_[0] and ref $_[0] and (
- (Scalar::Util::reftype($_[0]) eq 'ARRAY')
- or
- overload::Method($_[0], '@{}')
- )) ? $_[0] : undef;
-}
-END_PERL
-
-#line 463
-
-eval <<'END_PERL' unless defined &_HASH;
-sub _HASH ($) {
- (ref $_[0] eq 'HASH' and scalar %{$_[0]}) ? $_[0] : undef;
-}
-END_PERL
-
-#line 485
-
-eval <<'END_PERL' unless defined &_HASH0;
-sub _HASH0 ($) {
- ref $_[0] eq 'HASH' ? $_[0] : undef;
-}
-END_PERL
-
-#line 501
-
-eval <<'END_PERL' unless defined &_HASHLIKE;
-sub _HASHLIKE {
- (defined $_[0] and ref $_[0] and (
- (Scalar::Util::reftype($_[0]) eq 'HASH')
- or
- overload::Method($_[0], '%{}')
- )) ? $_[0] : undef;
-}
-END_PERL
-
-#line 524
-
-eval <<'END_PERL' unless defined &_CODE;
-sub _CODE ($) {
- ref $_[0] eq 'CODE' ? $_[0] : undef;
-}
-END_PERL
-
-#line 572
-
-eval <<'END_PERL' unless defined &_CODELIKE;
-sub _CODELIKE($) {
- (
- (Scalar::Util::reftype($_[0])||'') eq 'CODE'
- or
- Scalar::Util::blessed($_[0]) and overload::Method($_[0],'&{}')
- )
- ? $_[0] : undef;
-}
-END_PERL
-
-#line 595
-
-eval <<'END_PERL' unless defined &_INVOCANT;
-sub _INVOCANT($) {
- (defined $_[0] and
- (defined Scalar::Util::blessed($_[0])
- or
- # We used to check for stash definedness, but any class-like name is a
- # valid invocant for UNIVERSAL methods, so we stopped. -- rjbs, 2006-07-02
- Params::Util::_CLASS($_[0]))
- ) ? $_[0] : undef;
-}
-END_PERL
-
-#line 620
-
-eval <<'END_PERL' unless defined &_INSTANCE;
-sub _INSTANCE ($$) {
- (Scalar::Util::blessed($_[0]) and $_[0]->isa($_[1])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 635
-
-eval <<'END_PERL' unless defined &_INSTANCEDOES;
-sub _INSTANCEDOES ($$) {
- (Scalar::Util::blessed($_[0]) and $_[0]->DOES($_[1])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 653
-
-eval <<'END_PERL' unless defined &_REGEX;
-sub _REGEX ($) {
- (defined $_[0] and 'Regexp' eq ref($_[0])) ? $_[0] : undef;
-}
-END_PERL
-
-#line 678
-
-eval <<'END_PERL' unless defined &_SET;
-sub _SET ($$) {
- my $set = shift;
- _ARRAY($set) or return undef;
- foreach my $item ( @$set ) {
- _INSTANCE($item,$_[0]) or return undef;
- }
- $set;
-}
-END_PERL
-
-#line 708
-
-eval <<'END_PERL' unless defined &_SET0;
-sub _SET0 ($$) {
- my $set = shift;
- _ARRAY0($set) or return undef;
- foreach my $item ( @$set ) {
- _INSTANCE($item,$_[0]) or return undef;
- }
- $set;
-}
-END_PERL
-
-#line 736
-
-# We're doing this longhand for now. Once everything is perfect,
-# we'll compress this into something that compiles more efficiently.
-# Further, testing file handles is not something that is generally
-# done millions of times, so doing it slowly is not a big speed hit.
-eval <<'END_PERL' unless defined &_HANDLE;
-sub _HANDLE {
- my $it = shift;
-
- # It has to be defined, of course
- unless ( defined $it ) {
- return undef;
- }
-
- # Normal globs are considered to be file handles
- if ( ref $it eq 'GLOB' ) {
- return $it;
- }
-
- # Check for a normal tied filehandle
- # Side Note: 5.5.4's tied() and can() doesn't like getting undef
- if ( tied($it) and tied($it)->can('TIEHANDLE') ) {
- return $it;
- }
-
- # There are no other non-object handles that we support
- unless ( Scalar::Util::blessed($it) ) {
- return undef;
- }
-
- # Check for a common base classes for conventional IO::Handle object
- if ( $it->isa('IO::Handle') ) {
- return $it;
- }
-
-
- # Check for tied file handles using Tie::Handle
- if ( $it->isa('Tie::Handle') ) {
- return $it;
- }
-
- # IO::Scalar is not a proper seekable, but it is valid is a
- # regular file handle
- if ( $it->isa('IO::Scalar') ) {
- return $it;
- }
-
- # Yet another special case for IO::String, which refuses (for now
- # anyway) to become a subclass of IO::Handle.
- if ( $it->isa('IO::String') ) {
- return $it;
- }
-
- # This is not any sort of object we know about
- return undef;
-}
-END_PERL
-
-#line 817
-
-eval <<'END_PERL' unless defined &_DRIVER;
-sub _DRIVER ($$) {
- (defined _CLASS($_[0]) and eval "require $_[0];" and ! $@ and $_[0]->isa($_[1]) and $_[0] ne $_[1]) ? $_[0] : undef;
-}
-END_PERL
-
-1;
-
-#line 867
diff --git a/software/Slic3r-1.3.0.64bit/lib/Pod/Escapes.pm b/software/Slic3r-1.3.0.64bit/lib/Pod/Escapes.pm
deleted file mode 100644
index 70035f30..00000000
--- a/software/Slic3r-1.3.0.64bit/lib/Pod/Escapes.pm
+++ /dev/null
@@ -1,572 +0,0 @@
-#line 1 "Pod/Escapes.pm"
-package Pod::Escapes;
-use strict;
-use warnings;
-use 5.006;
-
-use vars qw(
- %Code2USASCII
- %Name2character
- %Name2character_number
- %Latin1Code_to_fallback
- %Latin1Char_to_fallback
- $FAR_CHAR
- $FAR_CHAR_NUMBER
- $NOT_ASCII
- @ISA $VERSION @EXPORT_OK %EXPORT_TAGS
-);
-
-require Exporter;
-@ISA = ('Exporter');
-$VERSION = '1.07';
-@EXPORT_OK = qw(
- %Code2USASCII
- %Name2character
- %Name2character_number
- %Latin1Code_to_fallback
- %Latin1Char_to_fallback
- e2char
- e2charnum
-);
-%EXPORT_TAGS = ('ALL' => \@EXPORT_OK);
-
-#==========================================================================
-
-$FAR_CHAR = "?" unless defined $FAR_CHAR;
-$FAR_CHAR_NUMBER = ord($FAR_CHAR) unless defined $FAR_CHAR_NUMBER;
-
-$NOT_ASCII = 'A' ne chr(65) unless defined $NOT_ASCII;
-
-#--------------------------------------------------------------------------
-sub e2char {
- my $in = $_[0];
- return undef unless defined $in and length $in;
-
- # Convert to decimal:
- if($in =~ m/^(0[0-7]*)$/s ) {
- $in = oct $in;
- } elsif($in =~ m/^0?x([0-9a-fA-F]+)$/s ) {
- $in = hex $1;
- } # else it's decimal, or named
-
- if($in =~ m/^\d+$/s) {
- if($] < 5.007 and $in > 255) { # can't be trusted with Unicode
- return $FAR_CHAR;
- } elsif ($] >= 5.007003) {
- return chr(utf8::unicode_to_native($in));
- } elsif ($NOT_ASCII) {
- return $Code2USASCII{$in} # so "65" => "A" everywhere
- || $Latin1Code_to_fallback{$in} # Fallback.
- || $FAR_CHAR; # Fall further back
- } else {
- return chr($in);
- }
- } else {
- return $Name2character{$in}; # returns undef if unknown
- }
-}
-
-#--------------------------------------------------------------------------
-sub e2charnum {
- my $in = $_[0];
- return undef unless defined $in and length $in;
-
- # Convert to decimal:
- if($in =~ m/^(0[0-7]*)$/s ) {
- $in = oct $in;
- } elsif($in =~ m/^0?x([0-9a-fA-F]+)$/s ) {
- $in = hex $1;
- } # else it's decimal, or named
-
- if($in =~ m/^[0-9]+$/s) {
- return 0 + $in;
- } else {
- return $Name2character_number{$in}; # returns undef if unknown
- }
-}
-
-#--------------------------------------------------------------------------
-
-%Code2USASCII = (
-# mostly generated by
-# perl -e "printf qq{ \x25 3s, '\x25s',\n}, $_, chr($_) foreach (32 .. 126)"
- 32, ' ',
- 33, '!',
- 34, '"',
- 35, '#',
- 36, '$',
- 37, '%',
- 38, '&',
- 39, "'", #!
- 40, '(',
- 41, ')',
- 42, '*',
- 43, '+',
- 44, ',',
- 45, '-',
- 46, '.',
- 47, '/',
- 48, '0',
- 49, '1',
- 50, '2',
- 51, '3',
- 52, '4',
- 53, '5',
- 54, '6',
- 55, '7',
- 56, '8',
- 57, '9',
- 58, ':',
- 59, ';',
- 60, '<',
- 61, '=',
- 62, '>',
- 63, '?',
- 64, '@',
- 65, 'A',
- 66, 'B',
- 67, 'C',
- 68, 'D',
- 69, 'E',
- 70, 'F',
- 71, 'G',
- 72, 'H',
- 73, 'I',
- 74, 'J',
- 75, 'K',
- 76, 'L',
- 77, 'M',
- 78, 'N',
- 79, 'O',
- 80, 'P',
- 81, 'Q',
- 82, 'R',
- 83, 'S',
- 84, 'T',
- 85, 'U',
- 86, 'V',
- 87, 'W',
- 88, 'X',
- 89, 'Y',
- 90, 'Z',
- 91, '[',
- 92, "\\", #!
- 93, ']',
- 94, '^',
- 95, '_',
- 96, '`',
- 97, 'a',
- 98, 'b',
- 99, 'c',
- 100, 'd',
- 101, 'e',
- 102, 'f',
- 103, 'g',
- 104, 'h',
- 105, 'i',
- 106, 'j',
- 107, 'k',
- 108, 'l',
- 109, 'm',
- 110, 'n',
- 111, 'o',
- 112, 'p',
- 113, 'q',
- 114, 'r',
- 115, 's',
- 116, 't',
- 117, 'u',
- 118, 'v',
- 119, 'w',
- 120, 'x',
- 121, 'y',
- 122, 'z',
- 123, '{',
- 124, '|',
- 125, '}',
- 126, '~',
-);
-
-#--------------------------------------------------------------------------
-
-%Latin1Code_to_fallback = ();
-@Latin1Code_to_fallback{0xA0 .. 0xFF} = (
-# Copied from Text/Unidecode/x00.pm:
-
-' ', qq{!}, qq{C/}, 'PS', qq{\$?}, qq{Y=}, qq{|}, 'SS', qq{"}, qq{(c)}, 'a', qq{<<}, qq{!}, "", qq{(r)}, qq{-},
-'deg', qq{+-}, '2', '3', qq{'}, 'u', 'P', qq{*}, qq{,}, '1', 'o', qq{>>}, qq{1/4}, qq{1/2}, qq{3/4}, qq{?},
-'A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I',
-'D', 'N', 'O', 'O', 'O', 'O', 'O', 'x', 'O', 'U', 'U', 'U', 'U', 'U', 'Th', 'ss',
-'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i',
-'d', 'n', 'o', 'o', 'o', 'o', 'o', qq{/}, 'o', 'u', 'u', 'u', 'u', 'y', 'th', 'y',
-
-);
-
-{
- # Now stuff %Latin1Char_to_fallback:
- %Latin1Char_to_fallback = ();
- my($k,$v);
- while( ($k,$v) = each %Latin1Code_to_fallback) {
- $Latin1Char_to_fallback{chr $k} = $v;
- #print chr($k), ' => ', $v, "\n";
- }
-}
-
-#--------------------------------------------------------------------------
-
-%Name2character_number = (
- # General XML/XHTML:
- 'lt' => 60,
- 'gt' => 62,
- 'quot' => 34,
- 'amp' => 38,
- 'apos' => 39,
-
- # POD-specific:
- 'sol' => 47,
- 'verbar' => 124,
-
- 'lchevron' => 171, # legacy for laquo
- 'rchevron' => 187, # legacy for raquo
-
- # Remember, grave looks like \ (as in virtu\)
- # acute looks like / (as in re/sume/)
- # circumflex looks like ^ (as in papier ma^che/)
- # umlaut/dieresis looks like " (as in nai"ve, Chloe")
-
- # From the XHTML 1 .ent files:
- 'nbsp' , 160,
- 'iexcl' , 161,
- 'cent' , 162,
- 'pound' , 163,
- 'curren' , 164,
- 'yen' , 165,
- 'brvbar' , 166,
- 'sect' , 167,
- 'uml' , 168,
- 'copy' , 169,
- 'ordf' , 170,
- 'laquo' , 171,
- 'not' , 172,
- 'shy' , 173,
- 'reg' , 174,
- 'macr' , 175,
- 'deg' , 176,
- 'plusmn' , 177,
- 'sup2' , 178,
- 'sup3' , 179,
- 'acute' , 180,
- 'micro' , 181,
- 'para' , 182,
- 'middot' , 183,
- 'cedil' , 184,
- 'sup1' , 185,
- 'ordm' , 186,
- 'raquo' , 187,
- 'frac14' , 188,
- 'frac12' , 189,
- 'frac34' , 190,
- 'iquest' , 191,
- 'Agrave' , 192,
- 'Aacute' , 193,
- 'Acirc' , 194,
- 'Atilde' , 195,
- 'Auml' , 196,
- 'Aring' , 197,
- 'AElig' , 198,
- 'Ccedil' , 199,
- 'Egrave' , 200,
- 'Eacute' , 201,
- 'Ecirc' , 202,
- 'Euml' , 203,
- 'Igrave' , 204,
- 'Iacute' , 205,
- 'Icirc' , 206,
- 'Iuml' , 207,
- 'ETH' , 208,
- 'Ntilde' , 209,
- 'Ograve' , 210,
- 'Oacute' , 211,
- 'Ocirc' , 212,
- 'Otilde' , 213,
- 'Ouml' , 214,
- 'times' , 215,
- 'Oslash' , 216,
- 'Ugrave' , 217,
- 'Uacute' , 218,
- 'Ucirc' , 219,
- 'Uuml' , 220,
- 'Yacute' , 221,
- 'THORN' , 222,
- 'szlig' , 223,
- 'agrave' , 224,
- 'aacute' , 225,
- 'acirc' , 226,
- 'atilde' , 227,
- 'auml' , 228,
- 'aring' , 229,
- 'aelig' , 230,
- 'ccedil' , 231,
- 'egrave' , 232,
- 'eacute' , 233,
- 'ecirc' , 234,
- 'euml' , 235,
- 'igrave' , 236,
- 'iacute' , 237,
- 'icirc' , 238,
- 'iuml' , 239,
- 'eth' , 240,
- 'ntilde' , 241,
- 'ograve' , 242,
- 'oacute' , 243,
- 'ocirc' , 244,
- 'otilde' , 245,
- 'ouml' , 246,
- 'divide' , 247,
- 'oslash' , 248,
- 'ugrave' , 249,
- 'uacute' , 250,
- 'ucirc' , 251,
- 'uuml' , 252,
- 'yacute' , 253,
- 'thorn' , 254,
- 'yuml' , 255,
-
- 'fnof' , 402,
- 'Alpha' , 913,
- 'Beta' , 914,
- 'Gamma' , 915,
- 'Delta' , 916,
- 'Epsilon' , 917,
- 'Zeta' , 918,
- 'Eta' , 919,
- 'Theta' , 920,
- 'Iota' , 921,
- 'Kappa' , 922,
- 'Lambda' , 923,
- 'Mu' , 924,
- 'Nu' , 925,
- 'Xi' , 926,
- 'Omicron' , 927,
- 'Pi' , 928,
- 'Rho' , 929,
- 'Sigma' , 931,
- 'Tau' , 932,
- 'Upsilon' , 933,
- 'Phi' , 934,
- 'Chi' , 935,
- 'Psi' , 936,
- 'Omega' , 937,
- 'alpha' , 945,
- 'beta' , 946,
- 'gamma' , 947,
- 'delta' , 948,
- 'epsilon' , 949,
- 'zeta' , 950,
- 'eta' , 951,
- 'theta' , 952,
- 'iota' , 953,
- 'kappa' , 954,
- 'lambda' , 955,
- 'mu' , 956,
- 'nu' , 957,
- 'xi' , 958,
- 'omicron' , 959,
- 'pi' , 960,
- 'rho' , 961,
- 'sigmaf' , 962,
- 'sigma' , 963,
- 'tau' , 964,
- 'upsilon' , 965,
- 'phi' , 966,
- 'chi' , 967,
- 'psi' , 968,
- 'omega' , 969,
- 'thetasym' , 977,
- 'upsih' , 978,
- 'piv' , 982,
- 'bull' , 8226,
- 'hellip' , 8230,
- 'prime' , 8242,
- 'Prime' , 8243,
- 'oline' , 8254,
- 'frasl' , 8260,
- 'weierp' , 8472,
- 'image' , 8465,
- 'real' , 8476,
- 'trade' , 8482,
- 'alefsym' , 8501,
- 'larr' , 8592,
- 'uarr' , 8593,
- 'rarr' , 8594,
- 'darr' , 8595,
- 'harr' , 8596,
- 'crarr' , 8629,
- 'lArr' , 8656,
- 'uArr' , 8657,
- 'rArr' , 8658,
- 'dArr' , 8659,
- 'hArr' , 8660,
- 'forall' , 8704,
- 'part' , 8706,
- 'exist' , 8707,
- 'empty' , 8709,
- 'nabla' , 8711,
- 'isin' , 8712,
- 'notin' , 8713,
- 'ni' , 8715,
- 'prod' , 8719,
- 'sum' , 8721,
- 'minus' , 8722,
- 'lowast' , 8727,
- 'radic' , 8730,
- 'prop' , 8733,
- 'infin' , 8734,
- 'ang' , 8736,
- 'and' , 8743,
- 'or' , 8744,
- 'cap' , 8745,
- 'cup' , 8746,
- 'int' , 8747,
- 'there4' , 8756,
- 'sim' , 8764,
- 'cong' , 8773,
- 'asymp' , 8776,
- 'ne' , 8800,
- 'equiv' , 8801,
- 'le' , 8804,
- 'ge' , 8805,
- 'sub' , 8834,
- 'sup' , 8835,
- 'nsub' , 8836,
- 'sube' , 8838,
- 'supe' , 8839,
- 'oplus' , 8853,
- 'otimes' , 8855,
- 'perp' , 8869,
- 'sdot' , 8901,
- 'lceil' , 8968,
- 'rceil' , 8969,
- 'lfloor' , 8970,
- 'rfloor' , 8971,
- 'lang' , 9001,
- 'rang' , 9002,
- 'loz' , 9674,
- 'spades' , 9824,
- 'clubs' , 9827,
- 'hearts' , 9829,
- 'diams' , 9830,
- 'OElig' , 338,
- 'oelig' , 339,
- 'Scaron' , 352,
- 'scaron' , 353,
- 'Yuml' , 376,
- 'circ' , 710,
- 'tilde' , 732,
- 'ensp' , 8194,
- 'emsp' , 8195,
- 'thinsp' , 8201,
- 'zwnj' , 8204,
- 'zwj' , 8205,
- 'lrm' , 8206,
- 'rlm' , 8207,
- 'ndash' , 8211,
- 'mdash' , 8212,
- 'lsquo' , 8216,
- 'rsquo' , 8217,
- 'sbquo' , 8218,
- 'ldquo' , 8220,
- 'rdquo' , 8221,
- 'bdquo' , 8222,
- 'dagger' , 8224,
- 'Dagger' , 8225,
- 'permil' , 8240,
- 'lsaquo' , 8249,
- 'rsaquo' , 8250,
- 'euro' , 8364,
-);
-
-
-# Fill out %Name2character...
-{
- %Name2character = ();
- my($name, $number);
- while( ($name, $number) = each %Name2character_number) {
- if($] < 5.007 and $number > 255) {
- $Name2character{$name} = $FAR_CHAR;
- # substitute for Unicode characters, for perls
- # that can't reliably handle them
- } elsif ($] >= 5.007003) {
- $Name2character{$name} = chr utf8::unicode_to_native($number);
- # normal case for more recent Perls where we can translate from Unicode
- # to the native character set.
- }
- elsif (exists $Code2USASCII{$number}) {
- $Name2character{$name} = $Code2USASCII{$number};
- # on older Perls, we can use the translations we have hard-coded in this
- # file, but these don't include the non-ASCII-range characters
- }
- elsif ($NOT_ASCII && $number > 127 && $number < 256) {
- # this range on old non-ASCII-platform perls is wrong
- if (exists $Latin1Code_to_fallback{$number}) {
- $Name2character{$name} = $Latin1Code_to_fallback{$number};
- } else {
- $Name2character{$name} = $FAR_CHAR;
- }
- } else {
- $Name2character{$name} = chr $number;
- }
- }
-}
-
-#--------------------------------------------------------------------------
-1;
-__END__
-
-#line 687
-
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# What I used for reading the XHTML .ent files:
-
-my(@norms, @good, @bad);
-my $dir = 'c:/sgml/docbook/';
-my %escapes;
-foreach my $file (qw(
- xhtml-symbol.ent
- xhtml-lat1.ent
- xhtml-special.ent
-)) {
- open(IN, "<$dir$file") or die "can't read-open $dir$file: $!";
- print "Reading $file...\n";
- while() {
- if(m//) {
- my($name, $value) = ($1,$2);
- next if $name eq 'quot' or $name eq 'apos' or $name eq 'gt';
-
- $value = hex $1 if $value =~ m/^x([a-fA-F0-9]+)$/s;
- print "ILLEGAL VALUE $value" unless $value =~ m/^\d+$/s;
- if($value > 255) {
- push @good , sprintf " %-10s , chr(%s),\n", "'$name'", $value;
- push @bad , sprintf " %-10s , \$bad,\n", "'$name'", $value;
- } else {
- push @norms, sprintf " %-10s , chr(%s),\n", "'$name'", $value;
- }
- } elsif(m/1), @Known_formatting_codes);
-@Known_directives = qw(head1 head2 head3 head4 item over back);
-%Known_directives = map(($_=>'Plain'), @Known_directives);
-$NL = $/ unless defined $NL;
-
-#-----------------------------------------------------------------------------
-# Set up some constants:
-
-BEGIN {
- if(defined &ASCII) { }
- elsif(chr(65) eq 'A') { *ASCII = sub () {1} }
- else { *ASCII = sub () {''} }
-
- unless(defined &MANY_LINES) { *MANY_LINES = sub () {20} }
- DEBUG > 4 and print STDERR "MANY_LINES is ", MANY_LINES(), "\n";
- unless(MANY_LINES() >= 1) {
- die "MANY_LINES is too small (", MANY_LINES(), ")!\nAborting";
- }
- if(defined &UNICODE) { }
- elsif($] >= 5.008) { *UNICODE = sub() {1} }
- else { *UNICODE = sub() {''} }
-}
-if(DEBUG > 2) {
- print STDERR "# We are ", ASCII ? '' : 'not ', "in ASCII-land\n";
- print STDERR "# We are under a Unicode-safe Perl.\n";
-}
-
-# The NO BREAK SPACE and SOFT HYHPEN are used in several submodules.
-if ($] ge 5.007_003) { # On sufficiently modern Perls we can handle any
- # character set
- $Pod::Simple::nbsp = chr utf8::unicode_to_native(0xA0);
- $Pod::Simple::shy = chr utf8::unicode_to_native(0xAD);
-}
-elsif (Pod::Simple::ASCII) { # Hard code ASCII early Perl
- $Pod::Simple::nbsp = "\xA0";
- $Pod::Simple::shy = "\xAD";
-}
-else { # EBCDIC on early Perl. We know what the values are for the code
- # pages supported then.
- $Pod::Simple::nbsp = "\x41";
- $Pod::Simple::shy = "\xCA";
-}
-
-# Design note:
-# This is a parser for Pod. It is not a parser for the set of Pod-like
-# languages which happens to contain Pod -- it is just for Pod, plus possibly
-# some extensions.
-
-# @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
-#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-__PACKAGE__->_accessorize(
- 'nbsp_for_S', # Whether to map S<...>'s to \xA0 characters
- 'source_filename', # Filename of the source, for use in warnings
- 'source_dead', # Whether to consider this parser's source dead
-
- 'output_fh', # The filehandle we're writing to, if applicable.
- # Used only in some derived classes.
-
- 'hide_line_numbers', # For some dumping subclasses: whether to pointedly
- # suppress the start_line attribute
-
- 'line_count', # the current line number
- 'pod_para_count', # count of pod paragraphs seen so far
-
- 'no_whining', # whether to suppress whining
- 'no_errata_section', # whether to suppress the errata section
- 'complain_stderr', # whether to complain to stderr
-
- 'doc_has_started', # whether we've fired the open-Document event yet
-
- 'bare_output', # For some subclasses: whether to prepend
- # header-code and postpend footer-code
-
- 'keep_encoding_directive', # whether to emit =encoding
- 'nix_X_codes', # whether to ignore X<...> codes
- 'merge_text', # whether to avoid breaking a single piece of
- # text up into several events
-
- 'preserve_whitespace', # whether to try to keep whitespace as-is
- 'strip_verbatim_indent', # What indent to strip from verbatim
-
- 'parse_characters', # Whether parser should expect chars rather than octets
-
- 'content_seen', # whether we've seen any real Pod content
- 'errors_seen', # TODO: document. whether we've seen any errors (fatal or not)
-
- 'codes_in_verbatim', # for PseudoPod extensions
-
- 'code_handler', # coderef to call when a code (non-pod) line is seen
- 'cut_handler', # ... when a =cut line is seen
- 'pod_handler', # ... when a =pod line is seen
- 'whiteline_handler', # ... when a line with only whitespace is seen
- #Called like:
- # $code_handler->($line, $self->{'line_count'}, $self) if $code_handler;
- # $cut_handler->($line, $self->{'line_count'}, $self) if $cut_handler;
- # $pod_handler->($line, $self->{'line_count'}, $self) if $pod_handler;
- # $wl_handler->($line, $self->{'line_count'}, $self) if $wl_handler;
- 'parse_empty_lists', # whether to acknowledge empty =over/=back blocks
- 'raw_mode', # to report entire raw lines instead of Pod elements
-);
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub any_errata_seen { # good for using as an exit() value...
- return shift->{'errors_seen'} || 0;
-}
-
-sub errata_seen {
- return shift->{'all_errata'} || {};
-}
-
-# Returns the encoding only if it was recognized as being handled and set
-sub detected_encoding {
- return shift->{'detected_encoding'};
-}
-
-sub encoding {
- my $this = shift;
- return $this->{'encoding'} unless @_; # GET.
-
- $this->_handle_encoding_line("=encoding $_[0]");
- if ($this->{'_processed_encoding'}) {
- delete $this->{'_processed_encoding'};
- if(! $this->{'encoding_command_statuses'} ) {
- DEBUG > 2 and print STDERR " CRAZY ERROR: encoding wasn't really handled?!\n";
- } elsif( $this->{'encoding_command_statuses'}[-1] ) {
- $this->scream( "=encoding $_[0]",
- sprintf "Couldn't do %s: %s",
- $this->{'encoding_command_reqs' }[-1],
- $this->{'encoding_command_statuses'}[-1],
- );
- } else {
- DEBUG > 2 and print STDERR " (encoding successfully handled.)\n";
- }
- return $this->{'encoding'};
- } else {
- return undef;
- }
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-# Pull in some functions that, for some reason, I expect to see here too:
-BEGIN {
- *pretty = \&Pod::Simple::BlackBox::pretty;
- *stringify_lol = \&Pod::Simple::BlackBox::stringify_lol;
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub version_report {
- my $class = ref($_[0]) || $_[0];
- if($class eq __PACKAGE__) {
- return "$class $VERSION";
- } else {
- my $v = $class->VERSION;
- return "$class $v (" . __PACKAGE__ . " $VERSION)";
- }
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-#sub curr_open { # read-only list accessor
-# return @{ $_[0]{'curr_open'} || return() };
-#}
-#sub _curr_open_listref { $_[0]{'curr_open'} ||= [] }
-
-
-sub output_string {
- # Works by faking out output_fh. Simplifies our code.
- #
- my $this = shift;
- return $this->{'output_string'} unless @_; # GET.
-
- require Pod::Simple::TiedOutFH;
- my $x = (defined($_[0]) and ref($_[0])) ? $_[0] : \( $_[0] );
- $$x = '' unless defined $$x;
- DEBUG > 4 and print STDERR "# Output string set to $x ($$x)\n";
- $this->{'output_fh'} = Pod::Simple::TiedOutFH->handle_on($_[0]);
- return
- $this->{'output_string'} = $_[0];
- #${ ${ $this->{'output_fh'} } };
-}
-
-sub abandon_output_string { $_[0]->abandon_output_fh; delete $_[0]{'output_string'} }
-sub abandon_output_fh { $_[0]->output_fh(undef) }
-# These don't delete the string or close the FH -- they just delete our
-# references to it/them.
-# TODO: document these
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub new {
- # takes no parameters
- my $class = ref($_[0]) || $_[0];
- #Carp::croak(__PACKAGE__ . " is a virtual base class -- see perldoc "
- # . __PACKAGE__ );
- return bless {
- 'accept_codes' => { map( ($_=>$_), @Known_formatting_codes ) },
- 'accept_directives' => { %Known_directives },
- 'accept_targets' => {},
- }, $class;
-}
-
-
-
-# TODO: an option for whether to interpolate E<...>'s, or just resolve to codes.
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub _handle_element_start { # OVERRIDE IN DERIVED CLASS
- my($self, $element_name, $attr_hash_r) = @_;
- return;
-}
-
-sub _handle_element_end { # OVERRIDE IN DERIVED CLASS
- my($self, $element_name) = @_;
- return;
-}
-
-sub _handle_text { # OVERRIDE IN DERIVED CLASS
- my($self, $text) = @_;
- return;
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#
-# And now directives (not targets)
-
-sub accept_directive_as_verbatim { shift->_accept_directives('Verbatim', @_) }
-sub accept_directive_as_data { shift->_accept_directives('Data', @_) }
-sub accept_directive_as_processed { shift->_accept_directives('Plain', @_) }
-
-sub _accept_directives {
- my($this, $type) = splice @_,0,2;
- foreach my $d (@_) {
- next unless defined $d and length $d;
- Carp::croak "\"$d\" isn't a valid directive name"
- unless $d =~ m/^[a-zA-Z][a-zA-Z0-9]*$/s;
- Carp::croak "\"$d\" is already a reserved Pod directive name"
- if exists $Known_directives{$d};
- $this->{'accept_directives'}{$d} = $type;
- DEBUG > 2 and print STDERR "Learning to accept \"=$d\" as directive of type $type\n";
- }
- DEBUG > 6 and print STDERR "$this\'s accept_directives : ",
- pretty($this->{'accept_directives'}), "\n";
-
- return sort keys %{ $this->{'accept_directives'} } if wantarray;
- return;
-}
-
-#--------------------------------------------------------------------------
-# TODO: document these:
-
-sub unaccept_directive { shift->unaccept_directives(@_) };
-
-sub unaccept_directives {
- my $this = shift;
- foreach my $d (@_) {
- next unless defined $d and length $d;
- Carp::croak "\"$d\" isn't a valid directive name"
- unless $d =~ m/^[a-zA-Z][a-zA-Z0-9]*$/s;
- Carp::croak "But you must accept \"$d\" directives -- it's a builtin!"
- if exists $Known_directives{$d};
- delete $this->{'accept_directives'}{$d};
- DEBUG > 2 and print STDERR "OK, won't accept \"=$d\" as directive.\n";
- }
- return sort keys %{ $this->{'accept_directives'} } if wantarray;
- return
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#
-# And now targets (not directives)
-
-sub accept_target { shift->accept_targets(@_) } # alias
-sub accept_target_as_text { shift->accept_targets_as_text(@_) } # alias
-
-
-sub accept_targets { shift->_accept_targets('1', @_) }
-
-sub accept_targets_as_text { shift->_accept_targets('force_resolve', @_) }
- # forces them to be processed, even when there's no ":".
-
-sub _accept_targets {
- my($this, $type) = splice @_,0,2;
- foreach my $t (@_) {
- next unless defined $t and length $t;
- # TODO: enforce some limitations on what a target name can be?
- $this->{'accept_targets'}{$t} = $type;
- DEBUG > 2 and print STDERR "Learning to accept \"$t\" as target of type $type\n";
- }
- return sort keys %{ $this->{'accept_targets'} } if wantarray;
- return;
-}
-
-#--------------------------------------------------------------------------
-sub unaccept_target { shift->unaccept_targets(@_) }
-
-sub unaccept_targets {
- my $this = shift;
- foreach my $t (@_) {
- next unless defined $t and length $t;
- # TODO: enforce some limitations on what a target name can be?
- delete $this->{'accept_targets'}{$t};
- DEBUG > 2 and print STDERR "OK, won't accept \"$t\" as target.\n";
- }
- return sort keys %{ $this->{'accept_targets'} } if wantarray;
- return;
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#
-# And now codes (not targets or directives)
-
-# XXX Probably it is an error that the digit '9' is excluded from these re's.
-# Broken for early Perls on EBCDIC
-my $xml_name_re = eval "qr/[^-.0-8:A-Z_a-z[:^ascii:]]/";
-if (! defined $xml_name_re) {
- $xml_name_re = qr/[\x00-\x2C\x2F\x39\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/;
-}
-
-sub accept_code { shift->accept_codes(@_) } # alias
-
-sub accept_codes { # Add some codes
- my $this = shift;
-
- foreach my $new_code (@_) {
- next unless defined $new_code and length $new_code;
- # A good-enough check that it's good as an XML Name symbol:
- Carp::croak "\"$new_code\" isn't a valid element name"
- if $new_code =~ $xml_name_re
- # Characters under 0x80 that aren't legal in an XML Name.
- or $new_code =~ m/^[-\.0-9]/s
- or $new_code =~ m/:[-\.0-9]/s;
- # The legal under-0x80 Name characters that
- # an XML Name still can't start with.
-
- $this->{'accept_codes'}{$new_code} = $new_code;
-
- # Yes, map to itself -- just so that when we
- # see "=extend W [whatever] thatelementname", we say that W maps
- # to whatever $this->{accept_codes}{thatelementname} is,
- # i.e., "thatelementname". Then when we go re-mapping,
- # a "W" in the treelet turns into "thatelementname". We only
- # remap once.
- # If we say we accept "W", then a "W" in the treelet simply turns
- # into "W".
- }
-
- return;
-}
-
-#--------------------------------------------------------------------------
-sub unaccept_code { shift->unaccept_codes(@_) }
-
-sub unaccept_codes { # remove some codes
- my $this = shift;
-
- foreach my $new_code (@_) {
- next unless defined $new_code and length $new_code;
- # A good-enough check that it's good as an XML Name symbol:
- Carp::croak "\"$new_code\" isn't a valid element name"
- if $new_code =~ $xml_name_re
- # Characters under 0x80 that aren't legal in an XML Name.
- or $new_code =~ m/^[-\.0-9]/s
- or $new_code =~ m/:[-\.0-9]/s;
- # The legal under-0x80 Name characters that
- # an XML Name still can't start with.
-
- Carp::croak "But you must accept \"$new_code\" codes -- it's a builtin!"
- if grep $new_code eq $_, @Known_formatting_codes;
-
- delete $this->{'accept_codes'}{$new_code};
-
- DEBUG > 2 and print STDERR "OK, won't accept the code $new_code<...>.\n";
- }
-
- return;
-}
-
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub parse_string_document {
- my $self = shift;
- my @lines;
- foreach my $line_group (@_) {
- next unless defined $line_group and length $line_group;
- pos($line_group) = 0;
- while($line_group =~
- m/([^\n\r]*)(\r?\n?)/g # supports \r, \n ,\r\n
- #m/([^\n\r]*)((?:\r?\n)?)/g
- ) {
- #print(">> $1\n"),
- $self->parse_lines($1)
- if length($1) or length($2)
- or pos($line_group) != length($line_group);
- # I.e., unless it's a zero-length "empty line" at the very
- # end of "foo\nbar\n" (i.e., between the \n and the EOS).
- }
- }
- $self->parse_lines(undef); # to signal EOF
- return $self;
-}
-
-sub _init_fh_source {
- my($self, $source) = @_;
-
- #DEBUG > 1 and print STDERR "Declaring $source as :raw for starters\n";
- #$self->_apply_binmode($source, ':raw');
- #binmode($source, ":raw");
-
- return;
-}
-
-#:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.
-#
-
-sub parse_file {
- my($self, $source) = (@_);
-
- if(!defined $source) {
- Carp::croak("Can't use empty-string as a source for parse_file");
- } elsif(ref(\$source) eq 'GLOB') {
- $self->{'source_filename'} = '' . ($source);
- } elsif(ref $source) {
- $self->{'source_filename'} = '' . ($source);
- } elsif(!length $source) {
- Carp::croak("Can't use empty-string as a source for parse_file");
- } else {
- {
- local *PODSOURCE;
- open(PODSOURCE, "<$source") || Carp::croak("Can't open $source: $!");
- $self->{'source_filename'} = $source;
- $source = *PODSOURCE{IO};
- }
- $self->_init_fh_source($source);
- }
- # By here, $source is a FH.
-
- $self->{'source_fh'} = $source;
-
- my($i, @lines);
- until( $self->{'source_dead'} ) {
- splice @lines;
-
- for($i = MANY_LINES; $i--;) { # read those many lines at a time
- local $/ = $NL;
- push @lines, scalar(<$source>); # readline
- last unless defined $lines[-1];
- # but pass thru the undef, which will set source_dead to true
- }
-
- my $at_eof = ! $lines[-1]; # keep track of the undef
- pop @lines if $at_eof; # silence warnings
-
- # be eol agnostic
- s/\r\n?/\n/g for @lines;
-
- # make sure there are only one line elements for parse_lines
- @lines = split(/(?<=\n)/, join('', @lines));
-
- # push the undef back after popping it to set source_dead to true
- push @lines, undef if $at_eof;
-
- $self->parse_lines(@lines);
- }
- delete($self->{'source_fh'}); # so it can be GC'd
- return $self;
-}
-
-#:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.
-
-sub parse_from_file {
- # An emulation of Pod::Parser's interface, for the sake of Perldoc.
- # Basically just a wrapper around parse_file.
-
- my($self, $source, $to) = @_;
- $self = $self->new unless ref($self); # so we tolerate being a class method
-
- if(!defined $source) { $source = *STDIN{IO}
- } elsif(ref(\$source) eq 'GLOB') { # stet
- } elsif(ref($source) ) { # stet
- } elsif(!length $source
- or $source eq '-' or $source =~ m/^<&(?:STDIN|0)$/i
- ) {
- $source = *STDIN{IO};
- }
-
- if(!defined $to) { $self->output_fh( *STDOUT{IO} );
- } elsif(ref(\$to) eq 'GLOB') { $self->output_fh( $to );
- } elsif(ref($to)) { $self->output_fh( $to );
- } elsif(!length $to
- or $to eq '-' or $to =~ m/^>&?(?:STDOUT|1)$/i
- ) {
- $self->output_fh( *STDOUT{IO} );
- } elsif($to =~ m/^>&(?:STDERR|2)$/i) {
- $self->output_fh( *STDERR{IO} );
- } else {
- require Symbol;
- my $out_fh = Symbol::gensym();
- DEBUG and print STDERR "Write-opening to $to\n";
- open($out_fh, ">$to") or Carp::croak "Can't write-open $to: $!";
- binmode($out_fh)
- if $self->can('write_with_binmode') and $self->write_with_binmode;
- $self->output_fh($out_fh);
- }
-
- return $self->parse_file($source);
-}
-
-#-----------------------------------------------------------------------------
-
-sub whine {
- #my($self,$line,$complaint) = @_;
- my $self = shift(@_);
- ++$self->{'errors_seen'};
- if($self->{'no_whining'}) {
- DEBUG > 9 and print STDERR "Discarding complaint (at line $_[0]) $_[1]\n because no_whining is on.\n";
- return;
- }
- push @{$self->{'all_errata'}{$_[0]}}, $_[1];
- return $self->_complain_warn(@_) if $self->{'complain_stderr'};
- return $self->_complain_errata(@_);
-}
-
-sub scream { # like whine, but not suppressible
- #my($self,$line,$complaint) = @_;
- my $self = shift(@_);
- ++$self->{'errors_seen'};
- push @{$self->{'all_errata'}{$_[0]}}, $_[1];
- return $self->_complain_warn(@_) if $self->{'complain_stderr'};
- return $self->_complain_errata(@_);
-}
-
-sub _complain_warn {
- my($self,$line,$complaint) = @_;
- return printf STDERR "%s around line %s: %s\n",
- $self->{'source_filename'} || 'Pod input', $line, $complaint;
-}
-
-sub _complain_errata {
- my($self,$line,$complaint) = @_;
- if( $self->{'no_errata_section'} ) {
- DEBUG > 9 and print STDERR "Discarding erratum (at line $line) $complaint\n because no_errata_section is on.\n";
- } else {
- DEBUG > 9 and print STDERR "Queuing erratum (at line $line) $complaint\n";
- push @{$self->{'errata'}{$line}}, $complaint
- # for a report to be generated later!
- }
- return 1;
-}
-
-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-sub _get_initial_item_type {
- # A hack-wrapper here for when you have like "=over\n\n=item 456\n\n"
- my($self, $para) = @_;
- return $para->[1]{'~type'} if $para->[1]{'~type'};
-
- return $para->[1]{'~type'} = 'text'
- if join("\n", @{$para}[2 .. $#$para]) =~ m/^\s*(\d+)\.?\s*$/s and $1 ne '1';
- # Else fall thru to the general case:
- return $self->_get_item_type($para);
-}
-
-
-
-sub _get_item_type { # mutates the item!!
- my($self, $para) = @_;
- return $para->[1]{'~type'} if $para->[1]{'~type'};
-
-
- # Otherwise we haven't yet been to this node. Maybe alter it...
-
- my $content = join "\n", @{$para}[2 .. $#$para];
-
- if($content =~ m/^\s*\*\s*$/s or $content =~ m/^\s*$/s) {
- # Like: "=item *", "=item * ", "=item"
- splice @$para, 2; # so it ends up just being ['=item', { attrhash } ]
- $para->[1]{'~orig_content'} = $content;
- return $para->[1]{'~type'} = 'bullet';
-
- } elsif($content =~ m/^\s*\*\s+(.+)/s) { # tolerance
-
- # Like: "=item * Foo bar baz";
- $para->[1]{'~orig_content'} = $content;
- $para->[1]{'~_freaky_para_hack'} = $1;
- DEBUG > 2 and print STDERR " Tolerating $$para[2] as =item *\\n\\n$1\n";
- splice @$para, 2; # so it ends up just being ['=item', { attrhash } ]
- return $para->[1]{'~type'} = 'bullet';
-
- } elsif($content =~ m/^\s*(\d+)\.?\s*$/s) {
- # Like: "=item 1.", "=item 123412"
-
- $para->[1]{'~orig_content'} = $content;
- $para->[1]{'number'} = $1; # Yes, stores the number there!
-
- splice @$para, 2; # so it ends up just being ['=item', { attrhash } ]
- return $para->[1]{'~type'} = 'number';
-
- } else {
- # It's anything else.
- return $para->[1]{'~type'} = 'text';
-
- }
-}
-
-#-----------------------------------------------------------------------------
-
-sub _make_treelet {
- my $self = shift; # and ($para, $start_line)
- my $treelet;
- if(!@_) {
- return [''];
- } if(ref $_[0] and ref $_[0][0] and $_[0][0][0] eq '~Top') {
- # Hack so we can pass in fake-o pre-cooked paragraphs:
- # just have the first line be a reference to a ['~Top', {}, ...]
- # We use this feechure in gen_errata and stuff.
-
- DEBUG and print STDERR "Applying precooked treelet hack to $_[0][0]\n";
- $treelet = $_[0][0];
- splice @$treelet, 0, 2; # lop the top off
- return $treelet;
- } else {
- $treelet = $self->_treelet_from_formatting_codes(@_);
- }
-
- if( $self->_remap_sequences($treelet) ) {
- $self->_treat_Zs($treelet); # Might as well nix these first
- $self->_treat_Ls($treelet); # L has to precede E and S
- $self->_treat_Es($treelet);
- $self->_treat_Ss($treelet); # S has to come after E
-
- $self->_wrap_up($treelet); # Nix X's and merge texties
-
- } else {
- DEBUG and print STDERR "Formatless treelet gets fast-tracked.\n";
- # Very common case!
- }
-
- splice @$treelet, 0, 2; # lop the top off
-
- return $treelet;
-}
-
-#:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.
-
-sub _wrap_up {
- my($self, @stack) = @_;
- my $nixx = $self->{'nix_X_codes'};
- my $merge = $self->{'merge_text' };
- return unless $nixx or $merge;
-
- DEBUG > 2 and print STDERR "\nStarting _wrap_up traversal.\n",
- $merge ? (" Merge mode on\n") : (),
- $nixx ? (" Nix-X mode on\n") : (),
- ;
-
-
- my($i, $treelet);
- while($treelet = shift @stack) {
- DEBUG > 3 and print STDERR " Considering children of this $treelet->[0] node...\n";
- for($i = 2; $i < @$treelet; ++$i) { # iterate over children
- DEBUG > 3 and print STDERR " Considering child at $i ", pretty($treelet->[$i]), "\n";
- if($nixx and ref $treelet->[$i] and $treelet->[$i][0] eq 'X') {
- DEBUG > 3 and print STDERR " Nixing X node at $i\n";
- splice(@$treelet, $i, 1); # just nix this node (and its descendants)
- # no need to back-update the counter just yet
- redo;
-
- } elsif($merge and $i != 2 and # non-initial
- !ref $treelet->[$i] and !ref $treelet->[$i - 1]
- ) {
- DEBUG > 3 and print STDERR " Merging ", $i-1,
- ":[$treelet->[$i-1]] and $i\:[$treelet->[$i]]\n";
- $treelet->[$i-1] .= ( splice(@$treelet, $i, 1) )[0];
- DEBUG > 4 and print STDERR " Now: ", $i-1, ":[$treelet->[$i-1]]\n";
- --$i;
- next;
- # since we just pulled the possibly last node out from under
- # ourselves, we can't just redo()
-
- } elsif( ref $treelet->[$i] ) {
- DEBUG > 4 and print STDERR " Enqueuing ", pretty($treelet->[$i]), " for traversal.\n";
- push @stack, $treelet->[$i];
-
- if($treelet->[$i][0] eq 'L') {
- my $thing;
- foreach my $attrname ('section', 'to') {
- if(defined($thing = $treelet->[$i][1]{$attrname}) and ref $thing) {
- unshift @stack, $thing;
- DEBUG > 4 and print STDERR " +Enqueuing ",
- pretty( $treelet->[$i][1]{$attrname} ),
- " as an attribute value to tweak.\n";
- }
- }
- }
- }
- }
- }
- DEBUG > 2 and print STDERR "End of _wrap_up traversal.\n\n";
-
- return;
-}
-
-#:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.
-
-sub _remap_sequences {
- my($self,@stack) = @_;
-
- if(@stack == 1 and @{ $stack[0] } == 3 and !ref $stack[0][2]) {
- # VERY common case: abort it.
- DEBUG and print STDERR "Skipping _remap_sequences: formatless treelet.\n";
- return 0;
- }
-
- my $map = ($self->{'accept_codes'} || die "NO accept_codes in $self?!?");
-
- my $start_line = $stack[0][1]{'start_line'};
- DEBUG > 2 and printf
- "\nAbout to start _remap_sequences on treelet from line %s.\n",
- $start_line || '[?]'
- ;
- DEBUG > 3 and print STDERR " Map: ",
- join('; ', map "$_=" . (
- ref($map->{$_}) ? join(",", @{$map->{$_}}) : $map->{$_}
- ),
- sort keys %$map ),
- ("B~C~E~F~I~L~S~X~Z" eq join '~', sort keys %$map)
- ? " (all normal)\n" : "\n"
- ;
-
- # A recursive algorithm implemented iteratively! Whee!
-
- my($is, $was, $i, $treelet); # scratch
- while($treelet = shift @stack) {
- DEBUG > 3 and print STDERR " Considering children of this $treelet->[0] node...\n";
- for($i = 2; $i < @$treelet; ++$i) { # iterate over children
- next unless ref $treelet->[$i]; # text nodes are uninteresting
-
- DEBUG > 4 and print STDERR " Noting child $i : $treelet->[$i][0]<...>\n";
-
- $is = $treelet->[$i][0] = $map->{ $was = $treelet->[$i][0] };
- if( DEBUG > 3 ) {
- if(!defined $is) {
- print STDERR " Code $was<> is UNKNOWN!\n";
- } elsif($is eq $was) {
- DEBUG > 4 and print STDERR " Code $was<> stays the same.\n";
- } else {
- print STDERR " Code $was<> maps to ",
- ref($is)
- ? ( "tags ", map("$_<", @$is), '...', map('>', @$is), "\n" )
- : "tag $is<...>.\n";
- }
- }
-
- if(!defined $is) {
- $self->whine($start_line, "Deleting unknown formatting code $was<>");
- $is = $treelet->[$i][0] = '1'; # But saving the children!
- # I could also insert a leading "$was<" and tailing ">" as
- # children of this node, but something about that seems icky.
- }
- if(ref $is) {
- my @dynasty = @$is;
- DEBUG > 4 and print STDERR " Renaming $was node to $dynasty[-1]\n";
- $treelet->[$i][0] = pop @dynasty;
- my $nugget;
- while(@dynasty) {
- DEBUG > 4 and printf
- " Grafting a new %s node between %s and %s\n",
- $dynasty[-1], $treelet->[0], $treelet->[$i][0],
- ;
-
- #$nugget = ;
- splice @$treelet, $i, 1, [pop(@dynasty), {}, $treelet->[$i]];
- # relace node with a new parent
- }
- } elsif($is eq '0') {
- splice(@$treelet, $i, 1); # just nix this node (and its descendants)
- --$i; # back-update the counter
- } elsif($is eq '1') {
- splice(@$treelet, $i, 1 # replace this node with its children!
- => splice @{ $treelet->[$i] },2
- # (not catching its first two (non-child) items)
- );
- --$i; # back up for new stuff
- } else {
- # otherwise it's unremarkable
- unshift @stack, $treelet->[$i]; # just recurse
- }
- }
- }
-
- DEBUG > 2 and print STDERR "End of _remap_sequences traversal.\n\n";
-
- if(@_ == 2 and @{ $_[1] } == 3 and !ref $_[1][2]) {
- DEBUG and print STDERR "Noting that the treelet is now formatless.\n";
- return 0;
- }
- return 1;
-}
-
-# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
-
-sub _ponder_extend {
-
- # "Go to an extreme, move back to a more comfortable place"
- # -- /Oblique Strategies/, Brian Eno and Peter Schmidt
-
- my($self, $para) = @_;
- my $content = join ' ', splice @$para, 2;
- $content =~ s/^\s+//s;
- $content =~ s/\s+$//s;
-
- DEBUG > 2 and print STDERR "Ogling extensor: =extend $content\n";
-
- if($content =~
- m/^
- (\S+) # 1 : new item
- \s+
- (\S+) # 2 : fallback(s)
- (?:\s+(\S+))? # 3 : element name(s)
- \s*
- $
- /xs
- ) {
- my $new_letter = $1;
- my $fallbacks_one = $2;
- my $elements_one;
- $elements_one = defined($3) ? $3 : $1;
-
- DEBUG > 2 and print STDERR "Extensor has good syntax.\n";
-
- unless($new_letter =~ m/^[A-Z]$/s or $new_letter) {
- DEBUG > 2 and print STDERR " $new_letter isn't a valid thing to entend.\n";
- $self->whine(
- $para->[1]{'start_line'},
- "You can extend only formatting codes A-Z, not like \"$new_letter\""
- );
- return;
- }
-
- if(grep $new_letter eq $_, @Known_formatting_codes) {
- DEBUG > 2 and print STDERR " $new_letter isn't a good thing to extend, because known.\n";
- $self->whine(
- $para->[1]{'start_line'},
- "You can't extend an established code like \"$new_letter\""
- );
-
- #TODO: or allow if last bit is same?
-
- return;
- }
-
- unless($fallbacks_one =~ m/^[A-Z](,[A-Z])*$/s # like "B", "M,I", etc.
- or $fallbacks_one eq '0' or $fallbacks_one eq '1'
- ) {
- $self->whine(
- $para->[1]{'start_line'},
- "Format for second =extend parameter must be like"
- . " M or 1 or 0 or M,N or M,N,O but you have it like "
- . $fallbacks_one
- );
- return;
- }
-
- unless($elements_one =~ m/^[^ ,]+(,[^ ,]+)*$/s) { # like "B", "M,I", etc.
- $self->whine(
- $para->[1]{'start_line'},
- "Format for third =extend parameter: like foo or bar,Baz,qu:ux but not like "
- . $elements_one
- );
- return;
- }
-
- my @fallbacks = split ',', $fallbacks_one, -1;
- my @elements = split ',', $elements_one, -1;
-
- foreach my $f (@fallbacks) {
- next if exists $Known_formatting_codes{$f} or $f eq '0' or $f eq '1';
- DEBUG > 2 and print STDERR " Can't fall back on unknown code $f\n";
- $self->whine(
- $para->[1]{'start_line'},
- "Can't use unknown formatting code '$f' as a fallback for '$new_letter'"
- );
- return;
- }
-
- DEBUG > 3 and printf STDERR "Extensor: Fallbacks <%s> Elements <%s>.\n",
- @fallbacks, @elements;
-
- my $canonical_form;
- foreach my $e (@elements) {
- if(exists $self->{'accept_codes'}{$e}) {
- DEBUG > 1 and print STDERR " Mapping '$new_letter' to known extension '$e'\n";
- $canonical_form = $e;
- last; # first acceptable elementname wins!
- } else {
- DEBUG > 1 and print STDERR " Can't map '$new_letter' to unknown extension '$e'\n";
- }
- }
-
-
- if( defined $canonical_form ) {
- # We found a good N => elementname mapping
- $self->{'accept_codes'}{$new_letter} = $canonical_form;
- DEBUG > 2 and print
- "Extensor maps $new_letter => known element $canonical_form.\n";
- } else {
- # We have to use the fallback(s), which might be '0', or '1'.
- $self->{'accept_codes'}{$new_letter}
- = (@fallbacks == 1) ? $fallbacks[0] : \@fallbacks;
- DEBUG > 2 and print
- "Extensor maps $new_letter => fallbacks @fallbacks.\n";
- }
-
- } else {
- DEBUG > 2 and print STDERR "Extensor has bad syntax.\n";
- $self->whine(
- $para->[1]{'start_line'},
- "Unknown =extend syntax: $content"
- )
- }
- return;
-}
-
-
-#:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.
-
-sub _treat_Zs { # Nix Z<...>'s
- my($self,@stack) = @_;
-
- my($i, $treelet);
- my $start_line = $stack[0][1]{'start_line'};
-
- # A recursive algorithm implemented iteratively! Whee!
-
- while($treelet = shift @stack) {
- for($i = 2; $i < @$treelet; ++$i) { # iterate over children
- next unless ref $treelet->[$i]; # text nodes are uninteresting
- unless($treelet->[$i][0] eq 'Z') {
- unshift @stack, $treelet->[$i]; # recurse
- next;
- }
-
- DEBUG > 1 and print STDERR "Nixing Z node @{$treelet->[$i]}\n";
-
- # bitch UNLESS it's empty
- unless( @{$treelet->[$i]} == 2
- or (@{$treelet->[$i]} == 3 and $treelet->[$i][2] eq '')
- ) {
- $self->whine( $start_line, "A non-empty Z<>" );
- } # but kill it anyway
-
- splice(@$treelet, $i, 1); # thereby just nix this node.
- --$i;
-
- }
- }
-
- return;
-}
-
-# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
-
-# Quoting perlpodspec:
-
-# In parsing an L<...> code, Pod parsers must distinguish at least four
-# attributes:
-
-############# Not used. Expressed via the element children plus
-############# the value of the "content-implicit" flag.
-# First:
-# The link-text. If there is none, this must be undef. (E.g., in "L", the link-text is "Perl Functions". In
-# "L" and even "L<|Time::HiRes>", there is no link text. Note
-# that link text may contain formatting.)
-#
-
-############# The element children
-# Second:
-# The possibly inferred link-text -- i.e., if there was no real link text,
-# then this is the text that we'll infer in its place. (E.g., for
-# "L", the inferred link text is "Getopt::Std".)
-#
-
-############# The "to" attribute (which might be text, or a treelet)
-# Third:
-# The name or URL, or undef if none. (E.g., in "L", the name -- also sometimes called the page -- is
-# "perlfunc". In "L", the name is undef.)
-#
-
-############# The "section" attribute (which might be next, or a treelet)
-# Fourth:
-# The section (AKA "item" in older perlpods), or undef if none. E.g., in
-# Getopt::Std/DESCRIPTION, "DESCRIPTION" is the section. (Note that this
-# is not the same as a manpage section like the "5" in "man 5 crontab".
-# "Section Foo" in the Pod sense means the part of the text that's
-# introduced by the heading or item whose text is "Foo".)
-#
-# Pod parsers may also note additional attributes including:
-#
-
-############# The "type" attribute.
-# Fifth:
-# A flag for whether item 3 (if present) is a URL (like
-# "http://lists.perl.org" is), in which case there should be no section
-# attribute; a Pod name (like "perldoc" and "Getopt::Std" are); or
-# possibly a man page name (like "crontab(5)" is).
-#
-
-############# The "raw" attribute that is already there.
-# Sixth:
-# The raw original L<...> content, before text is split on "|", "/", etc,
-# and before E<...> codes are expanded.
-
-
-# For L<...> codes without a "name|" part, only E<...> and Z<> codes may
-# occur -- no other formatting codes. That is, authors should not use
-# "L>".
-#
-# Note, however, that formatting codes and Z<>'s can occur in any and all
-# parts of an L<...> (i.e., in name, section, text, and url).
-
-sub _treat_Ls { # Process our dear dear friends, the L<...> sequences
-
- # L
- # L or L
- # L"sec"> or L or L<"sec">
- # L
- # L or L
- # L or L or L
- # L